2013年(350)
分类: Oracle
2013-04-10 13:32:29
===========================================================================
爱动脑筋的朋友可能会在想,既然联机重做日志文件中保存了数据库所做的修改,那么如果将产生的联机重做日志文件全部保存下来,不就拥有了所有数据库执行过的操作了嘛。
关于这一点,Oracle早就想到并且实现了,这就是传说中的归档日志文件。
1.归档模式只有处于归档模式的数据库,才会产生归档日志文件。查看数据库是否处于归档模式,可以通过如下命令实现:
SQL> ARCHIVE LOG LIST;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination F:\oracle\product\10.2.0\db_1\RDBMS
Oldest online log sequence 25
Current log sequence 27上述信息显示当前处于非归档模式。
要将数据库置为归档,可以通过下列步骤操作:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = ' location=F:\oracle\oradata\jssbook\archive ' ;
System altered.提示:
本步操作的目的是修改归档路径,将归档文件存放在数据文件所在目录下的archive目录中。默认归档文件存放于Oracle软件路径下的RDBMS目录下,一般都建议归档文件单独存放。关闭数据库,并重新启用到 MOUNT 状态:
SQL> SHUTDOWN IMMEDIATE
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> STARTUP MOUNT
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1248720 bytes
Variable Size 67109424 bytes
Database Buffers 239075328 bytes
Redo Buffers 7139328 bytes
Database mounted.通过 ALTER DATABASE 命令将数据库置为归档:
SQL> ALTER DATABASE ARCHIVELOG;
Database altered.提示:如果想将数据库改为非归档模式,只需要执行 ALTER DATABASE NOARCHIVELOG 即可。
打开数据库:
SQL> ALTER DATABASE OPEN;
Database altered.再次查看归档状态:
SQL> ARCHIVE LOG LIST;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination F:\oracle\oradata\jssbook\archive
Oldest online log sequence 25
Next log sequence to archive 27
Current log sequence 27返回的信息显示当前数据库已被置为归档模式。
提示:
LOG_ARCHIVE_START 曾经很重要!
对于之前的版本,还有一个初始化参数LOG_ARCHIVE_START会对归档操作造成影响,该参数用来指定是否自动进行归档,默认值为FALSE。也就是说在默认情况下,如果打开了归档模式,数据库并不会自动对联机重做日志文件进行归档,当联机重做日志文件被写满,或者DBA手动触发归档操作时,数据库就会停在那里等待归档操作,表现如同宕机。
10g 中该参数被废弃,是否设置均已不再影响归档的进行,只要DBA启动了归档模式,Oracle就会自动进行归档。实际上10g版本中如果DBA强制在初始化文件中指定LOG_ARCHIVE_START参数,那么启动Oracle数据库时还有可能遇到ORA-32004的错误提示。只有在归档模式下,才会触发归档操作。是否是归档模式将影响联机重做日志文件的重用。在归档模式下,当联机重做日志文件被重用前,Oracle首先需要确认该重做日志是否已经被归档,如果没有,那么必须首先对该重做日志进行归档,而后才能重用该联机重做日志文件。
所谓归档,就是Oracle自动将写满(或被切换)的联机重做日志文件复制一份到指定路径下,并按照相应规则重新命名。
提示:虽然每个联机重做日志文件组中可以有多个成员,不过归档时,每组仅会生成一个归档文件。
在默认情况下Oracle会等一组联机重做日志文件被写满之后再触发归档操作,当然DBA也可以通过执行命令,手动进行归档。例如,对所有未归档的重做日志进行归档:
正是由于重做日志文件的自身特性,因此Oracle中的多项特性都是借助重做日志文件实现(含联机重做日志文件和归档重做日志文件),比如:
=================================================