Oracle数据库备份与恢复(4):RMAN(备份与恢复管理器)
2008-11-05 11:48:37 来源:WEB开发网
4.5. RMAN 查看信息List 与Report
4.5.1 恢复目录相关视图
恢复目录本身有一组视图,用于存放目标数据库与备份信息,可以用 RMAN用户登录数 据库进行查看,例:RC_DATABASE
RC_DATAFILE RC_STORED_SCRIPT RC_STORED_SCRIPT_LINE RC_TABLESPACE 4.5.2 RMAN 动态性能视图
以下是目标数据库上与 RMAN 备份有关系的一些动态性能视图,可以用 SYS用户进行 查询。
V$ARCHIVED_LOG V$BACKUP_CORRUPTION V$COPY_CORRUPTION V$BACKUP_DEVICE V$CONTROLFILE_RECORD_SECTION V$BACKUP_DATAFILE 用于通过确 定各数 据文件中 的块数来创建大小 相同的备份集。通过它也可以找出数据文件中已损坏的块数。 V$BACKUP_REDOLOG 显示在备份集中存储的归档日志。 V$BACKUP_SET 显示已经创建的备份集。 V$BACKUP_PIECE 显示为备份集创建的备份片。
这里还有一个视图,可以大致的监控到 RMAN 备份进行的程度。如通过如下的 SQL脚本,将获得备份的进度。
SQL> SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK,
2 ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE"
3 FROM V$SESSION_LONGOPS
4 WHERE OPNAME LIKE 'RMAN%'
5 AND OPNAME NOT LIKE '%aggregate%'
6 AND TOTALWORK != 0
7 AND SOFAR <> TOTALWORK;
要在备份过程中将某一进程与一个通道关联起来,请:
1.启动恢复管理器并连接到目标数据库和恢复目录(与后者的连接是可选的)。
rmantarget / catalog rman/rman@rcat
2.在分配通道后,设置 COMMAND ID 参数,然后复制所需的对象。
run {
allocate channel t1 type disk;
set command id to 'rman';
copydatafile 1 to '/u01/backup/df1.cpy';
release channel t1;}
3.查询 V$SESSION_LONGOPS 视图以获得复制的状态。
SELECT sid, serial#, context, sofar, totalwork
round(sofar/totalwork*100,2) "% Complete",
FROM v$session_longops
WHERE opname LIKE 'RMAN:%'
AND opname NOT LIKE 'RMAN: aggregate%';
4.使用 SQL*Plus 并查询 V$PROCESS 和 V$SESSION 以获得 SID 和 SPID.然 后, 使用操作系统实用程序来监视进程或线程。
SELECT sid, spid, client_info FROM v$process p, v$session s WHERE p.addr = s.paddr
AND client_info LIKE '%id=rman%';
4.5.3 List
List 命令是一种在数据库控制文件 或者恢复目录中查询备份的历史信息的方法。 List提供了一组信息,可以提供各种备份的信息,如对应物、备份集、归档日志备份、控 制文件备份等等。
列出对应物:RMAN> list incarnation;
列出备份概要信息:RMAN> list backup summary;
按备份类型列出备份:RMAN> list backup by file;
获得备份的详细信息,包括备份片的物理文件名:RMAN> list backup; RMAN> list backupset bs#;
或者按照TAG 来查:RMAN> list backup tag=tab_number;
列出过期的备份:RMAN> list expired backup;
按照表空间和数据文件来列出备份:列出USERS 表空间的备份:RMAN> list backup of tablespace USERS;
列出文件5的备份:RMAN> list backup of datafile 5;
列出文件 E:\ORACLE\USERS.DB 的备份:RMAN> list backup of datafile ' E:\ORAC LE\USERS.DB ';
列出控制文件的备份:RMAN> list backup of controlfile;
列出归档日志的备份:RMAN> list archivelog all;RMAN> list backup of archivelog all;
列出副本:
RMAN> list copy 列出所有的副本。
RMAN> list copy of controlfile 列出控制文件副本
RMAN> list copy of archivelog all 列出所有归档日志副本
RMAN> list copy of database 列出数据库所有数据文件的副本
4.5.4 Report
Report 命令被用于判断数据库的当前可恢复状态和提供数据库备份的特定信息,可 以检测哪些文件需要备份,哪些备份能被删除以及那些文件能不能获得的信息。可以报 告数据库的所有能备份数据文件对象,包括数据文件名、文件号、表空间、文件大小、 是否含有回滚段等。
RMAN> report schema或者RMAN> REPORT SCHEMA AT TIME 'SYSDATE-14'; RMAN> REPORT SCHEMA AT SCN 1000;RMAN> REPORT SCHEMA AT SEQUENCE 100 THREAD 1;
报告需要备份的数据文件RMAN> report need backup [ redundancy | days | incremental n];报告过期了的数据文件或者不可用的备份与拷贝RMAN> Report obsolete [orphan]报告最近没有备份的数据文件RMAN> report need backup days=10; // 恢复需要超过 10天的归档日志RMAN> report need backup incremental=3; // 恢复时需要超过 3 增量的文件报表文件 增量 名称8 15 E:\ORACLE\ORADATA\MING_RECOVER\MINGDICT.DB 9 15 E:\ORACLE\ORADATA\MING_RECOVER\MINGLOB.DB
这个报告中,列出的数据文件,在进行恢复的时候,需要从 3 个以上的增量备份文件中恢复。我们知道如果需要从很多文件中恢复,会影响恢复速度,可以根据情况来重新备份这些文件。
报告备份冗余或恢复窗口我们可以执行 report need backup redundancy 来确定为满足冗余备份策略而需要备份的 文件。例如:RMAN> report need backup redundancy=2; // 文件冗余备份少于 2 个我们也可以按照恢复窗口来查找需要备份的文件。比如我们要求恢复窗口小于 2 天,那 么用下面的命令:RMAN> report need backup recovery window of 2 days; //文件报表的恢复需要超过 2天的归档日志
这个命令等同于:report need backup days=2;
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、 设定执行计划
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接