oracle数据库表备份到库里,Oracle数据库备份与恢复之四:RMAN(备份与恢复管理器)下...

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.启动恢复管理器并连接到目标数据库和恢复目录(与后者的连接是可选的)。

rmantarget /

catalog

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 catalogrman/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、

设定执行计划

4.7

高级主题

4.7.1 使用RMAN备份集恢复DB到其他机器 (1常规方法)

用途:利用生产

DB的备份集建立测试环境或备用数据库( 设置成相同的 DBID,不需要连接原始 DB,只需要利用

Catalog)

步骤:

1.准备工作,配置目标DB环境

在目标 DB上设置

ORACLE相关的环境变量:记下生产 DB的 ORACLE_SID,DBID $set

ORACLE_SID=ming? 在目标 DB创建与生产 DB相同的目录,将生产 DB的 pfile 文件

FTP到目标DB,或者,在第二步中可以从备份集中进行恢复得到

PFILE.? 在目标 DB 上创建生产 DB 的 RMAN 备份集存放的目录,没有使用 catalog情况时这点必然保持一样? 移植备份集(确定包含控制文件,数据文件,归档文件)到目标 DB? 配置网络连接

2.目标DB在nomount状态下恢复pfile 和controlfile

连接恢复目录和目标数据库:$ RMAN target / catalog rman/rman@rcdb RMAN

> set DBID= 3324789823 RMAN > startup nomount RMAN>

restore spfile to pfile ‘/home/oracle/pfile’ [from ‘backupset

name’]; RMAN> restore controlfile

[to 'xx ']

from '/xx/ ORADB_ctl_20070111_c-xx';(控制文件的恢复可以参考

4.4.4.6 中其他方法)

3.启动目标DB 到 mount,在目标DB上Restore

和Recover

RMAN>

alter database mount; ——可能会提示找不到密码文件,不用理会

如果备份集的位置改变了,需要先进行交叉校验:RMAN> catalog start with '/newdir';

RMAN> crosscheck backup; RMAN> report schema;然后 restore /

recover :RMAN> run { allocate channel

ch_disk_db_1 device type disk;restore database;recover database

until sequence=2412 thread=1;——最后一个 arachivelog的 sequence release

channel ch_disk_db_1;

}

4.Resetlogs 打开目标 DB

联机日志文件并没有恢复,所以需要 resetlogs SQL> alter database

open resetlogs;

5.重建临时表空间,重建密码文件,立即备份数据库

重建临时表空间:因为备份时不备份临时文件,v$tempfile

中查询为空,所以可以增加一个文件即可:SQL> alter tablespace temp add tempfile '/u05/oracle/oradata/crm/temp01.dbf' size

10M;重建密码文件可以通过 orapwd命令重建密码文件

备注:恢复时有时遇到的一个问题RMAN-03002 ORA-27064 错误解决办法: 把数据文件 resize 到 oracle 的 block

size 的整数倍SQL> alter database datafile 'xxx' resize n MB;

4.7.2 使用RMAN备份集恢复DB到其他机器 (2复制方法)

使用 RMAN DUPLICATE 命令可 以在保 留目 标数 据库 的基础上 依靠目标 数

据库(Target Database)的备份创建一个副本数据库(Duplicate Database) .该副本即可与目标数

据库完全相同,也可仅包含目标数据库表空间的一部子集。目标站点(Target Site)以及副

本站点(Duplicate Site)甚至可以在同一台机器上。

( 生成新的唯一的 DBID,如果控制文件中仍保存有备份信息,可以不连接

Catalog )

步骤:

1.准备工作,配置副本DB环境

1. 备份主数据库(包括数据文件、控制文件以及所有归档),并把该备份集拷贝到副本

数据库机器同样的目录下。

2. 拷贝主数据库的初始化参数文件 pfile

到副本数据库机器上,并根据需要作相应修改,创建密码文件。

3. 配置主数据库到副本数据库的连接。

2.启动副本数据库到 nomount下,目录数据库必须MOUNT (或OPEN)

$ sqlplus

/nolog SQL> conn / as sysdba SQL> startup nomount

3.运行RMAN,分别连接主数据库与副本数据库实例

控制文件中保存有备份信息,可以不连接 Catalog

在副本数据库上:$

rman target

4.运行复制命令

如果没有配置自动分配通道的话,需要手工指定至少 1 条辅助通道。

DUPLICATE命令将自动完成:将还原所有数据文件,重新创建控制文件,并利

用新的参数文件启动恢复数据库到一致状态,最后用 resetlog 方式打开数据库,并 重建 redolog

RMAN> RUN

{ ALLOCATE AUXILIARY CHANNEL aux1 DEVICE TYPE DISK;duplicate target

database tocrmnofilenamecheck; RELEASE CHANNEL aux1;}

5.重建临时表空间,立即备份数据库

SQL> alter tablespace temp add tempfile '/u05/oracle/oradata/crm/temp01.dbf' size

10M;

附:Duplicate

复制命令的一些高级用法:

1.NOFILENAMECHECK异机恢复需要指定 NOFILENAMECHECK,可以跳过文件名检测,避免 oracle 错 误的领会你的操作意图。

2.指定PFILE如果辅助实例不是用 SPFILE启动,需要指定 PFILE 参数,PFILE文件必须放在运行 RMAN 的客户端上。

3.跳过不需要复制的表空间要跳过只读表空间,在执行 duplicate 命令时指定 SKIP

READONLY 子句即可。

要跳过离线表空间,在执行

duplicate 命令之前将其置为 OFFLINE NORMAL

状态即可,RMAN 复制时会跳过只读或离线表空间的数据文件。

要跳过正常的表空间,指定

SKIP TABLESPACE ts_name, …

4.恢复到以前的时间点要恢复到以前的时间点,在 duplicate 命令中指定 UNTIL

TIME 'SYSDATE-1' 5.创建过程中重命名控制文件可以使用 restore controlfile from …;或者

dbms_backup_restore 包恢复出控件文件,然后在初始化参数文件 PFILE 中进行正确的设置。

6.创建过程中重命名在线日志文件1.执行 duplicate 命名时指定

LOGFILE子句,手工设置 redo logs 文件名。 例:LOGFILE GROUP 1

('?/oradata/newdb/redo01_1.log',

'?/oradata/newdb/redo01_2. log') SIZE 200K,)

2.副本数据库初始化参数文件 PFILE中设置 LOG_FILE_NAME_CONVERT LOG_FILE_NAME_CONVERT

= 'string1' , 'string2' , 'string3' , 'string4' ,

……;将 strin1 替换为 string2,string3 替换为 string4

7.创建过程中重命名数据文件,或改变数据库文件的新的路径1.在初始化参数中重命名:DB_FILE_NAME_CONVERT=‘xxxx’,‘yyyy’2.在

Duplicate Duplicate Duplicate 命令中重命名数据文件: duplicate target database

to newdb DB_FILE_NAME_CONVERT=('xxxx', 'yyyyy ');3.使用 SET

NEWNAME 命令重命名数据文件SET NEWNAME FOR DATAFILE 1 TO

'/xxx/xxx.dbf';4.使用 CONFIGURE

AUXNAME 命令重命名数据文件CONFIGURE AUXNAME FOR DATAFILE 1

TO '/xxxx/xxx.dbf';5.重命名临时文件路径SET NEWNAME FOR TEMPFILE

'/xxx/xxx.dbf' TO '/yyy/xxx.dbf';

例:一个比较复杂的复制命令如下:

RMAN> RUN

{

allocate

auxiliary channel newdb1 device type sbt;

duplicate

target database to newdb

DB_FILE_NAME_CONVERT=('/h1/oracle/dbs/trgt/','/h2/oracle/oradata/newdb/')

UNTIL TIME

'SYSDATE-1' # specifies incomplete recovery

SKIP

TABLESPACE cmwlite, drsys,

example # skip desired tablespaces

PFILE =

?/dbs/initNEWDB.ora

LOGFILE

GROUP 1

('?/oradata/newdb/redo01_1.log',

'?/oradata/newdb/redo01_2. log') SIZE 200K,

GROUP 2

('?/oradata/newdb/redo02_1. log'',

'?/oradata/newdb/redo02_2. log'') SIZE 200K

GROUP 3

('?/oradata/newdb/redo03_1. log'',

'?/oradata/newdb/redo03_2. log'') SIZE 200K REUSE;

}

4.7.3 表空间时间点恢复(TSPITR)

用户可能错误的删除了几个表,而且还截断了几个表,如果进行整库恢复可能代价比较

高,这时,我们可以执行表空间时间点恢复(tablespace point-in-time

recovery, TSPITR)。

为了掌握如何执行

TSPITR,应该理解下面这些术语:辅助实例(auxiliary instance): 这是我们创建的临时实例,RMAN 使用这个实例执行TSPITR.完成 TSPITR 后,这个实例可以删除。

辅助集(auxiliary set): 辅助实例上的文件集。包括控制文件、回滚段或者重做段的表 空间、系统表空间、联机日志文件等,还可以选择辅助实例的临时表空间。

恢复集(recovery

set): 要执行

TSPITR 的表空间/数据文件集目标数据库: 实际执行 TSPITR 的数据库

TSPITR 的本质是,RMAN 将要进行时间点恢复的表空间按照设定的条件恢复到辅助 实例上,然后再从辅助实例将表空间传到目标数据库,从而避免整个数据库的恢复,减少恢

复时间,而且这期间其他表空间仍然可用。( 用户管理的备份与恢复也可以使用 TSPITR)

检查TSPITR之后丢失的对象,被丢失对象信息的获取:SQL> Select owner, name From

TS_PITR_OBJECTS_TO_BE_DROPPED Where tablespace_name = 'USER01' And

creation_time > to_date( '2004-09-27 11:25:21', 'yyyy-mm-dd

hh24:mi:ss' );进行TSPITR 的基本步骤是(与有些书上的步骤略有不同):(0) 检查需要恢复的表空间的数据文件备份和控制文件备份是否存在(1) 验证表空间的可传输性(2) 准备辅助实例(3) 执行实际的

TSPITR(4) 在目标数据库上执行 TSPITR 后的操作。

1.验证表空间的可传输性

RMAN 使用 Oracle 可传送的表空间特性来执行

TSPITR,因此表空间本身必须是可传送的。许多因素都导致表空间不可传送。

TSPITR 限制不能还原包含 SYS 用户对象不能执行 TSPITR 恢复具有复制主表的表空间 不支持使用快照日志的表空间

不能还原含有回滚段的表空间不能还原含有分区对象(该对象的分区跨越多个表空间)的表空间 表空间中不能含有

VARRAY、嵌套表、外部表对象TSPITR 不能用于恢复删除的表空间。

可以通过 TS_PITR_CHECK 视图来判断表空间是否可传送。如果表空间不可传送,那 么执行 TSPITR 时就会失败。下面是查询 USERS 表空间是否可传送的语句:SQL> SELECT

OBJ1_NAME "Object Owner",obj1_name "Object Name", obj1_type "Object

Type",ts1_name "Tablespace Name",reason FROM

TS_PITR_CHECK WHERE

ts1_name='USERS';如果未选定行,说明 USERS 表空间可传输。

2.准备TSPITR 的辅助实例 (AUXILIARY

INSTANCE)

启动 TSPITR

之前,需要准备辅助实例。这是一个不需要 RMAN 参与的手工过程。执行下面的步骤来创建辅助实例:u 创建口令文件u 创建辅助实例的参数文件: 编辑辅助实例参数文件的一个简单方法是把目标数据库的参数文件改一下即 可。如果目标数据库用的是

SPFILE,那么在 SQLPLUS 中执行 CREATE

PFILE FROM SPFILE 就可以生成参数文件。

注意:control_files 设置为辅助实例上的文件名db_name =

目标实例lock_name_space 如果辅助实例与目标数据库同一主机,必须设置 instance_name

service_names 取一新名,如 AUX

db_file_name_convert 数据文件名的转换log_file_name_convert 日志文件名的转换注释掉 log_archive_start 参数u 如果在 Windows NT 上运行 Oracle,需要使用 oradim 来添加数据库服务u 启动辅助实例,如有必要,配置 tnsnames.ora,测试是否连通。

3.执行实际的TSPITR

例子:

恢复用户误删除的某个重要的表。将实例 MING 的 USERS 表空间恢复到 SCN是 3818161 的时候。

启动辅助实例:C:\>SET ORACLE_SID=AUX1 C:\>SQLPLUS /NOLOG SQL>

CONNECT / AS SYSDBA SQL> STARTUP NOMOUNT;请注意,SET

ORACLE_SID=AUX1 很重要,这样就可以不用配置

TNSNAMES.ORA执行实际的TSPITR 首先要连到目标数据库和辅助实例。可以联到恢复目录,也可以不连到恢复目录:

C:\> SET ORACLE_SID=AUX1 C:\> RMAN

TARGET /@MING CATALOG RMAN/RMAN@RECO AUXILIARY

/ RMAN> RECOVER TAB LESPACE USERS UNTIL SCN 233646;…

等待完成表空间的恢复。当然也可以用 UNTIL TIME 或者 UNTIL SEQUENCE 子

句,例:RMAN> run { allocate auxiliary channel c1 device type

disk;recover tablespace user02 until logseq 9;}

( 这里有些版本有一个 ORACLE的

BUG,执行到最后可能会报错,需要打补丁 ?? )

可以改变辅助集/恢复集数据文件的位置和名称:set newname for datafile 5 to

'c:\demo\user01.dbf';configure auxname for datafile 1 to

'/backup/xxx.dbf‘;在初始化参数文件中用 DB_FILE_NAME_CONVERT 进行转换

10g 中增加了auxiliary

destination ,更方便RMAN> recover tablespace user01 until logseq 19 auxiliary

destination 'd:\auxiliary';

4.执行TSPITR 后的操作首先应该重新连接

RMAN与目标数据库,并且备份刚恢复的表空间。完成备份后, 需要将表空间联机(RMAN 在 TSPITR 后使表空间脱机)。最后,我们还要关闭或删除辅

助数据库。

4.7.4 块媒体恢复 Block Media

Recovery (BMR)

产生块损坏的原因一般是间断或随机的 I/O 错误或者是内存的块错误。要恢复的坏块 信息可以从报警与跟踪文件,表与索引的分析,DBV 工具或第三方媒体管理工具以及具体 的查询语句中获得。

1. DBV

工具 dbv

file=EYGLE.DBF blocksize=8192 2. RMAN> backup validatedatafile

4; —— 或者 BACKUP VALIDATE DATABASE备份的 坏 块 信息 保存

在 V$BACKUP_CORRUPTION 、

V$COPY_CORRUPTION 和V$DATABASE_BLOCK_CORRUPTION

视图中。

V$BACKUP_CORRUPTION 显示历史讹误的视图

V$DATABASE_BLOCK_CORRUPTION 显示当前数据块讹误的视图。 一旦修正了数据库的块讹误,就需要重新运行 BACKUP

VALIDATE DATABASE 命令,然后确认

V$DATABASE_BLOCK_CORRUPTION 中没有其他讹误。

RMAN 可以备份包含损坏数据块的数据文件,通过设置 set

maxcorrupt 可以跳过指定个数的坏块来避免备份失败。

RMAN> set

maxcorrupt for datafile 1 to 0;在 Oracle9i中可以用 RMAN来执行块级的恢复,而且恢复期间数据文件可以是联机状 态。RMAN通过 Block

Media Recovery(简称 BMR)来执行块级恢复操作。假设我们在查 询一个 Oracle 表的时候接收到下面的错误:ERROR 位于第 1 行:ORA-01578: ORACLE 数据块损坏(文件号 5,块号 97)

ORA-01110: 数据文件 5: 'E:\xxxx.dbf'那么我们就可以在 RMAN中用 BLOCKRECOVER 命令来修复:RMAN> BLOCKRECOVER DATAFILE 5 BLOCK97;

启动 blockrecover 于 03-9月 -06

正在启动全部恢复目录的 resync完成全部 resync使用通道 ORA_DISK_1通道 ORA_DISK_1: 正在从数据文件副本 E:\xxxx.bak 恢复块

正在开始介质的恢复完成介质的恢复完成 blockrecover 于 03-9月 -06

恢复V$DATABASE_BLOCK_CORRUPTION 视图中列出的坏块:RMAN> blockrecover

corruption list [ restore until time 'sysdate - 10'

];恢复指定坏块:RMAN> blockrecover datafile 2 block 12,13 datafile 9

block 19;RMAN> blockrecover tablespace system dba 44404,44405

from tag "weekly_backup"; RMAN> blockrecover tablespace system

dba 44404,44405 restore until time 'sysdate-2';

4.7.5 使用恢复目录恢复前一个对应物

在不完全恢复完成之后,通常需要使用 resetlogs 选项来打开数据库。resetlogs 表示

一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始。数据库的逻辑生存期

也被称为一个对应物(incarnation)。每次使用 resetlogs 选项来打开数据库后都会创建一个 新的数据库对应物。

使用

RMAN可以进行穿越 resetlogs 的恢复,即可以恢复到前一个对应物。10g 版本

增强了这方面的功能。

(1) 使用恢复目录的情况使用恢复目录的情况下,恢复前一个对应物是非常简单的。

首先,用list incarnation;来显示有哪些对应物:RMAN> list incarnation;

数据库Incarnations列表

DB关键字Inc关键字DB名DB ID

CUR重置SCN重置时间

1

2

MING

2600315304

NO

1

20-4 月

-06

1

854

MING

2600315304

NO

3407561

19-8 月

-06

1

4368

MING

2600315304

NO

3794049

29-8 月

-06

1

4437

MING

2600315304

NO

3794728

29-8 月

-06

1

4639

MING

2600315304

YES

3794935

29-8 月

-06

接下来,决定恢复到哪个对应物比如,决定恢复到上面的 4437,方法:在 NOMOUNT 状态下用下面的命令:RMAN>

reset database to incarnation 4437; 下面是具体的恢复步骤的一个演示(输出略去): RMAN>

shutdown immediate;RMAN> startup nomount;RMAN> reset database

to incarnation 4437; RMAN> restore controlfile;RMAN> alter

database mount;RMAN> restore database until scn 3794934;RMAN>

recover database until scn 3794934;RMAN> alter database open

resetlogs;上面的例子中,我们最大可恢复到的 SCN 就是 3794934,因为 4437 的下一个对应物的重置 SCN 是 3794935.(2) 不使用恢复目录的情况不使用恢复目录的情况下,要恢复前一个对应物就必须要能恢复到前一对应物的控

制文件。不使用恢复目录,我们就无法使用 RESET DATABASE TO

incarnation_num 命 令。

首先看看有哪些对应物:RMAN> list incarnation;

数据库Incarnations列表

DB关键字Inc关键字DB名DB ID CUR重置 SCN重置时间

--------------

-------- ---------------- --- ---------- ----------

11 MING 2600315304 NO 3501920 20-8月-06

2

2

MING

2600315304

NO

3785052

29-8 月

-06

3

3

MING

2600315304

NO

3794049

29-8 月

-06

4

4

MING

2600315304

NO

3794728

29-8 月

-06

5

5

MING

2600315304

NO

3794935

29-8 月

-06

66 MING 2600315304 YES 3976301 03-9月-06

假设我们要恢复到 5,6之间,那么就要看看有没有控制文件的备份的 SCN在 3794935

到 3976301。我们使用下面的命令:

RMAN>LIST

BACKUP OF CONTROLFILE BY FILE;

控制文件备份列表

===========================

CFCkp

SCN

Ckp时间BS

Key S段数 副本数 标记

--------------------

------- - ------- ------- ---

3976095

03-9 月

-0634

A2

1

TAG20060903T170136

3959239

03-9 月

-0630

A1

1

3959170

03-9 月

-0629

A1

1

3958983

03-9 月

-0628

A1

1

3958937

03-9 月

-0627

A1

1

3816575

30-8 月

-0611

A2

1

TAG20060830T064447

可以看出,上面的列表中,控制文件都是可以用的。接下来找到一个具体的含有控制文

件的备份:

RMAN>LIST

BACKUP OF CONTROLFILE;

备份集列表

===================

……

段名:E:\TEST\C-2600315304-20060830-07

控制文件包括:Ckp

SCN:

3818213 Ckp时间:30-8 月-06

……

假 设 我 们 使 用 E:\TEST\C-2600315304-20060830-07,

那 么 接 下 来 我 们 需 要 用

DBMS_BACKUP_RESTORE包来从这个文件中恢复控制文件。(在

SQLPLUS 中运行)

SQL>SHUTDOWNIMMEDIATE;

SQL>STARTUPNOMOUNT;

SQL>DECLARE

DEVTYPE

VARCHAR2(256);

DONEBOOLEAN;

BEGIN

DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);

DBMS_BACKUP_RESTORE.restoresetdatafile;

DBMS_BACKUP_RESTORE.restorecontrolfileto('/xxx/CONTROL01.CTL');

DBMS_BACKUP_RESTORE.restorebackuppiece('/xxx/C-2600315304-20060830-07',D

ONE=>done);

DBMS_BACKUP_RESTORE.restoresetdatafile;

DBMS_BACKUP_RESTORE.restorecontrolfileto('/xxx/CONTROL02.CTL');

DBMS_BACKUP_RESTORE.restorebackuppiece('/xxx/C-2600315304-20060830-07',D

ONE=>done);

DBMS_BACKUP_RESTORE.restoresetdatafile;

DBMS_BACKUP_RESTORE.restorecontrolfileto('/xxx/CONTROL03.CTL');

DBMS_BACKUP_RESTORE.restorebackuppiece('/xxx/C-2600315304-20060830-07',D

ONE=>done);

DBMS_BACKUP_RESTORE.devicedeallocate(NULL);

END;

/

SQL>ALTERDATABASE

MOUNT;

重新联到 RMAN 后再来运行一下 LISTINCARNATION;

$RMAN

TARGET /@MING NOCATALOG; RMAN> LIST INCARNATION;

数据库Incarnations列表

DB关键字Inc关键字DB名DB

ID CUR重置SCN

重置时间

--------------

-------- ---------------- --- ---------- ----------

1

1

MING

2600315304

NO

3501920

20-8 月

-06

2

2

MING

2600315304

NO

3785052

29-8 月

-06

3

3

MING

2600315304

NO

3794049

29-8 月

-06

4

4

MING

2600315304

NO

3794728

29-8 月

-06

5

5

MING

2600315304

YES

3794935

29-8 月

-06

可以看出来,我们已经恢复到想要的对应物上了。接下来:

RMAN> RESTORE

DATABASE; RMAN> RECOVER DATABASE;

RMAN>ALTER

DATABASE OPEN RESETLOGS;

4.7.6 RMAN增量备份

通过增量备份,RMAN 允许用户只备份上次增量备份操作以来被修改过的数据块。

N 级别增量备份备份从最近的 N 级别或者更小级别以来的所有更改过的数据块内容。0

级备份与全备份的不同就是 0 级备份可以作为其它增量备份的基础备份而全备份是不可 以的。

增量备份的优点: 节约备份时间节省备份磁带或者磁盘空间 降低网络带宽要求增量备份的缺点: 恢复时间可能要长。

增量备份分为两种,一种是累积增量备份,一种是非累积增量备份。

差异增量备份(Differential Incremental Backup)

差异备份是默认的增量备份类型,备份上一次在同级或者更低级别进行备份以来所有有变化的数据块。

RMAN>backup incremental level n (incremental)

database;累积增量备份(Cumulative Incremental Backup)

包括上一次低级备份以来所有有变化的数据块。累计增量备份增加了备份的时间,

但是因为恢复的时候,需要从更少的备份集中恢复数据,所以,为了减少恢复的时候, 累计增量备份将比差异增量备份更有效。

RMAN>backup incremental level n (cumulative) database;

9i : 不管怎么样增量备份,还是需要比较数据库中全部的数据块,这个过程其实是一个漫

长的过程,而且由于增量备份形成多个不同的备份集,使得恢复变的更加不可靠而且速度慢, 所以增量备份在版本

9中仍然是鸡肋,除非是很大型的数据仓库系统,没有必要选择增量备 份。

10g : 在增量备份上做了很大的改进,可以使增量备份变成真正意义的增量,因为通过特有的增量日志,使得

RMAN 没有必要去比较数据库的每一个数据块,当然,代价就是日志的

IO与磁盘空间付出。另外,10g 通过备份的合并,使增量备份的结果可以合并在一起,而完全的减少了恢复时间。

1. 基本备份(0 级备份)

Level 0 是增量备份策略的基础(注意与

Full备份区别)。执行增量备份操作时,首先需 要的是基本备份(incremental base

backup),增量备份必须有一个基本备份。基本备份的增量 级别是 0,如果没有 0 级备份,那么其它级别的备份会自动转成基本备份。

0 级备份举例:

RMAN> run

{ 2> allocate channel dev1 type disk;3> backup 4>

incremental level 0 5> filesperset

4 #定义每个

backupset 的最大文件数6> format

"/oracle/backups/sunday_level0_%t" 7> (database);8> release

channel dev1;

使用

LIST语句查看,数据库备份集的列表显示中, "type" 将显示 "Incremental","LV"列将显示"0" .

2. N 级备份

RMAN> run

{ 2> allocate channel dev1 type disk;3> backup 4>

incremental level 1/2/3/4 5> filesperset

4 #定义每个

backupset 的最大文件数6> format

"/oracle/backups/sunday_level0_%t" 7> (database);8> release

channel dev1;9> }

3. N 级备份的规划根据业务需求、数据量、恢复所需要的时间等方面考虑,制定合理的备份计划。

例: 一个典型的增量备份案例如下:星期天晚上 - level

0 backup performed 星期一晚上 - level 2 backup

performed 星期二晚上 - level 2 backup performed

星期三晚上 - level 1 backup performed

星期四晚上 - level 2 backup performed

星期五晚上 - level 1 backup performed

星期六晚上 - level 2 backup performed

星期天晚上 - level 0 backup performed

4. 增量备份的恢复同普通的完全恢复: restore recover RMAN自动确定和使用需要的备份集。

4.7.7 RMAN备份的优化

可以在

RMAN配置中设置备份的优化,如RMAN> CONFIGURE BACKUP OPTIMIZATION

ON;如果优化设置打开,将对备份的数据文件、归档日志或备份集运行一个优化算法。

RMAN备份操作主要是完成以下三个步骤1、从磁盘上读取数据2、在内存中处理数据块3、写入数据到磁盘或磁带以上的读写操作可以同步或异步的完成,在同步

I/O操作中,一个时间只允许有一个IO 操作,但是在异步 I/O操作中,一个时间允许有多个IO操作。因此,备份与恢复的调优主

要集中在以下几个方面:1、 提高同步或异步

I/O操作能力在支持异步操作的操作系统上, 可以通过设置TAPE_AYSNCH_IO,DISK_ASYNCH_IO

和 BACKUP_TYPE_IO_SLAVES 来支持异步操作,提高写的能力。

2、 提高磁盘读能力可以在 backup命令后通过设置 DISKRATIO来保证从多个磁盘上读取数据,保证

连续的数据流。

3、 正确设置缓冲区与参数值设置LARGE_POOL_SIZE , 使备份可以使用连续的缓冲池 ,

通过设置DB_FIL_DIRECT_IO_COUNT 可以提高缓冲区的利用。如果使用磁带备份,还可以设置 BACKUP_TYPE_IO_SLAVES 来提高磁带的写能力。

4、 采用并行备份开辟多个通道,可以实现并行备份与恢复

4.7.8 DBMS_BACKUP_RESTORE 包

这个包是 RMAN 备份与恢复的核心,在调试模式下,RMAN 会输出它调用的每一条命令:C:\> rman

debug target /@tlgaxz catalog rman/rman@reco trace=debug.txt

常用命令:restoreSetDataFile 指示还原操作的开始(但是不会执行实际的还原操作)

restoreSetDataFileTo 定义要还原的数据文件和该文件的还原位置

restoreControlFileTo 定义控制文件的还原位置

restoreSpfileTo 定义要还原的 spfile 的位置

restorebackuppiece 执行实际的还原操作,这个函数的一个参数是备份文件名

devicedeallocate 释放 deviceallocate 函数所分配的设备

deviceallocate 分配用于连续 I/O的设备

applySetDataFile 指示增量还原操作的开始

applyDataFileTo 定义数据文件的增量还原位置

applybackuppiece 执行实际的还原操作

resetoreSetArchivelog 指示归档日志还原操作的开始

restoreArchivelog 定义要还原的归档的重做日志序列和线程

例:使用 dbms_backup_restore

包恢复服务器参数文件:在一些不常见的情况下,我们可能需要直接使用 dbms_backup_restore 包来恢复 spfile.

当然这个包也可以用来恢复其它数据,是常规办法都没有用的时候的一个利器。这个包可以 在 数 据

库 NOMOUNT 状

态 下 使 用

. 假 设 我 们 有 一 个 自 动 备 份 文 件C-2600315304-20060829-02,我们需要从这里恢复数据,那么可以通过执行下面的脚本来完成:

SQL>DECLARE

DEVTYPEVARCHAR2(256);

DONEBOOLEAN;

BEGIN

DEVTYPE:=DBMS_BACKUP_RESTORE.deviceallocate(NULL);

DBMS_BACKUP_RESTORE.restoresetdatafile;

DBMS_BACKUP_RESTORE.restorespfileto('d:\spfile.ora');

DBMS_BACKUP_RESTORE.restorebackuppiece('d:\C-2600315304-20060829-00',

DONE=>done);

DBMS_BACKUP_RESTORE.devicedeallocate(NULL);

END;

/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值