RMAN RMAN只能在Archive log模式下进行,因为备份模式只能是热备份。 --经测试,非归档模式在mount 层次下,noarchive也可以备份。但open状态是不可以备份活动数据文件的。 RMAN只会备份有用的数据块。 通过以下方式连接目标库: C:\Users\anker>rman RMAN> connect target sys/system@orcl 连接到目标数据库: ORCL (DBID=1325028359) 备份整个数据库 backup database; 备份完成的文件存放在 %db_recovery_file_dest%\ORA_SID\BACKUPSET\YYYY-MM-DD\*.bkp 备份的内容包括: 数据文件(不包括临时文件) 控制文件 参数文件(SPFILE) --不会备份重做日志文件,因为此三个文件在open时是活动的。所以备份在线重做日志文件没有意义。 在备份时打印的文字描述,分配的通道对应Oracle的一个session,也就是一个进程/线程在执行。 使用run命令,实现多个功能顺序执行。 run { allocate channel cl device type disk;--备份的内容放在磁盘上 allocate channel c2 device type disk;--第二个通道也放在磁盘 backup as compressed backupset database;--以压缩的方式备份 } 当多个通道同时备份数据文件时,各个数据文件的scn会不一致。 打印的日志如下: 可以看出,此次指定的通道算是私有通道,执行之前先把上次的公有通道释放掉。两个私有通道并行执行。通道的执行数量要与磁盘驱动器(磁盘写头)相等,若大于也没有用处。 备份完成之后,私有通道也会释放掉。 释放的通道: ORA_DISK_1 分配的通道: cl 通道 cl: sid=158 devtype=DISK 分配的通道: c2 通道 c2: sid=139 devtype=DISK 启动 backup 于 23-6月 -13 通道 cl: 启动压缩的全部数据文件备份集 通道 cl: 正在指定备份集中的数据文件 输入数据文件 fno=00003 name=F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF 输入数据文件 fno=00004 name=F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF 输入数据文件 fno=00002 name=F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF 通道 cl: 正在启动段 1 于 23-6月 -13 通道 c2: 启动压缩的全部数据文件备份集 通道 c2: 正在指定备份集中的数据文件 输入数据文件 fno=00001 name=F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF 输入数据文件 fno=00005 name=F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF 通道 c2: 正在启动段 1 于 23-6月 -13 通道 cl: 已完成段 1 于 23-6月 -13 释放的通道: cl 释放的通道: c2 --查看备份集 list backup; --以下是打印的结果,以下信息来自于控制文件 BS Key关键字指的Oracle本身产生的ID,标示备份集。 Type指的是全量备份(Full)还是增量备份。 LV指的增量备份的级别,全量(FUll)默认为空 Device Type指的备份机的存放位置 Elapsed Tie 指备份时花费的时间。 Completion TIme 指备份集完成的时间点。 BP Key指的备份片的关键字,一个备份集可以包含多个备份片 Status指的备份片状态 Compressed指是否备份了。 Tag: 用于标示被备份是否是一致性生产的。恢复的时候会用到tag Piece Name指备份文件的名称 Ckp SCN指最后checkpoint的 SCN号 Ckp TIme 最后的checkpoint SCN对应的时间 NAME 备份文件名称 BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ ------------------- 28 Full 104.72M DISK 00:00:42 2013/06/23 21:28:27 BP Key: 28 Status: AVAILABLE Compressed: YES Tag: TAG20130623T212745 Piece Name: F:\ORACLE\PRODUCT\10.2.0\DB_1\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_06_23\O1_MF_NNNDF_TAG20130623T212745_8WF List of Datafiles in backup set 28 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- ------------------- ---- 1 Full 12713208 2013/06/23 21:27:46 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF 5 Full 12713208 2013/06/23 21:27:46 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF --清掉已物理删除的备份集 crosscheck backupset; delete expired backupset; --清楚已物理删除的archivelog crosscheck archivelog all; delete expired archivelog all; --修改rman中,日期显示格式 export NLS_DATE_FORMAT='yyyymmdd hh24:mi:ss'; set nls_date_format=yyyy/mm/dd hh24:mi:ss--Windows环境设置(此处注意不能有引号) --设置英文模式格式,修改的是环境变量,注册表中也包含此信息 set nls_lang=american_ --备份恢复的过程 --查看备份的文件 list backup of database;--备份的数据文件 list backup of controlfile;--备份的数据文件 list backup of datafile;--备份的数据文件 RMAN> restore preview database;--预览oracle指定的恢复文件,默认是使用最近的备份文件。只是针对数据文件 RMAN> restore database;--恢复文件,注意若备份时包括多个数据文件,会全部重新覆盖掉。不会恢复控制文件及spfile等。 RMAN> recover database; --利用归档日志恢复数据,即可以打开数据库,需要注意的地方。rman恢复会优先使用重做归档日志。 RMAN> restore database from tag xxxxxxx;--指定恢复用的备份集文件 在rman中执行sql,但不返回结果。 sql'select * from table T'; --备份表空间 backup tablespace users,DW --备份数据文件 backup datafile 4,3 --备份控制文件,current指的controlfile的状态。 backup current controlfile; --备份spfile backup spfile; --备份归档日志 backup archivelog all;--备份所有归档日志。每次备份时,会先切换并归档下当前日志。 backup archivelog all not backed up;--备份尚未备份的日志文件。会跳过已备份的文件。 backup archivelog all delete all;--备份后,删除重做归档日志。 --rman 不能备份临时文件,不能备份在线重做日志文件。 --删除所有的备份文件 delete backup delete noprompt backup;--无提示确认直接删除所有的文件 删除备份集 delete backupset 19;--BS KEY show all;--显示所有的参数 CONFIGURE RETENTION POLICY TO REDUNDANCY 1;--配置保留备份的策略:1 report obsolete;--输出所有的废弃的备份集 delete obsolete;--删除所有的已废弃的备份集 --自动备份数据库,并删除已废弃的备份集,且会自动删除无用的归档日志 --备份之后,所有的之前的备份集都变无效了。 --切换日志,然后将日志备份 run { backup database; delete noprompt obsolete; backup archivelog all; } configure retention policy to recovery window of 7 days; --保留备份策略为7天 --我理解的保存7天指的对于当前时间,可以通过备份集最早可以还原到7天之前的数据。 CONFIGURE RETENTION POLICY REDUNDANCY 3; --意味着当备份完第三次后,当备份第四次时,第一次的备份结果会被标示为废弃。 CONFIGURE RETENTION POLICY CLEAR --可以使用命令恢复策略为默认值。 CONFIGURE RETENTION POLICY TO NONE --此时REPORT OBSOLETE和DELETE OBSOLETE将不把任何备份文件视为废弃 CONFIGURE BACKUP OPTIMIZATION ON --默认值会为#缺省 --备份时,已备份的东西不会再进行备份 list backup of archivelog sequence 344 --查看备份的archivelog,指定序号 CONFIGURE DEFAULT DEVICE TYPE TO DISK; --Oracle 备份到磁盘 CONFIGURE CONTROLFILE AUTOBACKUP OFF; --默认只要备份涉及system表空间,就会自动备份控制文件和spfile。当设置为on时,不管备份什么,都会备份控制文件和spfile。 备份的控制文件和spfile文件会存放在另外一个为AUTOBACKUP的目录里面。 CONFIGURE CONTROLFILE AUTOBACKUP CLEAR; --去除配置,还原默认值。 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F' --设置控制文件的备份的格式,当指定备份的目录时,此参数才会起作用。比如 BACKUP DATABASE FORMAT 'D:\DB_BACKUP\%d_%T_%U.bak' %d=数据库的名称 %T=日期时间 %U=生成唯一的数字 alter system set db_recovery_file_dest=''; --当设置为空时,备份时会默认存放在此目录(windows)。F:\oracle\product\10.2.0\db_1\database CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; --默认是启动一个通道去备份 CONFIGURE DEVICE TYPE DISK PARALLELISM 2; --修改为2个。那么有两个通道去备份,实际上也是两个线程同时备份。 CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO 有三个参数 COPY 拷贝文件。--选择此类型后,备份的文件会存放在F:\oracle\product\10.2.0\db_1\flash_recovery_area\ORCL\DATAFILE(Windows)下面。 BACKUPSET 普通的文件 COMPRESSED BACKUPSET 压缩文件 COPY的话,相当于生成一个文件备份。下面的copy语句命令: COPY datafile 4 to 'c:\temp\user01.dbf'; CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default 备份时,生成的备份个数。当设置为2时,进行备份的时候,会遇到下面的错误:ORA-19806: 在恢复区内不能进行双重备份 恢复区指的db_recovery_file_dest的目录。 当指定其他目录时,不会出现这个错误: backup datafile 4 format 'C:\temp\data_file4_%U_%T.BAK'; CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; 针对归档日志的备份份数。 CONFIGURE MAXSETSIZE TO UNLIMITED; 设置备份集的最大大小。 一个数据文件只能存放在一个备份文件,所以此大小要至少比最大的数据文件要大,否则无法备份。 当设置此值时,备份的时候会生成多个文件。 REPORT SCHEMA 显示所有的数据文件和临时文件 CONFIGURE ENCRYPTION FOR DATABASE OFF; # default CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default 设置备份的加密 CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'F:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\SNCFORCL.ORA'; 控制文件的快照文件 备份时,还是要找个控制文件的静止时间,但控制文件需要一直读写中。 当备份控制文件时,实际上备份的是备份的控制文件的快照,当备份完之后,再把控制文件与此快照进行下同步。 此命令是设置快照控制文件的位置。 ---------------------------------------------------------------------------------- Nocatalog方式 就是用control file作为catalog,每一次备份都要往控制文件里面写好多备份信息, 控制文件里面会有越来越多的备份信息。因此,当使用rman nocatalog方式备份时,备份controlfile是非常重要的。 由于nocatalog时利用controlfile存放备份信息,建议将Oracle参数文件中的CONTROL_FILE_RECORD_KEEP_TIME值加大 (缺省为7天), 参数在$ORACLE_HOME/dbs/initSID.ora中,该参数control_file__record_keep_time设置备份信息保存时间,到规定时间就自动清除以前的备份信息。 RMAN的备份的信息是保存在本机的控制文件中。那么当控制文件出现问题后,也就无法使用rman的备份集进行恢复。 那么oracle建议把同时要把备份信息放在其他服务器一份。那么当控制文件出现问题,可以从其他服务器进行恢复。 备份的数据库成为target DB,另外一个数据库称为catalog DB。 在catalog DB中创建用户 create user rman identified by rman; grant connect,resourc,recovery_catalog_owner to rman; 在target DB上执行,或者catalog db,或者其他DB rman target sys/system@orcl catalog rman/rman@catalog create catalog;--在catalog db中创建很多对象(表等等),会把target中的控制信息复制到这些对象中。 register database;--将target db中的控制信息放入catalog db --从catalog db中 db表中可以查询到target db的记录 select * from rman.db; resync catalog;--重新同步备份信息 show parameter control; list backup;--若连接上catalog,则信息直接从catalog中读取,而不是target db的控制文件。 --删除控制文件,重建控制文件 alter database backup controlfile to trace; --会在udump文件夹中创建控制文件的脚本 shutdown immediate startup nomount --重启到nomount状态,把需要的内容进行创建 catalog; (备份文件还在)会把在控制文件中丢失的备份信息,读到catalog中 catalog backuppiece 'datafile position' 指定要恢复的备份片,在nocatalog模式下,也可以恢复。 ----------------------------------------------------------------------------------- rman acb;--输入错误显示rman的命令 rman cmd.file 执行cmd命令文件 一个简单的cmd文件例子 dbbak.sql run { backup as compressed backupset backup; delete noprompt obsolete; backup archivelog all; } 创建bat文件,注意文件命名不写成rman.bat。因为有可能会造成死循环。 rman target sys/system@orcl cmdfile = 'c:\dbbak.sql' log = 'c:\backup.log' append checksyntax log指定日志文件的位置 append指定日志是追加的方式 checksyntax指检查语法,但并不执行备份。只是确保下语法的正确性。真正备份的命令文件,需要去掉checksyntax。 在Oracle RMAN创建执行备份的脚本,此功能只能在catalog模式下才能执行。 create script scr1 { backup as compressed backupset database; delete noprompt obsolete; backup archivelog all; } list script names; 打印目录中存储的脚本列表 print script scr1; 打印脚本内容 run { execute script scr1; } 执行脚本scr1 print script scr1 to file 'c:\a.txt'; 把脚本scr1的内容写到c盘a.txt文件中。 replace script scr1 from file 'c:\a.txt'; 将c盘的a.txt文件中的内容替换掉scr1脚本 创建全局脚本 create global script gsrc1 { backup as compressed backupset database; delete noprompt obsolete; backup archivelog all; } 全局脚本指当连接到catalog库的target数据库,都能访问到的script 查看全局脚本 list global script names; run { execute global script gscr1; } delete global script gscr1; 删除全局脚本 ------------------------------------------------------------------------------------ rman的增量备份 增量备份分两种: Differential versus Cumulative Level 0:完全备份 backup incremental level=0 database; Level 1:增量备份 differential A differential incremental backup contains all blocks changed since the last incremental backup. backup incremental level=1 database; Level 1c:累积备份 cumulative A cumulative incremental backup contains all blocks changed since the last level 0 incremental backup. backup incremental level=1 Cumulative database; alter system archive log current;--只能用在归档模式,用于手动归档。 alter system switch logfile;--切换日志,在归档模式下,就会立马进行归档。 查看增量备份的日志打印,Incr为增量备份,0指的为0级备份.Cumulative与differential从日志打印是看不出的。 BS 关键字 类型 LV 大小 设备类型 经过时间 完成时间 ------- ---- -- ---------- ----------- ------------ ---------- 77 Incr 0 486.47M DISK 00:01:05 09-7月 -13 BP 关键字: 79 状态: AVAILABLE 已压缩: NO 标记: TAG20130709T215634 段名:F:\ORACLE\PRODUCT\10.2.0\DB_1\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2013_07_09\O1_MF_NNND0_TAG20130709T215634_8XR5NM4F_.BKP 备份集 77 中的数据文件列表 文件 LV 类型 Ckp SCN Ckp 时间 名称 ---- -- ---- ---------- ---------- ---- 1 0 Incr 13351366 09-7月 -13 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF 5 0 Incr 13351366 09-7月 -13 F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF 实验,周一插入,增量备份 sys.tt 5 实验,周二插入 sys.tt 6 周三 累积备份 7 周四 增量备份 8 list backup of database summary; --只列出备份的统计信息 restore 貌似只针对0级备份或全备份的文件,进行恢复数据库。 而recover针对当前数据库,使用增量文件或者日志文件进行恢复。 相比rman,其他的备份缺点 1.需要shutdown或者offline 2.热备份,生成的日志特别多。 3.需要OS copy rman解决了上面的问题,它使用专用的内部进程去备份。 另外一个RMAN的优势,解决数据块的损坏: data block corrupted 使用以下命令检查数据文件是否存在损坏的块: dbv file=data file position 打印如下: 标记为损坏的总页数: 0--标示数据块损坏的个数 打印内容包括损坏的块 rman中检查坏的数据块: backup validate database; 检查后的损坏的块存放在下面的视图中:v$database_block_corruption 使用rman恢复损坏的块: blockrecover datafile 4 block 730;--此命令在9i之后才支持 当修复后,v$database_block_corruption视图中的数据不会更新,只有重新执行下面的命令 backup validate database; 当存在corrupt的块时,rman备份此数据文件不会成功,会提示错误。oracle默认0坏块的情况下才能 备份。 通过以下的命令设置允许存在1个坏块的情况下,进行备份。 run { set maxcorrupt for datafile 4 to 1; backup datafile 4; }