Nocatalog方式的备份方案

在没有目录数据库的情况下,Oracle的备份信息是存储在控制文件中的,那么此时控制文件的安全就显得十分重要。

应该如何保证控制文件的安全:

n          首先在数据库配置中,应该在不同磁盘组上存储多份控制文件,以保证在线控制文件的安全。

n          应该启用控制文件的自动备份功能,以便数据库可以在必要时自动备份控制文件。

n          在进行全备或其他备份时,指定include current controlfile字句,在备份时同时备份控制文件

n          RMAN进行控制文件同步或备份时,Oracle会自动执行控制文件的快照,这个快照在某些特殊情况下,可以用于辅助回复。

n          RMAN还支持一下多种控制文件备份方式:

1)      使用backup current controlfile对控制文件进行备份

RMAN> backup current controlfile format ‘d:\backup\control%s.ctl’;

2)      控制文件拷贝

RMAN> backup as copy controlfile format ‘d:\backup\control01.ctl’

拷贝的控制文件是当前控制文件的一个原样副本,可以直接用于启动数据库,而RMAN的控制文件备份则需要通过RMAN进行回复使用。

3)      备份数据文件1将包含控制文件

Oracle数据库中,如果对datafile1进行备份,则Oracle会自动在备份中包含当前控制文件和参数文件;如果启用了自动控制文件备份,则备份datafile1时不再备份控制文件(因为自动备份会执行控制文件备份)

注意:当通过RMAN进行备份时,快照的生成和RMAN的设置有关,当未设置文件自动备份时,全备份会自动备份控制文件,但此时生成的这个控制文件快照先于备份集产生,所以快照不包含最后一次的备份信息,因而这个快照文件不能用于最后一次备份集的恢复。所以说,当使用热i备份来进行数据库恢复时,控制文件的起点很重要。但是当启用了控制文件的自动备份之后,一切将不同。此时再备份数据库,备份集中将不再包含自动的控制文件备份,自动控制文件备份发生在备份完成之后。

 

Oracle9i开始Rman提供plus archivelog选项,极大的简化了Rman备份的操作。

 

当你定义plus archivelog语句时,RMAN执行如下步骤的操作:
1
、运行一个ALTER SYSTEM ARCHIVELOG CURRENT命令
2
、运行BACKUP ARCHIVELOG ALL命令。注意如果备份优化被启用,RMAN只会备份未备份过的日志
3
、备份BACKUP命令中定义的文件
4
、运行ALTER SYSTEM ARCHIVELOG CURRENT命令
5
、备份所有的剩下的归档日志

 

下面是一个完整的备份方案(最好启用控制文件自动备份功能)

fullback.sql

run{

backup full database include current controlfile

format 'E:\OracleBackup\acffullback_%d_%T_%s'

plus archivelog format 'E:\OracleBackup\acfarch_%d_%T_%s' delete all input;

backup as copy current controlfile format 'E:\OracleBackup\acfctl_%d_%T_%s.ctl';  /*可以不要,这里只是对控制文件多作个备份*/

delete noprompt obsolete;

}

 

archback.sql

run

{

backup archivelog all format 'E:\OracleBackup\acfarch_%d_%T_%s' ;

backup as copy current controlfile format 'E:\OracleBackup\acfctl_%d_%T_%s.ctl';

}

最后用一个批处理来调用这两个脚本:

startrman.bat

echo off

set week=%date:~11,3%

if %week%==星期日 rman target / @'e:\oracle\dbmon\fullback.sql' log='E:\oracle\dbmon\logs\rmanfullback_%date:~0,10%.log'

if %week%==星期三 (

rman target / @'e:\oracle\dbmon\fullback.sql' log='E:\oracle\dbmon\logs\rmanfullback_%date:~0,10%.log'

) else (

rman target / @'e:\oracle\dbmon\archback.sql' log='E:\oracle\dbmon\logs\rmanarchback_%date:~0,10%.log'

)

注意:Oracle 9i里同样的备份只有3个备份文件,而Oracle 10g中有4个,新增文件中就是控制文件的备份。在Oracle 9i中,控制文件和参数文件被包含在全备份中,所以如果丢失了当前控制文件,从备份集中恢复控制文件是比较复杂的,而oracle 10g则干脆将其分离出来,大大简化了恢复难度。

 

 

Resetlogs/NoResetlogs与控制文件:

当数据库当前的Redo log都可用时,可以通过NORESETLOGS参数重建控制文件,此时Oracle能够从日志文件中读取Redo信息,记录到控制文件中,由于Redo中记录的信息足以重演所有提交成功的事务,所以最终能实现完全恢复,成功打开数据库;如果通过RESETLOGS参数重建控制文件,Oracle认为Redo log已经不可用,重数据文件获取相关信息,打开时要以Resetlogs方式打开数据库。

 

最后需要交接的是在以下几种常见的情况下,完成恢复后需要以Resetlogs方式打开数据库:

n          在执行了不完全恢复。

n          在使用了备份的控制文件进行恢复后

n          使用带有resetlogs选项创建的控制文件恢复之后

 

你可能感兴趣的:(oracle,sql,脚本)