-------------------------------------------------------------------------------------------------------------
转自
http://www.ningoo.net/html/2007/oracle10g_rman_catalog_command.html
要说10g出来也好几年了,10g rman的这个新命令应该有不少人已经知道了。我以为10g rman比起9i的最大改进,就是这个命令的增强。不过最近发现还是很多人不知道,甚至把它跟catalog database混为一谈。
做为一个Oracle DBA,对于官方文档应该是要相当熟悉才行,至少手头上应该放一份你产品库版本一致的文档备份,也不用书到用时方恨少,遇上网络如龟速,自己就要变成热锅上的蚂蚁了。就算没有时间和精力通读所有文档,至少得清楚文档的结构,知道哪方面的问题去找哪几个文档,对吧。比如rman的命令语法不清楚了,就要去翻翻《Backup and Recovery Reference》,因为rman属于备份恢复工具,而名字里带reference的,基本上都是些命令语法的详细参考。
而对于一个新版本,浏览一遍每篇文章前面的新特性部分,也是快速掌握新版本的一个捷径,当然,这是建立在已经对老版本有一定认识的基础上的。很多人喜欢问学习oracle看哪些书最好,当然有很多经典的书籍可以帮助你理解oracle,但是要熟练应对工作中的需要,官方文档还是必不可少的。
在9i时代,如果在控制文件或者catalog数据库中的备份信息被覆盖或者清除,那么即使所有的备份文件都在,rman也无法简单的利用这些文件来做恢复了,必须得用些特别的方法才能办到,比如以前很多牛人写的使用dbms_backup_restore包从备份片中释放出数据文件,然后再使用手工方式做恢复。
但是实际上,oracle完全可以将恢复时需要的一些信息保存在备份文件的文件头中,如果控制文件或者catalog数据库中的信息丢失,再扫描一遍文件头,取出这些信息就可以了。10g中就是这么实现的,扫描这些文件头的工作就是由这个新的catalog命令来实现的。注意这是10g rman的一个命令,虽然和以前的catalog database的名字长得一样,可不是同一个东西。
catalog命令可以用来扫描备份片,文件拷贝(datafile or controlfile copy),也可以用来扫描归档日志,所以,只要你的备份还在,归档还在,即使catalog database崩溃,控制文件重建,照样可以用这些备份来做恢复。
扫描备份片
扫描归档日志
扫描数据文件拷贝,并且将其做为增量备份的level 0
扫描控制文件拷贝
扫描整个目录,如果备份片或者归档日志文件太多,可以放到一个目录中,一次性扫描就行
扫描闪回恢复区
有了catalog命令,完全可以抛弃catalog database了。只是注意将备份的log和备份文件一起保存下来,不然就不知道哪些文件属于哪个备份集,恢复的时候就要多浪费些时间啦。
-------------------------------------------------------------------------------------------------------------
以上截取于网络。
这个命令确实非常有用,有时候我们做异机RMAN恢复的时候可能用到他,比如我们RMAN拷贝到异机上的目录不一样的时候,就可以使用
RMAN> CATALOG BACKUPPIECE "/oradata/rman2/db_7_1_20100304";
然后我们可以看到CONTROLFILE中信息多了
RMAN> list backup of database;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
1 Full 515.16M DISK 00:01:49 15-DEC-09
BP Key: 1 Status: AVAILABLE Compressed: NO Tag: TAG20091215T141913
Piece Name: /home/oracle/product/db/dbs/01l0vkv2_1_1
List of Datafiles in backup set 1
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- --------- ----
1 Full 461862 15-DEC-09 /oradata/oragims/gbmispro/system01.dbf
2 Full 461862 15-DEC-09 /oradata/oragims/gbmispro/undotbs01.dbf
3 Full 461862 15-DEC-09 /oradata/oragims/gbmispro/sysaux01.dbf
4 Full 461862 15-DEC-09 /oradata/oragims/gbmispro/users01.dbf
BS Key Type LV Size
------- ---- -- ----------
5 Full 740.84M
List of Datafiles in backup set 5
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- --------- ----
1 Full 8342967 04-MAR-10 /oradata/oragims/gbmispro/system01.dbf
2 Full 8342967 04-MAR-10 /oradata/oragims/gbmispro/undotbs01.dbf
3 Full 8342967 04-MAR-10 /oradata/oragims/gbmispro/sysaux01.dbf
4 Full 8342967 04-MAR-10 /oradata/oragims/gbmispro/users01.dbf
Backup Set Copy #1 of backup set 5
Device Type Elapsed Time Completion Time Compressed Tag
----------- ------------ --------------- ---------- ---
DISK 00:04:46 04-MAR-10 YES TAG20100304T101058
List of Backup Pieces for backup set 5 Copy #1
BP Key Pc# Status Piece Name
------- --- ----------- ----------
5 1 AVAILABLE /oradata/rman/db_7_1_20100304
Backup Set Copy #2 of backup set 5
Device Type Elapsed Time Completion Time Compressed Tag
----------- ------------ --------------- ---------- ---
DISK 00:04:46 04-MAR-10 YES TAG20100304T101058
List of Backup Pieces for backup set 5 Copy #2
BP Key Pc# Status Piece Name
------- --- ----------- ----------
6 1 AVAILABLE /oradata/rman2/db_7_1_20100304
这个时候再来进行RESTORE DATABASE
RMAN> restore database;
Starting restore at 04-MAR-10
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=156 devtype=DISK
skipping datafile 1; already restored to file /oradata/oragims/gbmispro/system01.dbf
skipping datafile 3; already restored to file /oradata/oragims/gbmispro/sysaux01.dbf
channel ORA_DISK_1: starting datafile backupset restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00002 to /oradata/oragims/gbmispro/undotbs01.dbf
restoring datafile 00004 to /oradata/oragims/gbmispro/users01.dbf
channel ORA_DISK_1: reading from backup piece /oradata/rman/db_7_1_20100304
发现已经可以读取信息了