您的位置:首页 > 其它

rman的还原恢复

2015-02-05 15:20 204 查看
关键文件包括

控制文件的任何副本

system表空间的一部分的数据文件

当前撤销表空间的一部分的数据文件

非关键文件包括

多重联机日志文件

临时文件

非system表空间或当前撤销表空间的一部分的数据文件

在oracle数据库中,构成system表空间和当前活动的撤销表空间(由UNDO_TABLESPACE参数指定)的数据文件被认为是“关键的”。这类文件受损将导致实例立即停止。而且,在通过还原和恢复操作修复损坏之前

,数据库无法再次打开。

如果system表空间的任一部分不可用,部分数据目录将缺失。在没有完整的数据目录情况下,oracle不能起作用。

如果部分撤销表空间不可用,则维护事物完整性和隔离性所需的撤销数据可能也不可用,oracle同样不恩功能起作用。

如果数据库因为关键数据文件损坏而崩溃,那么第一行动就是试着启动它。这将在加载模式下停止,同时将错误消息写入警报日志,表明受损程度。要进行恢复可以采取和非关键文件一样的例程,然后打开数据库。

还原和恢复过程与对非关键文件所采取的过程相同,但必须在加载模式下进行。对于完整恢复的4个步骤,如果受损的文件时关键文件,则只需要第二,第三步,因为数据库不能打开,所以不需要时受损文件脱机

并且之后又使它联机。

关键数据文件的丢失并不意味这数据丢失,但意味着时间的丢失。

恢复必须在加载模式下执行,因为数据库已经崩溃并且无法打开。恢复过程没有必要将受损文件脱机,因此采取的步骤如下

a.加载数据库

b.还原文件

c.恢复文件

d.打开数据库

只能在加载模式下执行完整恢复的另一种情境是需要恢复整个数据库的时候。如果损害很严重以至于必须还原大部分数据文件,则需要这样做。在加载模式下执行此操作

recover database;

该命令将并行前滚所有还原的数据文件,并根据需要提示归档日志文件。

构成用户数据表空间的其他文件受损同城不会导致实例崩溃。oracle将使受损的文件脱机,使其内容不可访问,但数据库的其余部分仍保持打开。

如果备份是用rman完成的,那么受损文件的还原和恢复操作将完全自动。rman将以最有效的方式执行还原,智能使用完整和增量备份,然后应用必要的归档日志。

数据文件的还原和完整恢复只有在自数据文件上一次备份后生成的所有归档日志文件可用的情况下才能成功。他们必须仍在磁盘的归档日志目标目录中,rman将自动从备份集中提取并还原到磁盘。

使受损的文件脱机

还原文件

恢复文件

将恢复的文件联机

##################################还原服务器参数文件

(1)使用rman从自动备份中恢复服务器参数文件不使用fra

默认位置

set oracle_sid=orcl11g

rman target sys/oracle

set dbid=81234235;

startup nomount;

restore spfile from autobackup;

shutdown immediate;

指定位置

set oracle_sid=orcl11g

rman target sys/oracle

set dbid=81234235;

startup nomount;

run{

set controlfile autobackup format for device type disk to '';

allocate channel c1 device type disk;

restore spfile from autobackup;

}

shutdown immediate;

在默认天数(10天)的时间周期内向后查找控制文件备份集

set oracle_sid=orcl11g

rman target sys/oracle

set dbid=81234235;

startup nomount;

run{

set controlfile autobackup format for device type disk to '/u01/...';

allocate channel c1 device type disk;

restore spfile from autobackup maxseq 200 maxdays 100;

}

shutdown immediate;

还原到指定位置

set oracle_sid=orcl11g

rman target sys/oracle

set dbid=81234235;

startup nomount;

restore spfile to '/u01/..' from autobackup;

shutdown immediate;

(2)使用rman和fra从自动备份中恢复服务器参数文件

set oracle_sid=orcl11g

rman target sys/oracle

startup nomount;

restore spfile from autobackup;

shutdown immediate;

restore spfile from autobackup maxseq 200 maxdays 100;

(3)从特定备份集恢复服务器参数文件

set oracle_sid=orcl11g

rman target sys/oracle

set dbid=81234235;

startup nomount;

run{

allocate channel c1 device type disk;

restore spfile from autobackup from '';

}

shutdown immediate;

(4)使用恢复目录恢复服务器参数文件

set oracle_sid=orcl11g

rman target sys/oracle catlog rcat_user/rcat_password

startup nomount;

restore spfile from autobackup;

shutdown immediate;

(5)使用联机操作的数据库还原备份的服务器参数文件

restore spfile to pfile 'd:\backup\test.ora' from autobackup;

如果没有使用恢复目录与控制文件自动备份,或者是在使用恢复目录,就可以执行下面的命令

restore spfile to pfile 'd:\backup\test.ora'

#######################################################还原控制文件

使用rman从自动备份中恢复控制文件不使用fra

默认位置

set oracle_sid=orcl11g

rman target sys/oracle

set dbid=81234235;

startup nomount;

restore controlfile from autobackup;

shutdown immediate;

指定位置

set oracle_sid=orcl11g

rman target sys/oracle

set dbid=81234235;

startup nomount;

run{

set controlfile autobackup format for device type disk to '';

allocate channel c1 device type disk;

restore controlfile from autobackup;

}

shutdown immediate;

在默认天数(10天)的时间周期内向后查找控制文件备份集

set oracle_sid=orcl11g

rman target sys/oracle

set dbid=81234235;

startup nomount;

run{

set controlfile autobackup format for device type disk to '/u01/...';

allocate channel c1 device type disk;

restore spfile from autobackup maxseq 200 maxdays 100;

}

shutdown immediate;

还原到指定位置

set oracle_sid=orcl11g

rman target sys/oracle

set dbid=81234235;

startup nomount;

restore controlfile to '/u01/..' from autobackup;

shutdown immediate;

(2)使用rman和fra从自动备份中恢复服务器参数文件

set oracle_sid=orcl11g

rman target sys/oracle

startup nomount;

restore controlfile from autobackup;

shutdown immediate;

restore controlfile from autobackup maxseq 200 maxdays 100;

(3)从特定备份集恢复服务器参数文件

set oracle_sid=orcl11g

rman target sys/oracle

set dbid=81234235;

startup nomount;

run{

allocate channel c1 device type disk;

restore spfile from autobackup from '';

}

shutdown immediate;

(4)使用恢复目录恢复服务器参数文件

set oracle_sid=orcl11g

rman target sys/oracle catlog rcat_user/rcat_password

startup nomount;

restore spfile ;

alter database mount;

(5)恢复较早的控制文件

restore spfile from autobackup until time "to_date('12/09/2005 13:00:00','MM/DD/YYYY HH24:MI:SS')";

(6)还原控制文件后的数据恢复

----noarchivelog

set oracle_sid=orcl11g

rman target sys/oracle

set dbid=

startup nomount

restore controlfile from autobackup;

recover database noredo;不应该尝试将重做应用于数据库

alter database open resetlogs

-----archivelog

set oracle_sid=orcl11g

rman target sys/oracle

set dbid=

startup nomount

restore controlfile from autobackup;

alter database mount;

recover database ;

alter database open resetlogs;

(7)还原到rman相关的记录的控制文件中

(8)使用联机操作的数据库还原备份的控制文件

如果不使用恢复目录而要启用控制文件的自动备份

restore controlfile to 'd:\backup\test.ora' from autobackup;

如果没有使用恢复目录与控制文件自动备份,或者是在使用恢复目录,就可以执行下面的命令

restore controlfile to 'd:\backup\test.ora'

##############################################在noarchivelog模式中还原和恢复数据库

在非归档日志模式下,没有什么支持恢复的技术,因为恢复所需的归档日志文件不存在。因此,只能进行还原。但如果通过应用归档重做日志文件,还原的数据文件与数据库的其余部分不同步,则不能打开它。

那么非归档日志模式下的唯一选择时还原整个数据库:所有数据文件和控制文件。假定所有这些文件时从全部脱机备份中还原的,那么在还原后将有一个其所有这些文件都同步的数据库,因此是个可打开的数据库。

但会丢失备份创建后所做的所有工作。

在执行了完整还原后,数据库仍会缺失其联机重做日志文件,因为他们没有被备份。由于这个原因,还原后的启动将失败,数据库处于加载模式,在加载模式下,发出alter database clear logfile group

<group number>命令重新创建所有日志文件组,然后打开数据库。如果通过DATABASE CONTROL 的RMAN接口执行还原,该过程将是完全自动的。

在非归档日志模式下,如果丢失了数百个数据文件,则只能通过最后一次备份的完整还原来纠正。必须立即回退整个数据库,丢掉用户所有的工作。而且,最后一次的备份必须时全部脱机备份,这将导致停机时间。

显然,使数据库在非归档日志模式下运行的决定不应该轻率作出。

如果处于非归档日志模式下,那数据文件丢失后的唯一选择时还原整个数据库或删除相关的表空间,不能进行恢复。

在非归档日志模式下还原数据库的rman命令为:

shutdown abort

startup mount

restore database;将从最近的完整或增量级别0备份中还原所有数据文件

alter database open resetlogs;将重新创建联机日志文件成员,将日志序列号设置为1并打开数据库。

如果使用增量备份,则在非归档日志模式下还原数据库会有一些不同:需要recover命令应用增量备份。在还原后打开数据库之前,运行下列命令

recover database noredo;

这个命令将定位所有累积和差异增量级别1备份并应用他们。需要用noredo限定符指示rman不要应用任何重做数据,因为在非归档模式下,没有什么可应用。

startup mount;

restore database;

recover database noredo;

alter database open resetlogs;

<<<<<还原归档重做日志时,recover尝试使用磁盘上已有的重做日志,如果磁盘上没有可用的重做日志,

recover就会尝试从各种归档的重做日志备份集中还原他们,注意可以使用recover命令中的noredo参数

指示rman不应该尝试重做应用于数据库。noredo用于noarchivelog数据库的恢复>>>.

在不同的位置上还原数据库

rman默认地将数据文件还原到备份时数据文件所在的原始位置位置。怎样解决这个问题?

输入set newname for datafile 和switch

这些命令与RESORE和recover命令结合使用将告知rman数据文件存放位置。针对数据库数据文件重定位。

例如:如果数据文件最初备份到了d:\oracle\backup,而现在要将文件还原到 e:\oracle\data\recover

set newname for datafile 'd:\oracle\backup\system01.dbf' to 'e:\oracle\data\recover\ystem01.dbf'

最后打开数据库之前,我们必须告诉oracle以后永久地使用已还原的,重定位的数据文件,对此我们要使用switch命令。

使用switch命令可以修改数据库控制文件中数据文件的位置,以反映oracle数据库数据文件的新位置。

switch datafile all命令指示oracle转换控制文件中的所以数据文件位置。

switch datafile 命令可以转换特定数据文件位置。

示例:

startup nomount

restore controlfile from autoback;

alter database mount;

run

{

set newname for datafile 'd:\oracle\backup\system01.dbf' to 'e:\oracle\data\recover\system01.dbf'

set newname for datafile 'd:\oracle\backup\users01.dbf' to 'e:\oracle\data\recover\users01.dbf'

set newname for datafile 'd:\oracle\backup\undo01.dbf' to 'e:\oracle\data\recover\undo01.dbf'

set newname for datafile 'd:\oracle\backup\temp01.dbf' to 'e:\oracle\data\recover\temp01.dbf'

restore database;

recover database noredo;

switch datafile all;

alter database open resetlogs;

}

11g提供的新特性具有修改表空间中的所以数据文件或者整个数据库中的所以数据文件的位置能力。

通过使用set newname for database命令,在此命令中重命名所以数据文件

run

{

set newname for database to 'e:\oracle\data\recover\%b'

restore database;

recover database noredo;

switch datafile all;

alter database open ;

}

如果只希望重命名与给定表空间关联的数据文件,也可以使用set newname for talespace命令。

run

{

set newname for tablespace user_data to to 'e:\oracle\data\recover\user_data%b.dbf'

restore database;

recover database noredo;

switch datafile all;

alter database open ;

}

###################################在archivelog模式中恢复数据库

数据库恢复<联机重做日志文件时完好的>

startup mount;

restore database;

recover database ;

alter database open ;

表空间恢复

sql "alter tablespace users offline"

restore tablespace users;

recover tablespace users;

sql "alter tablespace users online"

数据文件恢复

sql "alter datafile 3 users offline"

restore datafile 3;

recover datafile 3;

sql "alter datafile 3 users online"

#################################联机重做日志丢失的恢复

(1)非活动的联机重做日志文件组成员的丢失

alter database add logfile '' reuse to group 2;

(2)非活动的联机重做日志文件组的丢失

I:在数据库启动期间

alter database drop logfile group2;

alter database add logfile 1 group 2 '' size 50m;

II:在数据库运行期间

alter system checkpoint;

alter database clear logfile group 1;

若清楚的日志文件尚未归档,会出现错误ora-00350,ora-00312,在次情况下,使用

alter database clear unarchived logfile '';命令清除未归档的日志文件并在其当前位置重建日志文件

(3)丢失活动但非当前状态的联机重做日志文件组

alter database clear unarchived logfile '';因为活动的联机重做日志未归档。需要提示oracle这种情况时正常的,该命令将重建联机重做日志并允许oracle继续执行正常的操作

(4)丢失当前联机重做日志文件组

如果丢失当前联机重做日志文件组,一般数据库都会关闭而不会处于正常状态。

幸运的话,数据库可能没有关闭,此时应该立即使用alter system checkpoint命令执行检查点检查数据库操作,避免将数据全部丢失,然后快速将数据库关闭。

使用alter system checkpoint 命令将强制数据库将数据库缓冲区缓存中的脏数据块写入到数据库文件中。

不需要任何恢复可能也能打开数据库,按照如下方式重启数据库

startup mount

alter database clear unarchived logfile命令重建丢失的重做日志组

alter database open;

如果幸运的话,数据库将被成功打开。如未打开,需执行不完全恢复。

5.数据库恢复顾问

list failure

advise failure将会列出与该问题关联的一个或多个修复操作

repair failure命令允许oracle自动修复错误,为运行repair failure命令,必须启动目标数据库实例

change failure利用该关键字可以修改由oracle数据库检测到的错误状态

change failure 187 priority low;

6使用映像副本恢复

如果备份策略包括创建映像副本以及(或不是)备份集,那么对于还原操作有另一个选择:根本不还原。由于映像副本与源数据文件时完全相同的,如果磁盘上有,则可以立即使用它。所需做的只是告诉数据库

映像副本的位置,然后恢复副本。与从备份集中提取数据文件所引起的延迟相比,这可节省大量时间。

要帮助使用映像副本,可使用下列rman命令

rman>backup as copy database;这个命令将所有数据文件复制到闪回恢复区作为映像副本。

要使用映像副本,首先使原始数据文件脱机(在许多情况下将自动发生),然后更新控制文件来指向副本并恢复它。

例如,如果按如下所示创建了一个副本

rman>backup as copy datafile 4 format '/u02/df_copies/users.dbf';

可通过下列代码使用它

rman>run

{

sql 'alter database datafile 4 offline';

set newname for datafile 4 to '/u02/df_copies/users.dbf';

switch datafile 4;

recover datafile 4;

sql 'alter database datafile 4 online';}

这会执行完整恢复,而不需要还原,switch命令等同于可在sql*plus中执行的alter database rename file 命令。如果已将整个数据库复制到闪回恢复区,则可用一条命令“还原”整个数据库

switch database to copy;

任何set命令(如set until,set newname,set dbid)只能在run块中执行,而不能在rman提示符下作为单独命令执行。

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: