欢迎关注: 甲骨文云技术公众号
扫码加入: 19c新特性讲座群
公益讲座11点准时开始,请大家先浏览云技术微信公众号技术文章资料会在各群同步发布,已入群客户请勿重复入群!(收到二维码已过期,表示您已入群)
Oracle 备份恢复技术实践2020年8月28日上午11:00
侯圣文,Oracle ACE 总监
侯圣文
北京大学理学硕士,Oracle ACE 总监,中国OCM联盟创始人,中国大数
据联盟(BDA)创始人,ACOUG核心专家,ITPUB资深版主,中国
Cloudera用户组(ACCUG)创始人,TMC@TUG
现任贝壳找房技术总监
Oracle备份恢复技术实践
3
Agenda
Oracle 备份恢复技术实践
Oracle 备份恢复技术实践
备份恢复体系结构
备份恢复体系结构
RMAN 概述RMAN 概述RMAN
进行备份
RMAN
进行备份
RMAN
还原和恢复
RMAN
还原和恢复
RMAN Catalog目录
RMAN Catalog目录
Oracle
闪回技术
Oracle
闪回技术
4
Oracle 备份和恢复体系
• 备份,在日常生活中对一些重要文件的拷贝,主要是为了防止意外事件对我们的文件产生损坏或者丢失,对
这些重要文件做备份,给文件买一份保险。在 Oracle 数据库中也有备份和还原,Oracle 作为一个数据存储
的软件介质,存储的是数据,在当今数据的时代,数据就决定一个企业的命运,如果数据丢失,可能导致企
业倒闭,所以数据库的备份对企业来说是多么的重要。
• oracle 数据库备份有逻辑备份和物理备份,逻辑备份用来解决一些逻辑错误,而物理备份用来解决一些非逻
辑错误,物理备份的方式有冷备份和热备份,冷备份需要关闭数据库,使数据库处于一致性状态,拷贝数据
文件进行备份;热备份在数据库还处于运行状态下,对数据库进行备份,热备份数据库必须处于归档的模式
中,这样就能保持数据库的一致性,如果数据库处于非归档模式中,数据库只能进行冷备份。
5
Oracle 备份和恢复体系结构
数据库故障类型 语句失败 用户进程失败 网络故障 用户错误 介质失败 实例失败
1 2 备份分类
逻辑备份概述
物理备份概述
6
语句失败
SQL语句会有多种原因导致失败,某条语句执行失败时,
执行这条语句的服务器进程会检测到问题并回滚该语句,
这是Oracle 自动执行的。但是一些失败的原因Oracle 无
法自动处理,所以必须在编程的时候自动进行处理
语句失败的常见原因
无效数据,无效数据是语句失败的常见原因,通常是违反
格式或约束所造成的
应用程序中的逻辑错误,例如编写不合理导致死锁
表空间的不足导致无法扩展导致语句执行失败
SQL 语句缺少权限导致执行失败
语句失败
7
网络故障
网络故障出现的方面:
终端的重新启动,导致地址违规的程序
监听错误,可以配置备份侦听器和连接时间故
障转移
Serverprocess
PGA
Listener
User session
User process
8
用户错误
用户在编程的时候由于编写不够规范产生的逻辑错误,常常
由于用户的失误导致。
解决用户错误的理想方式
Oracle也提供了方法来处理,通过不完全恢复找到错误之前
的数据,备份好,再恢复到最终点,将备份的数据导入,这
样的操作十分复杂,Oracle 也提供了闪回技术来帮助我们更
好的解决用户产生的错误。
回滚事务和依赖事务或回退表
从回收站恢复表
用户错误
9
介质失败
介质失败
介质失败意味着磁盘受到损坏,因此磁盘上的文件也会受
到损坏,这将导致我们的数据库关闭。
应对介失败的策略:
生成控制文件、联机重做日志文件以及归档的重做日志文
件的多路复用副本
对控制文件、数据文件、联机重做日志文件进行备份
10
实例失败
实例失败
实例失败是实例的无序关闭,通常称为崩溃,断电、关闭或重
启服务器以及许多至关重要的硬件问题都会导致实例失败。
实例失败后,数据库完全可以能丢失已调教的事务和存储未提
交的事务,导致这种情况是因为服务器进程在内存中进行工作,
进程更新了数据库缓冲区缓存内的数据块与撤销块。
11
Oracle 逻辑备份恢复概述
Oracle 逻辑备份使用exp 和
expdp 进行备份
Oracle 逻辑恢复,使用 imp 和
impdp来恢复逻辑错误
12
Oracle 物理备份概述
• Oracle 物理备份使用手工 CP / tar 方式
进行物理冷备份,需要将数据库进行一
致性关闭。
• Oracle 使用RMAN 进行热备,存在归档
和非归档模式。
13
RMAN 概述
1
2 RMAN 备份的内容
RMAN 命令3
4 RMAN 环境配置
Recovery Manager 备份恢复工具
14
Recovery Manager 备份恢复工具
• 提供强大的控制和脚本语言
• 包括已发布的API,该API可以与备份软件
进行接口
• 备份数据,控制,归档的重做日志和服务
器参数文件
• 将文件备份到磁盘或磁带
• 与企业管理器云控制集成
15
RMAN 备份的内容
• 数据文件(datafile)
• 控制文件(control files)
• 归档日志文件(archived redo log files)
16
Backup命令
17
Backup命令选项
• 多段备份,将大的数据文件备份划分为固定大小的多段备份
– backup section size 1g tablespace USER_DATA;
• RMAN备份压缩(默认、低级、中级、高级)
– Configure compression algorithm ‘DEFAULT / ’LOW‘ / ’MEDIUM‘ ’ / ‘HIGH’ ;
• 为Oracle中的每个备份分配一个标记(tag)
– backup database tag='test backup’;
• 如果备份运行时间超过指定的持续时间,RMAN将取消备份
– backup duration 00:30 database;
• 限定备份集的大小
– backup database maxsetsize = 50m target ='test backup’;
• 备份到特定的设备类型(磁盘,磁带)
– backup database device type disk / sbt;
18
Backup命令选项
• 归档备份将永远保存,除非用手动方式删除它
– backup database keep forever;
• 备份的可选保留策略
– backup database format '/oracle/oradata/%U' keep until time ='sysdata+180’;
• 跳过脱机的、不可访问的或只读的数据文件
– backup database skip readonly; backup database skip offline; backup database skip inaccessible;
• 强制备份只读的数据文件
– backup database force;
• 基于上次备份,只备份添加的新数据文件
– backup database not backed up;
• 备份指定时间周期内没有被备份的数据文件,两天前备份失败的文件
– backup database not backed up since time ='sysdate -2';
19
RMAN 环境配置
• 配置限定信道1创建的每个备份片最大为100M,并且限定rman在该信道上最多打开8个文件,信道被限制
为只允许拥有100M以内的吞吐量。
– Configure channel 1 device type disk maxpiecesize 100m maxopenfiles 9 rate 100mb;
• 定义任何备份到磁盘上的备份都被复制
– configure datafile backup copies for device type disk to 2;
• 配置默认排除一个表空间
– configure exclude for tablespace old_data;
• 启用或禁止备份优化,启用优化,会使Oracle跳过在备份设备上已有相同备份的文件的备份
– configure backup optimization on;
• RMAN在默认位置以外的位置创建备份控制文件
– configure snapshot controlfile name to '/oracle/oradata/snapshotcontrol';
20
RMAN 环境配置
• 关闭或开启备份期间自动执行自动备份控制文件和参数文件,默认关闭
– configure controlfile autobackup on / off;
• 配置默认的保留策略
– configure retention policy to recovery window of 7 days;
• 基于冗余的保留策略
– configure retention policy to redundancy 3;
• 禁止保留策略
– configure retention policy to none;
• 将保留策略设置为默认值1
– configure retention policy clear;
• 配置归档日志删除策略,备份超过三次的归档重做日志将会被删除
– configure archivelog deletion policy to backed up 3 times to devie type disk;
21
RMAN 进行备份
1
2 RMAN 备份类型
RMAN 备份级别3
4 管理和监视RMAN 备份
RMAN 备份的概念
22
RMAN 备份概述
• RMAN 备份的类型可以有备份集和映像拷贝的两种类型,备份集只备份使用了的数据快,支持 compress
压缩备份;映像拷贝的方式类似于手工冷备,备份整个文件所有数据块,不支持compress 压缩
• RMAN 备份级别,可以是 database 级别、tablespace 级别 、datafile 级别、spfile 级别 、current
controlfile 级别 和 archivelog all 级别。
• RMAN 全备和增量备份,RMAN 全备备份所有使用的数据块,此备份模式备份的备份不能作为增量备份的
基础;增量备份,备份某此备份以来发生变化的数据块,增量备份的基础是一定要存在0级完全备份,0级
备份备份所有的数据块,1级备份备份上次备份以来发生改变的数据块
• 快改变跟踪,通过文件记录发生变化的块,优化加速增量备份的速度,因为记录每个块的改变,所以在增
量备份的时候,就可以根据文件记录的块去备份,而不是扫描所有的块来判断这个块是否发生了改变
23
RMAN 备份体系结构
24
RMAN 冷备份和热备份
• 冷备份
– 干净的关闭数据库(shutdown immediate / transactional / normal)
– 使用RMAN 进行一致性备份
– Backup as backupset database format ‘xxxxx’;
– 压缩模式:backup as compressed backupset database;
• 热备份
– 数据库处于打开状态,进行备份
– Backup as backupset database format ‘xxxxx’;
– 压缩模式:backup as compressed backupset database;
25
RMAN 备份类型
备份集(Backup set)
映像拷贝(Image copies)
26
Backup as copy 命令
• RMAN可以创建数据库数据文件、归档重做日志或控制文件的精确副本
• 数据库印象副本
• backup as copy database;
• 表空间
• backup as copy tablespace users;
• 数据文件
• backup as copy datafile 1 ( '/oracle/system01.dbf’);
• 控制文件副本
• backup current controlfile;
• Archivelog 映像副本
• backup as copy archivelog all;
27
RMAN 全量备份
28
RMAN 增量备份
优点
• 更少的使用磁带或磁盘
• 降低网络带宽要求
• 节约备份时间
• 既可以在归档和非归档模式执行增量备份
块更改跟踪文件
• 执行alter database enable block change tracking
命令启用块改改变跟踪。如果没有使用OMF,可
以定义块改变跟踪文件的位置和名称。
• 通过视图V$BLOCK_CHANGE_TRACKING来查看
是否启用了快改变跟踪。
• 可以使用alter database rename file命令移动快更
改跟踪文件。启用alter database enable block change tracking using file '/u01/test.file’;
禁用alter database disable block change tracking;
29
RMAN 差异增量备份和累计增量备份
• 0级备份,必须有0级备份才能够执行其他类型的增量备份操作 backup incremental level=0 database;
• 1级差异备份:比自己低一级或同级之间所有发生变化的数据块 backup incremental level=1 database;
• 使备份集备份自上次0级备份以来所有发生变化的数据块,忽略之前的1级备份 backup incremental level =1 cumulative database;
30
管理和监视RMAN 备份
• 对备份文件进行管理和校验,备份存在expired 和 obsolete,备份obsolete 包含的是过时陈旧的
备份,但是该备份还是有效,就是超出了备份的保留策略,可以通过 report obsolete 来查看过
期的备份;备份 expired 包含的是过期的无效的备份,备份文件损坏或者丢失了,但是在控制文
件元数据中有记录,可以使用 list expired backup 查看过期的文件
User User UserUser User
31
管理和监视RMAN 备份
• List 命令列出已经创建的备份
– List backup;
• Report 命令通过询问目标数据库来确定那些需要备份
– Report need backup;
• Delete 命令删除不再需要的备份
– Delete obsolete;
• 可以通过RMAN 备份相关的动态性能视图来查询,而不依赖list 命令
• 交叉检查备份
– Crosscheck backup of database;
32
RMAN 还原和恢复
1
2 数据库的Restore 命令和 Recover命令
实例恢复3
4 完整恢复
数据恢复顾问
5 不完整恢复
6 控制文件的自动备份和还原
7 使用镜像副本恢复
8 块恢复
33
使用RMAN 还原和恢复
• 还原(restore):数据文件备份的位置。
• 恢复(recovery):利用归档重做日志追到最新的位置。
• 最终的目标:保持数据库一致性,控制文件和数据文件头中的SCN号相同
34
数据恢复顾问(只能用于单实例数据库的环境)
• list failure 命令查看故障问题
• advise failure 命令出故障建议恢复脚本
• repair failure 命令执行恢复脚本
• change failure 命令更改故障优先级或关闭一个或多个故障
35
数据库的Restore 命令和 Recover命令
• restore 命令 查找最近的备份来进行还原。 使用restore命令时,会在没有任何提醒的情况下重写已经存在的任何文件,除非使用set newname命令。
• recover 命令 该命令执行数据库的完全恢复或者时间点恢复。 recover 命令也用于判断是否存在可用的增量备份映像。 recover 命令总是尝试首先使用增量备份,这是还原数据库最快的方法。 还原归档重做日志时:recover命令尝试首先使用磁盘上已有的重做日志。
36
实例恢复
• 实例启动(数据文件不一致)
• 前滚(redo)
• 文件中已提交和未提交的数据
• 数据库已打开
• 回滚(undo)
• 文件中提交的数据
37
数据库完整恢复
• 完整恢复的4个步骤:
使受损的数据文件脱机
还原受损文件
恢复受损文件
使恢复的文件联机
Restoreddata files
Data files containingcommitted and uncommittedtransactions
Recovereddata files
Changes applied Undo applied
5
4
3
2
1
Archivedlog Archived
log OnlineRedo log
38
数据库不完全恢复
• 不完全恢复意味这丢失数据,通过还原所有数据文件将整个数据库回退,然后执行不完整恢复。不是应
用自备份后生成的所有重做,而是故意在某个点停止应用重做,生成一个不是最新的数据库版本
• 不完全恢复的4个步骤:
加载数据库
还原所有数据文件
恢复数据库至某个点
用重置日志打开数据库
39
数据库不完全恢复
Data files containingcommitted anduncommittedtransactions up to PIT
PIT-recovereddata files
Archivedlog Archived
log OnlineRedo logX
X
Changes applied to point in time (PIT)
Restored datafiles from as farback as necessary
Undo applied
6
5
31
24
Databaseopened
40
控制文件的还原
• 使用RMAN(不使用FRA)从自动备份中恢复控制文件, ,Oracle会在默认位置中(或者使用allocate
channel命令定义的位置)查找自动的控制文件备份集
restore controlfile from autobackup;
• 使用RMAN和FRA从自动备份中恢复控制文件
restore controlfile from autobackup;
• 恢复较早的控制文件备份
restore controlfile from autobackup until time "to_date('12/09/2005 13:00:00','MM/DD/YYYY
HH24:MI:SS’)”;
• 从备份集中恢复控制文件
restore controlfile from '/oracle/备份片名’;
• 使用恢复目录恢复控制文件
rman target xxx/xxx catalog xxx/xxx@xxx
restore controlfile from autobackup;
41
使用映像副本恢复
• 如果备份策略包含映像副本以及备份集,那么可以用映像副本恢复,由于映像副本与源数据库是完
全相同的,如果磁盘上存在,则可以立即使用它,所需要做的只是告诉数据库映像副本的位置,然
后恢复副本。
• 映像副本的恢复案例:
SET NEWNAME FOR DATAFILE 1 to '/u01/app/oracle/datafile01.dbf';
SWITCH DATAFILE ALL;
recover database;
42
块恢复
• 块恢复的使用场景是在文件还可用,但是损坏的范围只是一小部分块,文件还是保持联机状态,终端用户可能不知道存在问题,只有在尝试读取受损块时才会知晓。
• 受损块的检测 RMAN 在执行备份操作时检测受损块,如果没有特别提示,在命中
受损块时将立即终止备份操作
设置备份允许的受损块:set maxcorrupt for datafile 7 to 100;
• 块介质恢复 RMAN 将从备份集或映像副本中提取受损的块的备份并写入数据文
件,然后RMAN 将遍历自备份后生成的归档日志,提取与还原的块相关的重做记录并应用
使用 BLOCK RECOVER 命令恢复 Block recover datafile 7 block 5;
Changetracking file
Data files
Backup pieces
Recovery area
43
RMAN Catalog 目录
1
2 RMAN Catalog 存储脚本
创建RMAN Catalog 恢复目录3
RMAN Catalog 概述
44
RMAN Catalog 概述
• 作用:RMAN备份时产生的历史备份信息可以存储在恢复目录中。
• 恢复目录比控制文件的好处: 可以存储RMAN脚本 恢复目录提供存储RMAN信息的单一存储库,可以方便、灵活地将备份信息集中存储 恢复目录使得数据库报告更加灵活,除了可以提供当前目标数据库的报告外,还可以提供目标数据
库在其他时间的报告 可以永久保留某些默认的数据库RMAN信道配置信息 在多数据库环境中,存在优势,很少的数据库则意义不大
45
RMAN Catalog 存储脚本
• 恢复目录上的脚本管理命令 :
– Create [global] script
– Replace [global] script
– Print [global] script
– List [global] script names
– Execute [global] script
– Delete [global] script
46
创建 RMAN 恢复目录
• 创建恢复目录用户,并授予角色:connect、resource、recovery_catalog_owner
Create user xxx identified by oracle default tablespace catalog;
• 授予角色 Grant connect,resource,recovery_catalog_owner to xxx;
• 创建恢复目录 使用 RMAN 链接到恢复目录:rman catalog=xxx/oracle
执行Create catalog 命令:create catalog tablespace catalog;
• 使用恢复目录注册数据库 连上目标数据库和恢复目录库 rman tareget / catalog=xxx/oracle@recover;
使用恢复目录注册数据库:Register database;
47
RMAN Catalog 目录
1
2
基于recyclebin 的闪回技术
基于闪回数据库日志的闪回技术
3
基于FDA 数据的闪回数据归档技术
4
基于UNDO 的闪回技术
48
基于UNDO 数据的闪回技术:
• 基于UNDO 数据的闪回技术:
闪回查询:查询一张表在过去时间的数据状态
闪回表:把一张表闪回到过去的时间点
闪回版本查询:一段时间多个事务操作对应表中数据状态
闪回事务查询:查询事务对应的UNDO Sql;闪回数据归档
49
闪回查询技术
• 基于撤销段,根据撤销盘区在被重写之前,保留在撤销表空间中的时间来决定是否可以查询对象或将对象改回到过去的某个时间点。
• 在参数文件(pfile)或服务器参数文件(spfile)中设置UNDO_MANAGEMENT = AUTO。
• 设置UNDO_TABLESPACE参数指出哪个表空间将处理撤消任务。
• 将UNDO_RETNTION设置为以秒为单位的值为保留撤销段保留的时间长度。
• 执行闪回查询 Select * from table_1 as of timestamp to_timestamp(‘xxx’,’YYYY-MM-DD HH:MI:SS’);
Select * from table_1 as of scn 7777777;
50
闪回表技术
• Oracle可以按照一次一个事务的方式回绕数据库,从而将表恢复到过去的指定时间点。
• 限制:只能将表闪回到撤销段所允许的过去的时间点。
• 需要开启行迁移(row movement):最初是提供分区表的功能,如果更新操作更改了分区键值,使用行移动就可以将更新的行移动到适当的分区。
• 开启行移动 alter table table_name enable row movement;
• 执行时间点 flashback table table_name to timestamp to_timestamp('2009-06-29 13:30:00','YYYY-MM-DD HH24:MI:SS');
• SCN flashback table table_name to scn 751652;
51
闪回版本技术
• 闪回查询是查询某一个时间点的数据,闪回版本
查询使用VERSIONS子句查询某一段时间行的所
有版本
• 闪回版本查询的返回结果是行的改变历史,且只
返回已提交的行,包括删除和重新插入的行版本。
提供了一种审计表行的方式,并可以获取改变行
的事务信息。可以使用返回的事务标识符,通过
LogMiner执行日志挖掘,或者进行闪回事务查询
52
闪回事务技术
• 不使用撤销段,需要开启闪回日志。
• 使用重做以及利用日志挖掘功能挖掘出事
务的更改向量,然后确定回滚这些更改的
最佳方式
53
基于FDA 数据的闪回数据归档技术
• 闪回数据归档:因为UNDO 数据有一个保留期限,在超过保留时间后数据可能被覆盖,使用闪回归档实现闪
回查询和闪回表在时间上的延续
• 闪回数据归档步骤:
创建一个供闪回数据库使用的表空间
在表空间创建一个保留时间为7年的闪回数据归档
创建一个用户并授予DBA 的角色
授予用户操作的必要权限
登录创建一个表启用闪回数据归档
执行查询来确定归档创建的对象
54
基于Recyclebin的闪回删除技术
• 闪回删除:针对非 system 表空间,通过drop 操作和非
purge 的方式删除的对象,可以在recyclebin 使用闪回删除
操作还原删除的对象
• 当删除对象时,Oracle不只是重命名删除对象,所有相关的
对象也会移动到回收站中:索引、触发器以及约束。在撤销
时,也会撤销对所有相关对象的操作。
• 回收站(recycle bin)
通过数据字典视图快速查看:USER_RECYCLEBIN 和
DBA_RECYCLEBIN。
当删除表时,只是将表重新命名,当表空间不足时,才会删除
这些表,闪回这些表时遵循后进先出,从回收站(recycle bin)
中删除这些表时遵循:先进先出。
如果启用了自动扩展,回收站中的对象会在扩展空间前被清除。
55
基于recyclebin的闪回删除技术
• 回收站(recycle bin)的自动空间回收
通过数据字典视图快速查看:USER_RECYCLEBIN 和
DBA_RECYCLEBIN。
当删除表时,只是将表重新命名,当表空间不足时,才
会删除这些表,闪回这些表时遵循后进先出,从回收站
(recycle bin)中删除这些表时遵循:先进先出
如果启用了自动扩展,回收站中的对象会在扩展空间前
被清除
56
基于闪回数据库日志的闪回数据库技术
• 闪回数据库:把数据库闪回到过去的时间点,针对逻辑故障
57
闪回数据库
• 配置闪回数据库需要的步骤: 确保数据库处于归档日志模式:Select log_mode from v$database;
创建闪回恢复区 Alter system set db_recovery_file_dest=‘flash_recover_area’;
Alter system set db_recovery_dest_size=8g;
设置闪回保留目标时间:Alter system set db_flashback_rectention_target=240;
干净的关闭并加载数据库:Shutdown immediate; startup mount;
启用闪回日志记录:Alter database flashback on;
打开数据库:Alter database open;
欢迎关注:
甲骨文云技术公众号纯技术分享 无广告
扫码加入:
19c新特性讲座微信群
Thank you
Q & A