使用 RMAN 执行不完全恢复操作时需要完成的一个工作是建立恢复目标。恢复目标是
要终止恢复进程的点,可以是时间点、指定的 SCN 或者一个日志序列号。我们可以在 run
代码中使用 set 命令和 until time、until scn、until sequence 参数。 也可以选择在 RESTORE 和 RECOVER命令中直接使用 UNTIL TIME、UNTIL SCN、 或者 UNTIL SEQUENCE 参数,这样就可以避免使用 run 代码。例如; startup mount;
restore database \hh24:mi:ss')\
recover database \hh24:mi:ss')\
alter database open resetlogs; 4.4.5.1 基于SCN的恢复
如果知道数据库出错前的 SCN,可以将数据库还原到指定 SCN 状态。 $ startup mount; RMAN> run{
allocate channel d1 type disk;
restore database until scn 1317011; --或者 set until scn 1317011 recover database until scn 1317011; sql 'alter database open resetlogs'; release channel d1; }
4.4.5.2 基于时间的恢复
下面使用 set until time 命令为 2005 年 8 月 1 日下午 1点的恢复目标:
$ startup mount; RMAN> run{
set until time \hh24:mi:ss')\restore database; recover database;
alter database open resetlogs; }
执行上面的命令时, RMAN 会查找与恢复目标时间最近、但是不包含恢复目标时间及以后时间的备份集,并且从这个备份中还原数据库。如果数据库非归档模式,那么恢复操作 会在备份集的时间点停止;否则 RECOVER 命令会应用恢复目标之前的归档重做日志或需 要的增量备份。 4.4.5.3 基于日志序列的恢复
RMAN 允许用户将数据库恢复到指定的归档重做日志序列号。如果归档的重做日志中 有间隙(某个归档日志文件或备份损坏或丢失) ,使用这种方法就很方便。间隙通常意味 着我们只能将数据库还原到间隙开始的地方。 SQL> startup mount;
RMAN> restore database until sequence 100 thread 1; --not include 100 RMAN>recover database until sequence 100 thread 1; SQL> alter database open resetlogs; RMAN> RUN {
2> SET UNTIL SEQUENCE 120 THREAD 1; 4> RESTORE DATABASE;
5> RECOVER DATABASE; --recovers through log 119 not include 120 6> ALTER DATABASE OPEN RESESTLOGS; 7> }
RMAN 查看信息List 与Report
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) \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) \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;