Oracle备份恢复工具RMAN初学
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