共计 5560 个字符,预计需要花费 14 分钟才能阅读完成。
RMAN 是 Oracle 推荐的备份和恢复工具(Recovery Manager)
RMAN 能够即开即用
关于备份:
在备份之前需要明确几个目标:
1. 冷备份还是热备份
2. 全部备份还是局部备份
3. 全备还是增备?
1. 热备只能在 DB 处于归档模式下才能够进行, 假如数据库处在非归档的状态下, 那么只能够进行关闭状态下的备份, 并且 DB 必须在 mount 模式, 然后执行干净关闭 (RMAN 需要读取控制文件(会创建个快照, 防止更改), 以便查找数据)
2. 全部备份指的是备份所有数据文件和控制文件, 局部备份只备份其子集
3. 完整备份备份所有使用的块, 增备只备份上次备份之后更改的块
增量备份可以是累计增量备份 (自从上一次全备以来更改的所有块) 或者是差异增量备份(自从上一次增量备份以来更改的所有块),
上面的备份方式还是需要看实际情况任意组合
RMAN 能备份的文件类型:
数据文件
控制文件
归档重做日志文件
spfile 就是服务器参数文件, 不能手工修改, 需要 alter … scope=spfile 进行修改(9i 之后采用这种方式进行存储参数文件)
注意 RMAN 不能备份的文件包括:
临时文件 (本来就不是长久的)
redo()
口令文件 (直接把口令文件备份一次就行了, 不用每次都备)
静态 PFILE, 是文本文件, 是初始化参数文件(oracle 9i 之前的)
Oracle NET 配置文件
为什么不能备份 redo:
在 plus archivelog 模式下, 当使用 rman 进行备份时, 会执行 ALTER SYSTEM ARCHIVELOG CURRENT 的命令, 对 online redo 进行切换,并备份 archivelog , 等同于备份了执行 RMAN 时刻的 online redo,
假如不在 archivelog 模式下, 那么数据库是关闭的, 此时数据库处于一致状态(别忘了假如是 shutdown abort 的话是不建议进行备份的哦), 当进行关闭的时候, 数据库进行所有未完成事务的回滚, 并且数据库强制进行检查点进程, 将内存中的所有脏块进行 DBWn 进磁盘中的数据文件, 此时也是不需要 redo 文件了
当需要备份 archivelog 的情况下, 需要加上 plus archivelog 参数, 流程为:
1. 运行一个 ALTER SYSTEM ARCHIVELOG CURRENT 命令
2. 运行 BACKUP ARCHIVELOG ALL 命令。注意如果备份优化被启用,RMAN 只会备份未备份过的日志
3. 备份 BACKUP 命令中定义的文件
4. 运行 ALTER SYSTEM ARCHIVELOG CURRENT 命令
5. 备份所有的剩下的归档日志
## 注意: 在通常写脚本的时候经常会在脚本中手动加上 ALTER SYSTEM ARCHIVELOG CURRENT 这个命令, 为了确保一致性
RMAN 能够生成三类备份:
1. 备份集: 是专用格式, 能够包含多个文件, 但是不包括当前不是备份段一部分的数据文件的块, 注意是由被称为备份片的一个或者多个物理文件组成的, 能够进行压缩或者增量备份等, 但是必须由 RMAN 来恢复
2. 压缩备份集: 和备份集内容相同, 只是在写出到备份集中时将会使用压缩算法(耗 CPU, 节省 IO)
3. 映像副本, 是和输入文件相同的备份文件, 映像副本能够和源内容立即交换, 而在从备份集中提取文件时, 需要执行 RMAN 还原操作, 这个就和 OS 中的 cp 一样, 这种不能进行增量备份, 一定是全部备份和完整备份, 需要的磁盘空间和原数据文件是一样的, 但是恢复的时候最快, 直接把文件放到地方或者创建硬链接就行了, 无需任何额外处理
备份集可以是完整或者增量的, 但是映像副本只能是完整的
RMAN 由被称为通道(channel) 的服务器进程执行
RMAN 存储库是有关备份的元数据: 构成备份集的片的名称和位置, 包含在其中的文件以及映像副本的名称和位置, 存储库是自动化还原和操作的关键:RMAN 通过读取它来计算出还原和恢复损坏的数据文件的最有效方式, 存储库存储在目标数据库的控制文件中, 也能存储在目录数据库中创建的一组表中, 使用目录能够大大增强 RMAN 的能力
RMAN 能够并发对多个数据库创建多个会话,RMAN 在 oracle 的主目录中, 能够像其他任何用户进程那样登录到数据库, 然后启动其他服务器进程来复制文件
使用 RMAN 执行打开状态的增量备份
在 Oracle 中, 增量备份是分等级的, 级别从 0 开始一级一级递增, 但是使用最多的也就是 0 和 1,0 级别是后面所有增量备份的基础, 实际上就是一个完全备份, 但是和普通的备份唯一的不同点就是 0 级别备份能够作为其他级别的增量备份的基础, 而普通的完全备份是不可能的
从级别 1 开始,Oracle 的增量备份分为差异增量备份和积累增量备份两种,
差异增量备份是自上一次同级别的差异备份或者是上一次更更高级别的备份完成之后的数据库发生改变的数据块
积累增量备份时备份的自从上一次上一级增量备份完成以来数据库发生改变的数据块
RMAN 备份全为全备和增量备份
增量备份: 分为 0 1 2 级
1. 在 differential(差异)模式下(缺省)
0= 全备
1= 差异增量 上次全备或 LV1 至今的增量(无论是否有,有 N 次 LV2 的备份,一律从上次 lv1 或 0 至今的变化)0/1 ~ NOW
2= 累积增量 上次任意级别备份至今的增量(任意一次备份至今)0/1/2 ~ NOW
2. 在 cumulative(累积的)模式下,
0= 全备
1= 上次全备至今的增量(无论是否有,有 N 次 LV1 的备份,一律从全备至今的变化)0 ~ NOW
2= 上次 0 或 1 级别备份至今的增量(2 次 LV2 间的累积,也汇总备份至今)0/1~ NOW(differential 下的 LV1)
具体实例:
1. 使用 sysdba 连接到 oracle
2. archive log list 查看数据库是否处于归档模式
1. 假如 No Archive Mode 则修改为归档模式
shutdown immediate
startup mount
alter database archivelog;
alter database open;
3. 连接到 target(目标)数据库
rman target /
或者 RMAN> connect target sys/oracle@orcl 指定 service name
4. 查看全库有没有备份的东西
list backupset;
或者 list backup of database;
5. 常用的备份命令:
1. 备份全库及控制文件, 服务器参数文件和所有 archivelog, 并删除旧的归档日志:
backup database plus archivelog delete input;
2. 备份指定表空间及归档的重做日志,并删除旧的归档日志,delete input 表示删除旧日志
backup tablespace system plus archivelog delete input;
3. 备份归档日志
backup archivelog all delete input;
1. 对整个数据库进行全备:
backup database;
2. 查看备份的具体信息
list backupset;
3. 查看 RMAN 中的缺省参数:
show all;
4. 我们能够将备份出来的文件拷出来, 然后删除备份目录下面的文件, 等需要回复的时候, 只要将文件重新考回到原来的备份目录就可以
5. 查看 control file 文件中的备份信息, 默认就是在数据目录下的 control_.ctl, 使用 strings control_.ctl 就能将二进制文件转换为可读格式
创建备份文件
明确好备份级别的关系:
1. 创建 0 级增量备份(基础)
backup incremental level=0 database;
2. 创建 level= 1 备份;
backup incremental level=1 database;
需要注意备份的是 datafile,spfile 和 controlfile, 假如需要备份 archivelog 那么需要加上 plus archivelog 参数,
1. 备份表空间:
backup tablespace tablespacename
假如我们不知道 tp 的名字, 那么可以:
report schema;
2. 备份控制文件:
1. backup current controlfile
2. backup database include current controlfile
3. 备份镜像:
1. report schema;
2. 选择序号, 假设序号为 5, 那么:
copy datafile 5 to ‘/rmanbackup/users01bak.dbf’;
—————————————————
配置 RMAN 默认值:
1. 查看默认值 show:
show all; —- 显示所有默认值
使用 configure 来调整这些默认值:
1. RMAN 在备份到磁盘时总是启用 4 通道:
configure device type disk parallelism 4;
2. 启用优化功能, 允许 RMAN 假如认为有足够的文件副本, 就不备份特定文件, 优化与保留策略有关, 默认为 1, 表示 RMAN 将试图至少保留 1 个副本, 现在调成 3 个, 表示 RMAN 将试图保留 3 个副本
1. configure backup optimization on;
2. configure retention policy to redundancy 3;
3. 两种保留策略(互斥):
1. 基于冗余的保留策略:
定义的是每个文件至少要保留几份备份
2. 基于恢复窗口的保留策略:
configure retention policy to recovery window of N days;
定义的是保留的备份文件必须要能保证恢复到近 N 天的任意时间点
需要注意的是先清除另外一种保留策略才能添加新的
4. 一些操作:
1. 查看保持策略
show retention policy;
2. 查看过期备份
report obsolete;
3. 删除所有过期备份
delete obsolete;
4. 临时指定冗余度 2, 删除过期备份
delete obsolete redundancy 2;
临时指定 7 天, 删除过期备份
delete obsolete recovery window of 7 days;
5. 清除 (禁用) 保留策略
configure retention policy to none;
6. 将配置的文件恢复为默认值:
例如:
1. configure device type disk clear
5. 块跟踪日志
SQL>SELECT * FROM V$BLOCK_CHANGE_TRACKING;
查看块跟踪日志的开启
如果没有开启,则需要开启
SQL>ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;
SQL>ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING ‘/home/oracle/bct.log’;
Block change tracking 记录自从上一次备份以来数据块的变化,并把这些信息记录在跟踪文件中。RMAN 使用这个文件判断增量备份中需要备份的变更数据。这极大的促进了备份性能,RMAN 可以不再扫描整个文件以查找变更数据。为此 Oracle 引入了一个新的后台进程,CTWR,其全称为 Change Tracking Writer,用于记录变化的块并将变化写��相应的日志文件中。
通过位图跟踪两次备份间变化的数据块;
每次备份前进行位图切换;
管理和监视 RMAN 备份:
1. list
list backup 列出所有备份集
list copy 列出映像副本
list backip of database 列出所有全部数据库备份集, 不管是完整和增量
list backup of datafile 1 列出包括数据文件 1 的备份集
list backup of tablespace users 列出所有包括 user 表空间的备份集
list backup of archivelog all 列出所有归档日志备份集备份
list copy of archivelog from time=’sysdate-7′; 列出在过去 7 天生成的归档日志的所有副本
list backup of archivelog from sequence 1000 until sequence 1050 列出包含日志序列号为 1000-1050 的归档日志的所有备份集
2. report 通过询问目标数据库来确定哪些需要备份, 这个要求将已经生成的数据库和归档日志的物理结构与存储库中已经记录的备份集和副本相比较, 并且应当保留策略, 保留策略可被配置为默认的, 或者指定为 report 命令的一部分
1. report schema 列出构成数据库的数据文件:
2. report need backup 应用配置的保留策略, 列出至少需要一个备份来满足策略的所有数据文件和归档日志文件
3. report need backup days 3; 列出 3 天未备份的所有对象
4. report need backup redundancy 列出没有三个备份的所有文件
3. delete
1. delete backupset 4 表示删除编号为 4 的备份
2. delete copy of datafile 6 tag file6_extra
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/136121.htm