技术开发 频道

ORCLE 数据库备份与恢复之四:RMAN(备份与恢复管理器)

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、 设定执行计划
0
相关文章