4.3 Copy 镜像拷贝与恢复
Copy镜像拷贝命令可以创建数据库数据文件、归档重做日志或者控制文件的精确副本。 RMAN 副本与这些文件的区别仅在于名称和(或)位置的区别。功能相当于用户管理的备份恢复中的热备份。备份副本的好处是恢复比较快,恢复时可以不用拷贝,指定新位置即可。
Copy镜像拷贝至少要在mount 状态下运行。
Copy镜像拷贝可作为增量备份的 Level 0
Oracle10g开始,允许使用单条命令"backup as copy"进行数据库拷贝。
4.3.1 备份
生成数据文件副本:
RMAN> copy datafile 3 to 'd:/backup/datafilecopy/users01.dbf.bak';
RMAN> copy datafile 'd:/oracle/oradata/ora9i/users01.dbf' to
'd:/backup/datafilecop y/users01.dbf.bak';
生成控制文件副本:
RMAN> copy current controlfile to … ;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP is ON;
备份 ARCHIVELOG 副本:
// 只能一个一个的来备份,而不能指定一个范围
RMAN> copy archivelog 'd:/oracle/oradata/arc/ming_351.arc' to
'd:/oracle/orabackup/arc/ming_351.arc';
并行设置:
1. RMAN> configure device type …… parallelism = 3;//only 2 channel, one for writting data to disk
2. 手工分配多个通道
3. 在命令中指定多个文件RMAN> cop y datafile 'xx' to 'xx2', datafile 'yy' to 'yy2', ……;
块检查:CHECK LOGICAL 选项MAXCORRUPT参数 V$COPY_CORRUPTION在复制操作中,Oracle 服务器进程对每个块执行校验和计算以检测是否有块损坏。 RMAN 在还原副本时也要核对校验和. 该过程称为物理损坏检测. 可以使用NOCHECKSUM 选项取消校验和操作,从而加快复制进程。如果数据库已在维护块校验和,则此选项无效。缺省情况下,禁用逻辑损坏的错误检查。
可以使用 CHECK LOGICAL 选项测试通过了物理损坏检查的数据和索引块,查看它们是否存在逻辑损坏,如行片或索引条目损坏。如果检测到任何块存在逻辑损坏,则 将该块记录到服务器进程的警报日志和跟踪文件中。
可以使用 MAXCORRUPT 参数设置逻辑和物理损坏的阈值。只要在某个文件中检测到的逻辑和物理损坏总和低于该值,则 RMAN 命令完成,同时 Oracle 将损坏块的 范围植入到 V$COPY_CORRUPTION 视图。如果超出 MAXCORRUPT,则该命令终 止,并且不植入视图。 当并行度比较高时,占用的计算机资源较多,但备份操作完成 速度较快。缺省情况下将启用对物理损坏的错误检查。有关在备份过程中遇到的损坏数据文件块的信息将记录在控制文件和警报日志中。
4.3.2 恢复
查看所有的 Copy镜像拷贝:RMAN> list copy;数据文件副本还原:还原时可以 offline 数据文件所属表空间,然后利用 OS拷贝命令恢复副本。
还可以用 restore (datafile num) from datafilecop y 命令来从数据文件副本中还原数据文件,然后再用recover 命令来恢复。例如:RMAN> sql "alter database datafile 5 offline"; RMAN> restore (datafile 5) from datafilecop y; RMAN> recover datafile 5;RMAN> sql "alter database datafile 5 online";注意,上面的圆括号很重要,如果没有,restore 命令就会执行失败。
4.4 Backup 备份与恢复
Backup 备份命令生成 Backup sets (备份集合),以 oracle 专有的格式保存,由一个完全的所有的备份片集合构成,构成一个完全备份或增量备份。
4.4.1 BACKUP 备份命令选项
设置标记(TAG)
RMAN> backup database tag='test backup';
限制备份集大小
RMAN> backup database maxsetsize=100M;
只备份新增部分
RMAN> backup incremental level 0 database;
备份控制文件 同时备份SPFILE
RMAN> backup current controlfile;
RMAN> configure controlfile autobackup on; // 默认是 off
也可以在备份数据库或者文件的时候加上 include current controlfile 选项。例如:
RMAN> backup database include current controlfile;
备份时如果包含了 SYSTEM表空间,将自动备份控件文件和 SPFILE RMAN> backup file 1;
使用自动备份进行恢复:
RMAN> restore spfile/controlfile to '/xx/xx' from autobackup;
备份归档日志(9i)
RMAN> backup archivelog all;
RMAN> backup …… plus archivelog; // 在备份其他时同时备份归档日志
plus archivelog 隐含如下步骤:
运行一个 ALTER SYSTEM ARCHIVELOG CURRENT 命令
运行 BACKUP ARCHIVELOG ALL 命令。注意如果备份优化被启用,RMAN只会备份未备份过的日志
备份 BACKUP命令中定义的文件
运行 ALTER SYSTEM ARCHIVE LOG CURRENT 命令
备份所有的剩下的归档日志
备份完后删除归档日志RMAN> backup …… ARCHIVELOG all delete all input;修改备份集的保存策略例如:将备份设置为永久有效RMAN> backup database keep forever logs|nologs;设置为有效期 180 天RMAN> backup database keep until time='sysdate+180';重写configure exclude / noexclude通过 configure exclude 可以配置 RMAN 不备份上次备份以来没有发生变化的数据文件。如果要确保 RMAN备份这些数据文件,可以在 backup命令中添加 noexclude 选项。 例如:RMAN> backup database noexclude;
跳过脱机的、不可存取的或者只读的数据文件
RMAN> backup database skip offline skipinaccessible skipreadonly;
强制备份只读的数据文件
RMAN> backup database force;
备份指定周期内没有备份的数据文件
RMAN> backup database not backed up;
RMAN> backup database not backed up since time='sysdate-2';
在备份操作期间检查逻辑讹误
RMAN> backup check logical database; //在检查逻辑错误的同时进行备份RMAN> backup validate check logical database; //只检查建立压缩备份集RMAN> backup as compressed backupset tablespace users FORMAT='D:/BACKUP/%d_%s.dbf';
4.4.2 RESTORE/RECOVER恢复命令选项
数据库恢复
RMAN> restore/revover database ;
表空间恢复
RMAN> restore/revover tablespace xx ;
只读表空间的恢复
默认情况下,即使丢失了只读的数据文件,RMAN 也不会在执行完全数据库还原 操作时 候还原只读的数据文件。要 在完全恢复期间还 原只读的 数据文件,就必须在 RESTORE 命令中使用 CHECK READONLY 参数:RMAN> RESTORE DATABASE CHECK READONLY;
恢复SPFILE/控制文件
使用自动备份恢复 SPFILE/控制文件
RMAN> startup nomount;
RMAN> set dbid=153910023
RMAN> restore controlfile from autobackup
RMAN> restore spfile/controlfile to '/xx/xx' from autobackup ;
或
RMAN> restore controlfile from'/arch/ct_c-2347671489-20060630-00';
联机状态:目标数据库 MOUNT 或 OPEN
RMAN> restore controlfile to 'd:/temp/control01.ctl';
归档重做日志的还原
RMAN> RESTORE ARCHIVELOG ALL;RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1 UNTIL LOGSEQ=20; RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;
也可以用 SET命令来指定归档日志的还原位置,例如:
RMAN> run
{
set archivelog destination to "d:/temp";
restore archivelog all;
}
数据文件副本还原
RMAN> sql "alter datafile 5 offline";RMAN> restore (datafile 5) from datafilecop y; RMAN> recover datafile 5;RMAN> sql "alter datafile 5 online";请注意,上面的圆括号很重要
还原检查与恢复测试
与备份检查一样,还原操作也可以检查是否能正常 restore 或者是否该备份集是否有效。如::
RMAN> RESTORE DATABASE VALIDATE;RMAN>VALIDATE BACKUPSET 218;RMAN> RESTORE DATABASE VALIDATE CHECK LOGICAL ;
从指定的tag恢复:
RMAN> RESTORE FROM tag=‘xxxx’;
不完全恢复的还原:
1.set until time/SCN/ 2.RMAN> restore database until scn 1000;RMAN>restore database "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')"; RMAN> restore database until sequence 100 thread 1;
块级别的恢复
块恢复 Block Media Recovery (BMR),块是恢复的最小单元,通过块可以减少恢复 时间,而且数据文件可以在线。恢复块的时候,必须指定具体的块号,如:RMAN> block recover datafile 6 block 3;具体请见 4.7.4 块媒体恢复 Block Media Recovery (BMR)
4.4.3 非归档模式下的 BACKUP 备份与恢复
恢复目录: 打开目标数据库:例程启动,数据库加载,mount 不能 open因为目标数据库不在归档模式下,所以当进行备份/恢复操作的时候数据库无法打开。目标数据库只能在 MOUNT 状态不能 Open,所以属于脱机备份。
非归档模式不备份 redo日志,只有完全备份和 readonly/offline表空间和数据文件 备份是有意义的,所以非归档模式最好不用 RMAN进行备份,备份语法与归档模式相 同,所以这里只做简单介绍。
4.4.3.1 全库备份
例: 使用默认的设置脱机全备份的语句
RMAN> shutdown immediate;RMAN> startup mount;RMAN> backup database;RMAN> startup;
例:不使用默认的设置执行脱机备份操作 ,在备份命令中指定备份选项
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> run { allocate channel c1 type disk format '/xxx/ming_%U';
allocate channel c2 type disk format '/xxx/ming_%U';
backup full tag full_db_backup format "/backups/db_t%t_s%s_p%p" (database);
backup current controlfile;
release channel c1 ;
release channel c2 ;}
在这个例子中,我们分配了两个通道,备份位置是在/xxx.默认情况下,如果备份数据文件 1 (SYSTEM 表空间),控制文件和参数文件也会备份。 可以通过下面的命令显示恢复目录中记载的备份集信息: RMAN> list backupset of database;
4.4.3.2 全库备份的恢复
$ rman target /
RMAN> startup mount
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open resetlogs;
4.4.3.3 表空间备份
只有 readonly/offline表空间的备份才有意义。
RMAN> run {
2> allocate channel dev1 type disk;
3> backup
4> tag tbs_users_read_only
5> format "/oracle/backups/tbs_users_t%t_s%s"
6> (tablespace users);
7> }
使用下列命令来显示恢复目录中该表的备份信息:RMAN> list backupset of tablespace users;
4.4.3.4 表空间备份的恢复
RMAN> RUN{
sql "alter tablespace xx offline immediate;"
restore tablespace xx;
recover tablespace xx;
sql "alter tablespace xx online;" }
4.4.3.5 备份控制文件
RMAN> run {
2> allocate channel dev1 type "SBT_TAPE";
3> backup
4> format "cf_t%t_s%s_p%p"
5> tag cf_monday_night
6> (current controlfile);
7> release channel dev1;8> }
注:数据库完全备份将自动备份控制文件。(或者备份时加 include current controlfile)
4.4.4 归档模式下的BACKUP备份与完全恢复
要用 RMAN 进行联机备份操作,数据库就必须位于 ARCHIVELOG 模式。恢复 目录必须打开,目标数据库例程必须启动,数据库加载或者打开。
这部分只介绍完全恢复,不完全恢复见下一节。
4.4.4.1 整库备份与恢复备份命令:
只备份数据文件 (如果 configure controlfile autobackup on; 将自动包括控件文件,SPFILE):RMAN> backup database;同时备份归档日志,然后将备份后的归档日志删除RMAN> backup database plus archivelog delete input;明确指定同时备份控件文件:
RMAN> run{
allocate channel c1 type disk;
sql 'alter system archive log current';
backup full database include current controlfile tag 'dbfull'
format '/u06/oracle/rmanback/full_%u_%s_%p';
sql 'alter system archive log current';
release channel c1;}
可以用 RMAN的 plus archvielog 选项简化数据库备份:
RMAN> run {
2> backup database
3> format '/xxfull%d_%T_%s'
4> plus archivelog
5> format '/xx/arch_%d_%T_%s'
6> delete all input;
7> }
完全恢复:目标数据库必须是 mount状态$ rman target / RMAN> startup mount RMAN> restore database;RMAN> recover database;RMAN> alter database open;
4.4.4.2 表空间的备份与恢复
备份命令:RMAN> backup tablespace users ;
例:RMAN> RUN{
allocate channel c1 type disk;
backup tablespace users tag 'ts_users' format '/oracle/rmanback/ts_%u_%s_%p' ;
release channel c1;
}
恢复:如果我们只丢失了特定的表空间的数据文件,那么我们可以选择只恢复这个表空间,而不是恢复整个数据库。表空间恢复可以在不关闭数据库的情况下进行,只需要将需要恢复的 表空间 offline.
RMAN> RUN{
sql "alter tablespace xx offline immediate;"
restore tablespace xx;
recover tablespace xx;
sql "alter tablespace xx online;"
}
恢复到一个不同的位置:
RMAN> RUN{
sql "alter tablespace xx offline immediate;"
SET NEWNAME for datafile 1 to '/xx';
restore tablespace xx;
switch datafile 1;
recover tablespace xx;
sql "alter tablespace tbs1 online;"
}
4.4.4.3 数据文件的备份与恢复
备份命令:
RMAN> backup datafile 3;
RMAN> backup datafile 'D:/ORAC LE/ORADATA/TEST/TEST.DB';
恢复命令:数据文件恢复与表空间恢复类似 .假设数据文件号为5的文件丢失,文件名是:'E:/ORACLE/ORADATA/USERS.DBF',那么我们恢复的时候可以指定文件号,也可以指定文件名。
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter tablespace users offline immediate";
4> restore datafile 4;—或者 restore 'E:/ORACLE/ORADATA/USERS.DBF'
5> recover datafile 4;
6> sql "alter tablespace users online";
7> release channel dev1;
8> }
恢复到一个不同的位置:
$ rman target /
RMAN> startup mount
RMAN> RUN{
sql "alter tablespace users offline immediate";
SET NEWNAME for datafile 9 to '/xx/user01.dbf';
restore datafile 9;
switch datafile all;
recover datafile 9;
sql "alter tablespace users online";
}
4.4.4.4 归档重做日志的备份与恢复
备份:整库备份的同时,备份所有归档 (以及联机日志):RMAN> backup database plus archivelog;
备份所有归档:RMAN> backup archivelog all;
备份两天来的归档:RMAN> backup archivelog from time='sysdate-2' [to time=‘xxx’] ;
备份从 sequence 1 开始的归档:RMAN> backup archivelog from sequence 1[to sequence =‘n];
备份没有三次备份的归档:RMAN> backup archivelog not backed up 3 times;
备份所有归档,然后删除归档:RMAN> backup archivelog all delete input;
恢复:显示恢复目录中的归档日志:RMAN> list backupset of archivelog all;
一般情况下,在 RMAN 的普通恢复过程中,不必恢复归档的重做日志。不过偶尔也需要恢复重做日志,例如我们用Log Miner 来从归档中查找一些东西。
RMAN命令举例:
RMAN> RESTORE ARCHIVELOG ALL;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1UNTIL LOGSEQ=20;
RMAN> RESTORE ARCHIVELOG FROM LOGSEQ=1;
可以用 SET命令来指定归档日志的还原位置,例如:RMAN> run{ set archivelog destination to "d:/temp";restore archivelog all;}需要注意的是,即使新的归档日志目录不同于默认的归档日志目录,如果Oracle 判定日志已存在,也不会恢复该归档日志文件。
4.4.4.5 联机日志的备份
联机日志不能用 RMAN 来备份,可以先将其归档,再备份。为了实现这点,必须在 RMAN中执行归档命令语句:
RMAN> run {
2> allocate channel dev1 type disk;
3> sql "alter system archive log current";
4> backup (archivelog from time "sysdate-1" all delete input)
5> "format "/oracle/backups/log_t%t_s%s_p%p";
6> release channel dev1;
7>
}
上面的脚本可以在执行完一个完整的联机数据库备份后执行,确保所有的重做日志可以将数据库恢复到一个一致性的状态。
当然,也可以在全库备份时使用 plus archvielog 选项,将自动完成联机日志的备份。
4.4.4.6 控制文件和服务器参数文件的备份与恢复备份:
// 设置文件名格式RMAN> set controlfile autobackup format for device t ype disk to 'ctl_%F';
1. RMAN> configure controlfile autobackup on; // backup database 时将自动备份
2. RMAN> backup current controlfile;
3. RMAN> backup …… include control file;
4. RMAN> backup file 1; // system datafile 自动备份
恢复SPFILE:
SPFILE(PFILE)的丢失/损坏,对数据库不会产生致命影响,可以从其他方式恢复。不过既然RMAN的备份计划中包括了SPFILE的备份,那么就可以使用RMAN来还原SPFILE了。
$ rman target / catalog "rman/rman@db" RMAN> set dbid=153910023 // SET DBID 这个步骤是不能省略的,否则会报错。
RMAN> restore spfile from autobackup [MAXDAYS 100]; // 或者 restore spfile;
RMAN> startup force
或者从某个备份集恢复:RMAN> restore spfile from backupset bs_num 命令。 使用dbms_backup_restore包恢复服务器参数文件:在一些不常见的情况下,我们可能需要直接使用dbms_backup_restore 包来恢复spfile.当然这个包也可以用来恢复其它数据,是常规办法都没有用的时候的一个利器。 这个包可以在数据库 NOMOUNT状态下使用。 假设我们有一个自动备份文件C-2600315304-20060829-02,我们需要从这里恢复数据,那么可以通过执行下面的脚本来完成:
SQL>
DECLARE
DEVTYPE VARCHAR2(256);
DONE BOOLEAN;
BEGIN
DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);
DBMS_BACKUP_RESTORE.restoresetdatafile;
DBMS_BACKUP_RESTORE.restorespfileto('/back/SPFILE.ORA');
DBMS_BACKUP_RESTORE.restorebackuppiece('/back/C-2600315304-20060829-02',DONE=>done);
DBMS_BACKUP_RESTORE.devicedeallocate(NULL);END;
恢复控制文件:
RMAN> startup nomount; RMAN> set dbid=153910023
RMAN> restore controlfile from autobackup
或
RMAN> restore controlfile from'/arch/ct_c-2347671489-20060630-00';
联机状态:目标数据库 MOUNT 或 OPEN
RMAN> restore controlfile to 'd:/temp/control01.ctl';
然后再执行恢复数据库的其他步骤:RMAN> restore database; RMAN> recover database;RMAN> alter database open resetlogs;
使用 dbms_backup_restore 包恢复控制文件:
SQL>
DECLARE DEVTYPE VARCHAR2(256);
DONE BOOLEAN;
BEGIN
DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);
DBMS_BACKUP_RESTORE.restoresetdatafile;
DBMS_BACKUP_RESTORE.restorecontrolfileto('/back/CONTROL01.CTL');
DBMS_BACKUP_RESTORE.restorebackuppiece('/back/C-2600315304-20060829-00',DONE=>done);
DBMS_BACKUP_RESTORE.devicedeallocate(NULL);END;/
4.4.4.7 备份集的备份的备份与恢复
备份:备份所有备份集:RMAN> backup backupset all;备份指定备份集:RMAN> backup backupset bs_num;恢复:(这种备份只是增加一个镜像,不用恢复)
主要用于改变备份集的位置,或者创建多个镜像备份,比如将备份集从硬盘备份到磁带。
4.4.5 归档模式下的不完全恢复
不完全恢复就意味着有数据的丢失。引起不完全恢复的原因有很多,如丢失了联机日志或某个归档日志。另外如果出现了严重损害数据库的用户错误,比如某用户错误的删除了某个重要的数据,那么数据库也要恢复到这个错误操作之前。
不完全恢复会影响整个数据库,需要在 MOUNT 状态下进行。在不完全恢复完成之后, 通常需要使用 resetlogs 选项来打开数据库。resetlogs 表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始。数据库的逻辑生存期也被称为一个对应物(incarnation)。 每次使用 resetlogs 选项来打开数据库后都会创建一个新的数据库对应物,这对于恢复操作来说非常重要。每次使用 resetlogs 后,SCN计数器不会被重置,但是 Oracle会重置联机日志序列号,同时还会重置联机重做日志内容。因此执行了 resetlogs 之后,应该立即重新备份整个数据库,否则恢复起来相当麻烦。 (注:Oracle 10g 中已经可以在 resetlogs 之后不备份数据库,恢复的时候能够穿越 resetlogs)
使用RMAN执行不完全恢复操作时需要完成的一个工作是建立恢复目标。恢复目标是要终止恢复进程的点,可以是时间点、指定的 SCN 或者一个日志序列号。我们可以在 run代码中使用 set 命令和 until time、until scn、until sequence 参数。
也可以选择在RESTORE 和RECOVER命令中直接使用UNTIL TIME、UNTIL SCN、 或者 UNTIL SEQUENCE 参数,这样就可以避免使用 run 代码。例如;
startup mount;
restore database "to_date('2005/08/01 13:00:00','yyyy/mm/dd hh24:mi:ss')"; recover database "to_date('2005/08/01 13:00:00','yyyy/mm/dd 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 "to_date('2005/08/01 13:00:00','yyyy/mm/dd 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> }
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.启动恢复管理器并连接到目标数据库和恢复目录(与后者的连接是可选的)。
Rman target / 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;