4.6 RMAN 的管理与维护
如果数据库做了 alter database open resetlogs; 就需 reset database,如果有库结构变化,就需 要 resync catalog
4.6.1 加入目录数据库
如果存在以前创建的备份数据想注册到目标数据库,可以采用如下手工方式加入到
恢复目录中,
RMAN> CATALOGdatafilecopy '/oracle/ .... /system01.dbf';
RMAN> CATALOG controlfilecopy '/oracle/CONTROL01.CTL.BCK'; RMAN> CATALOG archivelog '/oracle/arc001.log';
10g新特性:
1.可以手工加入手工加入备份片,所以,只要你的备份还在,归档还在,即使 catalog database 崩溃,控制文件重建,照样可以用这些备份来做恢复。
RMAN> CATALOG backupiece '/oracle/xxxx';
2.扫描整个目录,如果备份片或者归档日志文件太多,可以放到一个目录中,一次
性扫描就行。
RMAN> CATALOG START WITH '/xxx/arch_logs';
4.6.2 恢复目录的建立、升级与删除
恢复目录的建立请见:4.2.1 建立 Recovery Catalog 恢复目录 当恢复目录管理的某个数据库进行了升级,只要版本不高于恢复目录就没有问题,
下面的命令查询恢复目录的版本 (RMAN用户):
SQL> select version from rcver;
如果要高于恢复目录,那么恢复目录就必须进行升级。用下面的命令即可:
RMAN> upgrade catalog;
恢复目录可以采用如下命令删除
RMAN> DROP CATALOG;
4.6.3 同步或重置 CROSSCHECK命令(交叉校验)
如果目标数据库物理对象发生了变化,如添加了一个数据文件,需要用如下命令同
步:
RMAN> resync catalog;
如果目标数据库 reset 了数据库,需要用如下命令同步
RMAN> resetdatabase;
(必须使用 catalog数据库)
打开数据库的时候,每次使用 resetlogs 参数都会创建数据库的一个新对应物。如 果这个操作是在 rman 中完成的,rman 会自动更新恢复目录。如果是在 rman 之外完 成,如 sql*plus,那么就必须手工重置对应物。如:
RMAN> reset database;
另外有的时候,我们需要改成之前的某个对应物,可以用 list incarnation 来显示出
对应物列表之后用下面的命令:
RMAN> reset database to incarnation incarnation_num;
当手工删除了数据库的归档文件后,要执行以下脚本同步 RMAN> allocate channel for maintenance type disk; RMAN> change archivelog all crosscheck;
RMAN> release channel;
当手工删除了数据库的 RMAN备份后,要执行以下脚本来同步
RMAN> allocate channel for maintenance type disk; RMAN> crosscheck backup;
RMAN> delete expire backup; RMAN> release channel;
关于CROSSCHECK 交叉校验命令
该命令用于核对磁盘和磁带上的备份文件,以确保 RMAN资料库与备份文件保持 同步。该命令只会检查 RMAN资料库所记载的备份文件。当执行 CROSSCHECK命令 时,如果资料库记录不匹配于备份文件的物理状态,那么该命令会更新资料库记录的状
态 信息。 当 使用 CROSSCHECK 命令 核 对备份文 件 之 后,备 份文 件 的 状态 会 包括 AVALIABLE、UNAVALIABLE和 EXPIRED 三种, 如果备份文件处于 EXPIRED 状态, 则说明物理文件已经被手工删除或者损坏。注意,如果备份文件处于 EXPIRED 状态, 应该使用 DELETE命令删除该备份文件。
核对所有备份集
RMAN>CROSSCHECK BACKUP;
核对所有数据文件的备份集
RMAN> CROSSCHECK BACKUP OF DATABASE;
核对特定表空间的备份集
RMAN>CROSSCHECK BACKUP OF TABLESPACE SYSTEM;
核对特定数据文件的备份集
RMAN>CROSSCHECK BACKUP OF DATAFILE 4;
核对控制文件的备份集
RMAN>CROSSCHECK BACKUP OF CONTROLFILE;
核对SPFILE 的备份集
RMAN> CROSSCHECK BACKUP OF SPFILE;
核对归档日志的备份集
RMAN> CROSSCHECK BACKUP OF ARCHIVELOG SEQUENCE 3;
核对所有映像副本
RMAN> CROSSCHECK COPY;
核对所有数据文件的映像副本
RMAN> CROSSCHECK COPY OF DATABASE;
核对特定表空间的映像副本
RMAN> CROSSCHECK COPY OF TABLESPACE USERS;
核对特定数据文件的映像副本
RMAN> CROSSCHECK COPY OF DATAFILE 4;
核对控制文件的映像副本
RMAN> CROSSCHECK COPY OF CONTROLFILE;
核对归档日志的映像副本
RMAN> CROSSCHECK COPY OF ARCHIVELOG SEQUENCE 4;
4.6.4 修改备份的可用状态、保存策略 Change命令
Change 命令可以修改备份的状态是可用(available)还是不可用(unavailable)。对 于不可用的备份,还原与恢复期间不会被考虑到,不过执行 delete expired 命令期间也不 会删除这些记录。
例如:
RMAN> change backup of database tag='GOLD' unavailable; RMAN> change copy of database like '%GOLD%' available; RMAN> change archivelog 'd:\arc\arch_001.arc' unavailable; RMAN> change backupset 4981 available;
RMAN> change backup of database available;
RMAN> change archivelog all available;
RMAN> change archivelog all backed up 5 times unavailable;
当一个给定的备份或者副本根据备份的保存策略的标准而被废弃的时候,RMAN 并不会自动删除这个备份或者副本,而只是标记这个备份为废弃。我们可以用 report obsolete 命令来查看标记为废弃的备份。可以使用 change 命令来将一个备份修改为永 久保留的备份,也可以修改为要保存多少天的备份。还可以使用 change … nokeep 来手 工丢弃一个备份。
举例:
将 4421备份集标记为废弃
RMAN> change backupset 4421 nokeep;
将 4421备份集标记为 7 天内有效
RMAN> change backupset 4421 keep until time 'sysdate+7' logs;
将 4421备份集标记为永久有效
RMAN> change backupset 4421 keep forever logs;
废弃的备份集并不真正的删除,如果需要物理删除,则可以用下面的命令:
RMAN> delete obsolete;
4.6.5 查看与删除过时的备份信息
列出已经过时的备份:
RMAN> report obsolete;
定义 delete 通道:
RMAN> allocate channel for delete/maintenance t ype disk;
删除过时的备份信息
RMAN> allocate channel for maintenance type disk; RMAN> change backupset id delete;
RMAN> release channel;
当手工删除了数据库的 RMAN备份文件后,要执行以下脚本进行同步:
RMAN> allocate channel for maintenance type disk; RMAN> crosscheck backup;
RMAN> delete expired backup; -- 删除过期的备份
RMAN> delete obsolete; -- 删除废弃的备份
RMAN> release channel;
在 8i 和 8i 之前的版本只能用 change…delete命令来删除物理备份。
RMAN> change archivelog until logseq=500 delete;
4.6.6 恢复目录记录的删除
如果不加以维护,具有 DELETE 状态的旧备份会一直驻留在恢复目录中。为了解决 这个问题,Oracle 提供了?/rdbms/admin/prgrmanc.sql,这个脚本可以删除恢复目录中具有 DELETE 状态的记录。如果想删除旧的对应物,那么我们可以删除 dbinc 表的记录。例 如,如果要删除对应物是 2 的记录,则可以执行下面的语句:
SQL> delete from dbinc where dbinc_key=2;
4.6.7 备份RMAN数据库
RMAN 自己的数据库也需要备份,但是本身很小,而且不是经常发生变化,所以在
每次 RMAN备份完成后,可以对 RMAN数据库备份。
$ EXP RMAN/RMAN OWNER=RMAN FILE=RMAN.DMP ROWS=Y GRANTS=Y COMPRESS=Y CONSISTENT=Y
4.6.8 备份检查 验证备份的可恢复性
我们可以通过 Validate 命令来检查是否能备份,如数据文件是否存在,是否存在坏 块不能被备份,通过使用 RESTORE DATABASE VALIDATE; 和 RESTORE DATABASE VALIDATE CHECK LOGICAL; 可以检查最新的备份是否可恢复。这些命令并不真正的执 行恢复,而是检查备份中是否有讹误。如果使用 CHECK LOGICAL 选项,还将检查数 据和索引段中是否存在逻辑讹误。
RMAN> RESTORE DATABASE VALIDATE;
RMAN> RESTORE DATABASE VALIDATE CHECK LOGICAL ; RMAN> VALIDATE BACKUPSET 218;
RMAN> VALIDATE BACKUPSET bs CHECK LOGICAL ; RMAN> BACKUP VALIDATE DATABASE ARCHIVELOG ALL; 对于数据库与数据文件,可以从指定的 tag 恢复:
RMAN> RESTORE DATAFILE 1 FROM TAG=’tag name’ ;
4.6.9 登记目标数据库:
一个恢复目录可以注册多个目标数据库,注册目标数据库的命令为:
$ RMAN catalog rman/rman target user/pwd @db; RMAN> register database
4.6.10 注销数据库
注销数据库不是简单的在 RMAN提示下反注册就可以了,需要运行一个程序包,过程
如下:
1. 连接目标数据库,获得目标数据库 ID
$ RMAN target internal/password catalog rman/rman@rcdb;
2. 以 RMAN用户登录,查询恢复目录,得到更详细的信息
SQL> SELECT db_key, db_id FROM db WHERE db_id = 1231209694; DB_KEY DB_ID
---------- ---------------
1 1237603294
1 row selected.
3. 运行过程 dbms_rcvcat.unregisterdatabase 注销数据库,如
SQL> EXECUTE dbms_rcvcat.unregisterdatabase(1 , 1237603294)
4.6.11 重新启动备份
对于异常结束了的备份,很多人可能不想再重新开始备份了吧,特别是备份到 90% 以上,因为异常原因终止了该备份,那怎么办呢?RMAN提供一个重新开始备份的方法, 通过简单的命令,你就可以只备份那不到 1%的数据了。
RMAN> backup not backed up since time 'sysdate-14' database plus archivelog;
4.6.12 脚本及自动运行
脚本的自动/定时运行可以通过 Windows 计划任务,UNIX/Linux的 Crontab/at命令,
或者第三方软件实现,详细介绍有待补充。
(未完成)
1、 编写 rman批处理文件
2、 编写 Shell脚本
set ORACLE_SID =xxxx 或 export $ORACLE_SID
rman target / msglog /xxx.log cmdfile=/xxx/backup.rman
3、 设定执行计划