“备份过程中产生的元数据,放在RMAN信息库(RMAN repository)RMAN信息库可以放在两个地方:目标数据库的控制文件里,或者恢复目录(Recovery Catalog)里。”
“RMAN Repository (RMAN 恢复目录数据库)是存放recovery catalog(恢复目录)的数据库。建议为恢复目录数据库创建一个单独的数据库。”
缺省情况下,rman 备份的信息,最开始是记录在控制文件中。但控制文件中空间有限,不可能无限期地保留,同时,万一存储损坏,控制文件也丢失了,则无法从备份进行数据库的恢复。这也是为什么 oracle 10g 开始有控制文件的自动备份功能的原因。
如果是公司里有许多 oracle 数据库时,则建议专门用一个数据库来做 catalog 库,即,rman 备份时,或是备份后,在连接了 catalog 库时,会把控制文件中记录的备份信息,同步到 catalog 库中。catalog 库中是通过一个数据库用户及其相关的表来存放 备份信息,因而,其保存期限理论上是无限的,不论保存多少年的备份信息都可以。这样,只要备份出的介质还在,你都可以使用该备份介质进行数据库的恢复。
如果把 catalog 放在正被备份的库中,在在线备份时,其是可以写入 catalog 中的,但是,这种方式是绝不建议的,因为,这种情况下,一旦生产库出问题,则 catalog 也丢了,怎么恢复?
所以,catalog 要为单独的库。实在不行,可以考虑两个库,互为对方的 catalog。如,A 库的备份信息,除了记录于 A 库自身的控制文件中外,还记录于B 库的 某个用户下(catalog owner),B 库的备份信息,除了记录于 B 库自身的控制文件中外,还记录于A 库的 某个用户下(catalog owner),这样,一旦 A库所有文件包括控制文件都丢失了,可以根据B 库中的catalog 的信息,从备份中恢复A 库的参数文件,控制文件及数据文件。从而恢复A库。
当没有恢复目录时,RMAN相关的备份信息,比如归档文件路径、备份集路径等均存储在目标数据库的控制文件中,不过考虑到控制文件并不能无限增长,而且控制文件也不仅仅是用来存储与备份相关的信息,因此RMAN也有一个专门的备份信息存储地,这就是恢复目录了。当待备份的数据库注册到恢复目录之后,RMAN相关的信息除了保存在控制文件中外(控制文件实际上只保存一部分),更加详细的信息就都被存储在恢复目录中。
(1)创建一个独立的表空间:
SQL>CREATE TABLESPACE RMANTBS DATAFILE 'f:\oracle\oradata\bakdb\rmantbs01.dbf' size 50m;
- Tablespace created.
注意千万不要将恢复目录创建在要备份的目录数据库。
由于恢复目录通常不会太大,这里数据文件仅分配了50MB的空间。
(2)创建一个独立的 SCHEMA ,用来记录备份信息,并授予相关权限:
SQL>GRANT CONNECT,RESOURCE,RECOVERY_CATALOG_OWNER TO RMANCT IDENTIFIED BY RMANCT;
- Grant succeeded.
(3)通过RMAN连接到新创建的恢复目录中:
F:\oracle>RMAN CATALOG RMANCT/RMANCT
Recovery Manager: Release 10.2.0.1.0 - Production on Fri Apr 24 11:11:06 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
- connected to recovery catalog database
(4)在RMAN中创建 CATALOG :
RMAN>CREATE CATALOG TABLESPACE RMANTBS;
- recovery catalog created
这样恢复目录就算创建完了,一个恢复目录数据库可以同时为多个目标数据库提供服务,不过要使用恢复目录执行备份操作前,首先需要在恢复目录中注册该数据库,注册也非常简单,一条命令即可,步骤如下:
首先以CATALOG模式连接到目标数据库和恢复目录(连接恢复目录只需要在连接时指定CATALOG参数即可):
F:\oracle>RMAN TARGET / CATALOG RMANCT/RMANCT@BAKDB
Recovery Manager: Release 10.2.0.1.0 - Production on Fri Apr 24 11:16:36 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: JSSBOOK (DBID=1419729528)
- connected to recovery catalog database
可以通过如下命令注册数据库:
RMAN> REGISTER DATABASE;
database registered in recovery catalog
starting full resync of recovery catalog
- full resync complete
这之后进行的操作,比如创建备份等操作信息都会存入恢复目录中。
对于注册到恢复目录,是否就必须或者只能以CATALOG模式进行备份或恢复操作了呢?当然不是,恢复目录只是RMAN中的一个可选项,而不是必选项,备份信息是否记入CATALOG取决于执行RMAN操作时是否连接到了CATALOG,也就是说,即使目标数据库已经注册到恢复目录中,但连接时没有以CATALOG模式连接,则备份信息仍然是只存入目标端数据库的控制文件,相当于NOCATALOG模式。
另外,已经注册到 CATALOG 中的数据库希望取消注册怎么办呢?使用U NREGISTER 命令即可:
RMAN>UNREGISTER DATABASE;
database name is "JSSBOOK" and DBID is 1419729528
Do you really want to unregister the database (enter YES or NO)? yes
- database unregistered from the recovery catalog
如果DBA要管理的Oracle数据库较多,那么对于这些数据库的备份,建议使用恢复目录统一管理,这样既方便备份和恢复操作,而且安全性也相对比较高(执行完备份操作后,单独备份恢复目录数据库即可,无须担心被备份的数据库控制文件丢失可能造成的影响)。不过如果DBA仅管理一个或者数个Oracle数据库,那么我想NOCATALOG模式操作起来会更加方便。
Reference:
1.http://blog.itpub.net/29196873/viewspace-1076805/
2.https://zhidao.baidu.com/question/1768237096901294140.html