控制文件以及日志管理
控制文件以及日志文件管理
Oracle数据库包含有三种类型的物理文件,分别是数据文件,控制文件和日志文件,其中数据文件是用来存储数据的,而控制文件和日志文件则用于维护和保障Oracle数据库的正常运行。所以保证控制文件和日志文件的可用性和可靠性是确保Oracle数据库正常,可靠运行的前提条件。
控制文件是Oracle数据库最重要的物理文件,每个Oracle数据库都必须有一个控制文件,在启动数据实例时,Oracle会根据初始化参数定位控制文件,然后Oracle会根据控制文件在实例和数据库之间建立关联,则整个Oracle数据库就无法启动。
、控制文件概述
1、 控制文件的概念
控制文件是一个很小的二进制文件,它维护着数据库的全局物理结构,用以支持数据成功的启动和运行,创建数据库时,就提供了与之对应的控制文件就必须处于可写状态。如果控制文件不能呗访问,那么数据库也就不能正常的工作了。所以控制文件的保护工作非常重要,系统提供了用户文件倍和和多路复用机制,当控制文件爱你损坏时,用户可以通过备份来恢复控制文件,系统还提供了手工创建控制文件和控制文件备份文本文件的方式,从而使用户能够更加灵活地管理和保护控制文件。
2、 控制文件的内容
控制文件中记录了对应数据库的结构信息(数据文件与日志文件)和数据库当前的参数设置,其中包含主要的内容:
、对应数据库的名称
、数据库数据文件和日志文件列表(文件名称和对应路径信息)
、数据库的创建时间
、数据库的表空间信息
、数据文件脱机范围
、日志历史
、归档日志信息
、备份组和备份块信息
、备份数据文件和重做日志信息
、数据文家拷贝信息
、当前日志序列
3、 控制文件的管理
数据库的控制文件是数据库创建的同时创建的,一般情况下,控制文件至少有一个副本,当Oracle数据库的实例启动时,控制文件用于表示数据库和日志文件,在进行数据库操作时它们必须被打开。当数据库的物理组成更改时,Oracle将会自动更改该数据库的控制文件来记录相应的变化。数据恢复时,也要使用控制文件,如果数据库的物理结构发生了变化,用户应该立即备份控制文件。
DBA在管理控制文件时,需要采用多种策略或准则来保护控制文件,目前采用的方法主要包括多路复用控制文件,控制文件的备份管理和控制文件的存储策略等。
多路复用控制文件
为了提高数据库的可靠性,至少要为数据建立俩个控制文件,并且分别保存在不同的磁盘中进行多路复用,这样可以避免由于单个设备故障而无法启动数据库的危险,该管理策略被称为多路复用控制文件,换句话说,多路复用控制文件是指在系统不同的位置上同时维护多个控制文件的副本,在这种情况下若果多路复用控制文件其中的某个磁盘发生物理损坏导致控制文件损坏,数据库将被关闭,此时就可以利用另一个磁盘中保存的控制文件来恢复被损坏的控制文件,然后再重新启动数据库,达到保护控制文件的目的。
在初始化参数CONTROL_FILES中列出了所有多路复用的控制文件名。Oracle会更具CONTROL_FILES同时修改了所有的控制文件,但只读其中第一个控制文件中的信息,在整个数据库运行期间,如果任何一个控制文件变为不可用,那么实例就不再继续运行
、CONTROL_FILES参数
如前所述系统通过CONTROL_FILES参数定位并打开控制文件,如果需要进行多路复用控制文件,就必须先改成CONTROL_FILES参数,CONTROL_FILES参数的更改需要使用ALTER SYSTEM语句:
例如:
ALTER SYSTEM SET CONTROL_FILES=
‘E:\ORADTA\ORCL\CONTROL01.CTL’,
‘E:\ORADTA\ORCL\CONTROL02.CTL’,
‘E:\ORADTA\ORCL\CONTROL02.CTL’,
‘F:\ORCLDATA\CONTROL\CONTROL04.CTL’
Scope =spfile;
其中前3个控制文件是创建数据库时创建的,第4个控制文件是用户新添加的,并且位于不同的磁盘上,目前还没有创建文件,需要关闭数据库来创建。
、复用控制文件
对CONTROL_FILES参数进行设置后,需要创建对应的控制文件,达到复用控制文件的效果,其具体操如下
、退出SQL*Plus,关不数据库
、停止OracleDBConsoleSI和OracleServiceSID服务。
、将原有控制文件负值成新添加的控制文件。
、重新启动数据库,对数据字典V$CONTROLFILE进行查询来确认添加的控制文件是否启用。
SELECT name FROM V$CONTROLFILE;
控制文件的创建
使用复用控制文件,则全部控制文件丢丢失或损坏的可能性将非常小,如果数据库的所有控制文件全部丢失或损坏,唯一的补救的方法就是受用创建一个新的控制文件。
手工创建控制文件是使用CREATE CONTROLFILE语句来实现的,其语法格式为:
Create controlfile
Reuse database orcl
Logfile
Group 1('E:\oradata\orcl\redo01.log' size 10m),
Group 2('E:\oradata\orcl\redo02.log' size 10m),
Group 3('E:\oradata\orcl\redo03.log' size 10m),
Datafile
'E:\oradata\orcl\example01.dbf'
'E:\oradata\orcl\sysaux01.dbf'
'E:\oradata\orcl'\system01.dbf'
Noresetlogs
Maxlogfiles 50
Maxlogmembers 3
Maxinstances 6
Maxdatafiles 200
Archivelog;
在CREATE CONTROLFILE语句中,有一些永久性参数的设定,永久性参数是在创建数据库时设置的一些参数,主要包括数据库名称,MAXLOGFILES(最大的重做日志文件数)MAXLOGMEMBERS(最大的重做日志组成员数)、MAXINSTANCES(最大实例数)。如果DBA需要改变数据库的某个永久参数,也需要重新创建控制文件。
(注意:create controlfile语句有可能导致数据文件与日志文件的损坏,若在指定数据文件的名称和位置时漏掉了某个数据文件,则会使数据库彻底丢失这个数据文件,有时甚至会导致整个数据库无法使用,对于日志文件来说也是如此。)
例如:
控制文件的创建过程如下:
、查看数据库中所有的数据文件和重做日志文件的名称和路径。
显示日志文件语句如下:
SELECT member FROM V$LOGFILE;
显示数据文件语句如下:
SELECT name FROM V$DATAFILE;
显示控制文件语句如下:
SELECT name FROM V$CONTROLFILE;
如果数据库中所有的控制文件和日志文件都已经丢失,数据库已经无法打开,因此也就无法通过查询数据字典来获得数据文件和日志文件的信息,唯一的办法就是查看警告日志文件中的内容。
、关闭数据库,如果数据库处于打开状态,则可以采取正常模式关闭数据库,语句如下:
SQL>CONNECT AS SYSDBA;
SQL>SHUTDOWN IMMDITAE;
、在操作系统下备份所有的数据文件和重做日志文件。使用CREATE CONTROLFILE语句创建新的控制文件时,如果操作不当可能会损坏数据文件和日志文件,因此需要先去其进行备份。
、启动数据库实例,但是不加载数据库。加载数据库时,实例将会打开控制文件,无法达到新创建控制文件的效果。
Startup nomount
、利用步骤1得到的文件列表执行CREATE CONTROLFILE命令创建一个新的控制文件。
{
如果数据库的某个联机重做日志文件同控制文件一起丢失,或者在创建控制文件时,改变了数据库的名称,则必须在CREATE CONTROLFILE语句中使用RESETLOGS子句,充值数据库的联机重做日志文件的内容。如果使用了RESETLOGS子句,则必须使用步骤8对数据库进行恢复。
}
、在操作系统下,对新建的控制文件进行备份
、编辑初始化参数CONTROL_FILES,使用指向新建的控制文件,如果在控制文件中修改了数据库的名称,还需要修改DB_NAME参数来指定新的数据库名称,使用语句如下
ALTER SYSTEM SET CONTROL_FILES=
‘E:\oradata\orcl\control01.ctl’,
‘E:\oradata\orcl\control02.ctl’,
‘E:\oradata\orcl\control03.ctl’
SCOPE=SPFILE;
、根据情况,如果需要可以对数据库进行恢复。否则直接执行步骤9.当丢失了某个联机日志文件或数据文件时,则需要对数据库进行恢复。
、打开数据库,若没有执行恢复过程,则可以下面的方式正常打开数据库
ALTER DATABASE OPEN;
如果在创建控制文件时使用了RESETLOGS语句,则可以按下面的方式,即以恢复方式打开数据库
ALTER DATABASE OPEN RESETLOGS;
控制文件的备份与恢复
备份控制文件需要使用到ALTER DATABASE BACKUP CONTROLFILE语句,有俩种备份方式:一种是备份二进制文件,另一种是备份为脚本文件。
例如:
下面的语句可以控制文件备份为一个二进制文件,即复制当前的控制文件:
ALTER DATABASE BACKUP CONTROLFILE
TO ‘d:\backup_controlfile\control_09-05-25.bkp’;
下面的语句可以将控制文件备份为可读的文本文件:
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
将控制文件以文本形式备份时,所创建的文件也称为跟踪文件,该文件实际上是一个SQL脚本,可以利用它重新创建的控制文件,跟踪文件的存放位置有参数USER_DUMP_DEST决定:
Show parameter user_dump_dest
控制文件的查询与删除
- 控制文件查询
控制文件是一个二进制文件,其中被分隔成许多部分,分别记录各种类的信息。每一类信息称为一个记录文档段,控制文件的大小在创建时即被确定,其中各个记录文档的大小也是固定的。
当对控制文件中的信息进行查询时,需要使用系统提供的数据字典视图,与控制文件信息查询相关的数据字典视图
数据字典视图 |
包含信息 |
V$CONTROLFILE |
包含所有控制文件的名称和状态信息 |
V$CONTROLFILE_RECORD_SECTION |
包含控制文件中各个记录文档段的信息 |
V$PARAMETER |
包含了系统的所有初始化参数,从中可以查询参数CONTROL_FILES的值 |
、控制文件的删除
删除控制文件,其操作过程为:
、关闭数据库(shutdown)
、编辑初始化参数CONTROL_FILES,使其中不再包含要删除的控制文件的名称
、重新启动数据库(startup)
删除控制文件时,数据库必须一直拥有俩个或俩个以上的控制文件,否则数据库将无法启动。
日志文件
日志文件也称为重做日志文件,是保证数据库安全和数据库备份与恢复的文件,是数据库安全和恢复的最基本的保障,管理员可以根据日志文件和数据库备份文件,将崩溃的数据库恢复到最近一次记录日志时的状态。
、日志文件及存储策略
日志文件中记录了对数据的所有修改的信息。修改信息包括用户对数据的修改,以及管理员对数据库结构的修改等等内容,由于日志文件的重要性数据库管理员必须要指定一个切实的日志文件的管理策略
1、 日志文件的内容
Oracle在重做日志文件中以重做记录的形式记录用户对数据库进行的操作,当需要进行数据库恢复时,Oracle将根据重做日志文件的记录,恢复丢失的数据。重做日志文件是重做记录组成的,重做记录又称为重做条目,它由一组变更向量组成。每个变更向量都记录了数据库中某个数据库所做的修改,如果用户执行了一跳UPDAT语句对某个表中的一条记录进行修改,同时将生成一条重做记录。这条重做记录可能由多个变更向量组成,在这些变更记录了所有被语句修改过的数据库中的信息,这被修改的数据块包含表中存储这条记录的数据块,以及回滚段中存储的额相应回滚条目的数据块。
重做记录中记录了失误对数据库的操作结果,事务修改前的数据则存放在回退段准中,如果由于某些原因导致事务对数据库的修改结果在写入数据文件之前丢失,Oracle将使用重做记录来重现盖事务对数据的修改操作。如果用户在事务提交前想车秀事务,Oracle将通过回退条目来撤销事务对数据库所做的修改。
2、 日志文件的写入
在Oracle中,用户对数据库所做的修改首先被保存在内存中,这样可以提高数据库的性能,Oracle每隔一段时间就会启动LGWR进程将内存中的重做记录保存到重做日志文件中。
重做记录将以循环方式在SGA区的重做日志告诉缓存中进行缓存,并且后后台进程LGWR写入到重做日志文件中,当一个事务被提交时,LGWR进程将与盖事务相关的所有重做记录全部写入重做日志文件中。同时生成一个“系统变更码(SCN)”。系统变更码SCN会随重做记录一起保存到重做日志文件中,以标识与重做记录相关的事务,只有当某个事务所产生的重做记录全部别写入重做日志文件后。Oracle才会任务该事务提交成功。
在任何时候,Oracle都只使用其中一个联机重做日志文件,来存储日志缓冲区中的重做记录。正在被LGWR进程写入的重做日志文件处于“当前状态(CURRENT)”;正在被用实例用于数据库恢复的重做日志文件处于“活动状态(ACTIVE)”;其他的重做日志文件处于“未活动状态(INACTIVE)”通过查询数据字典视图V$LOGFULE可以获得重做日志文件的状态。
3、 日志切换
每个Oracle数据库都至少需要拥有俩个重做日志文件,当一个重做日志文件被写满后,后台进程LGWE开始写入下一个重做日志文件;当所有的日志文件都写蛮厚。LGWR进程再重现写入第一个重做日志文件中,当前正在被使用的一组重做日志文件称为联机重做日志文件。
LGWR进程结束对当前重做日志文件的使用,开始写入下一个重做日志文件时,称为发生了一次“日志切换”。每当发生日志切换时,Oracle将会生成一个日志序列号”;并将这个序列号分配给即将开始使用的重做日志文件。如果数据库处于归档模式下,日志序列号将随同重做日志文件一起保存。日志序号不会重复,同一个重做日志文件在循环写入时,将随同重做日志文件一起保存。
4、 恢复过程
由于重做记录记录了数据中的修改信息,因此可以利用其恢复数数据,在进行数据库恢复时,Oracle会读取每个变更向量,然后将其中记录的修改信息重新应用到相应的数据块是,完成数据库的恢复工作。由于重做记录中不仅记录了数据文件所做的修改操作,还同时记录了对回滚段所做的修改操作。所以重做日志文件不仅可以进行用户数据库,还能保护回滚段数据。
5、 存储策略
由于数据恢复是根据重做日志文件和记录来进行的,为了提高数据的可靠性,在数据库中通常采用数据文件和重做日志王阿健相分离的存储策略。将数据文件和重做日志文件存放在不同的磁盘上。
增加日志组和日志成员
在一个Oracle数据库中,至少需要俩个重做日志文件组,每组包含一个或多个重做日志成员,一个重做日志成员物理地对应一个重做日志文件。在显示作业系统中为了确保日志的安全。基本上对日志文件采用镜像的方嘎,在同一个日志文件组中,其日志成员的镜像个数最多可以达到5个。
1、 日志组很日志成员
、多路复用联机日志
为了提高数据库的可靠性,Oracle提供了多路复用联机重做日志文件的功能,当采用多路复用联机日志时,LGWR会将同一个重做日志信息同时写到多个同样的联机重做日志文件中。
、日志组和日志成员
互为镜像的多个重做日志文件组成了一个“重做日志组”,重做日志组中的每个重做日志文件为“日志组成员”,日志组中的所有成员都必须具有相同的大小。LGWR进程同步地向一个重做日志组中的所有成员写入重做记录。
建立多路复用的重做日志文件后,最号将同一个日志组中的不同成员分别存放早独立磁盘中。
、日志文件的大小
在采用多路复用的联机重做日志的文件时,同一组的所有成员必须拥有同样的大小。不同组中的组成可以具有不同的大小,但时,组织建又不拥有不同大小的文件并不会带来任何好处。反而在没有设置基于时间的检查点时,检查点在日志切换时发生。因此如果所有的重做日志文件都具有相同的大小,就可以保证有规律地执行检查点。
、日志文件的数目
为数据库实例确定合理的重做日志文件时,需要反复的测试。理想的情况是在保证LGWR进程永远不会出现等待的前提下,尽量使用最少的重做日志文件。LGER进程出现等待状态,它将在自己的跟踪文件和数据库警告文件中记录进行。通过查看LGWR进程的跟踪文件和数据警告文件中的记录,可以得知LGWR进程是否出现等待状态,并计算出等待状态的频率。
在设置或更改数据库实例的重做日志文件组之前,需要考虑数据库对联机重做日志文件的限制,参数MAXLOGFILES为数据库指定联机重做日志文件的最大组数,参数MANLOGMEMBER为每个指定成员的最大数量,修改这俩个值的唯一的办法就是重新创建数据库的控制文件。
(日志成员镜像个数参数MAXLOGNUMBERS的限制;如果需要确定系统正在使用那个yii日志文件组,可以查询数据字典V$LOG进一步要到正在使用的日志组中的那个日志文件则可以查询数据库字典,V$LOGFILE,管理员可以通过语句ALTER SYSTEM SWITCH LOGIFLE来强行的进行日志日还,要查询数据运行在和中模式下可以查询数据字典v$DATABASE,在数据字典V$LGO_HISTORY中记录着历史日志的信息。
)
创建重做日志组及其成员
要重建新的重做日志组和成员时,用户必须具有ALTER DATABASE系统权限,一个数据库最多可以拥有日志组的数据受到MAXLOGFILES的限制。
、创建重做日志组
要创建联机重做日志文件的新组,可以使用带ADD LOGFILE子句的ALTER DATABASE语句。
例如:向数据库添加了一个新的重做日志组,
SQL> alter DATABASE ADD LOGFILE
(‘E:\oradata\orcl\redo04.log’,
‘f:\oradata\orcl\redo04.log’)
SIZE 10M;
没有为ALTER DATABASE ADD LOGFILE语句指定GROUP子句,这时Oracle会自动为新建的重做日志设置编号,一般在当前组号之后递增,也可以显示的利用GROUP子句来指定新建的重做日志组的编号。
创建新的日志组,并将新的日志组指定为第4组。
ALTER DATABASE ADD LOGFILE GROUP 4(
‘E:\oradata\orcl\redo004.log’,
‘f:\oradata\orcl\redo004.log’
)size 10M;
使用组号可以更加方便地管理重做日志组,但是,对日志的编号必须为连续的,不要跳跃式地指定日志组编号。也就是说不要将组号编为10、20、30等等这样不连续的数字,否则会耗费数据库控制文件中的空间。
如果创建一个非复用的重做日志文件,则可以使用如下的语句:
ALTER DATABASE ADD LOGFILE ‘e:\oradata\orcl\redo01.log’ reuse;
如果要创建的日志文件已经存在,则必须在ALTER DATABASE语句中使用REUSE子句,覆盖已有的操作系统文件。
、创建日志成员文件
为重做日志组添加新的成员,需要使用带ADD LOG MEMBER子句的ALTER DATABASE语句。
例如:
为第1组添加了一个新的成员日志文件
Alter database add logfile member ‘f:\oradata\log\redo.log’ to group 1;
此外也可以通过指定重做日志组中的其他成员的名称,以确定要添加的成员所属的重做日志组
Alter database add logfile member ‘f:\oradata\log\redo02.log’ to (
‘e:\oradata\orcl\redo02.log’
)
、重新定义和重命名日志成员
修改重做日志文件的名称和位置的具体操作步骤如下:
、关闭数据库
Connect /AS SYSDBA
Shutdown
、在操作系统中重新命名重做日志文件,或者将重做日志文件复制到新的位置上,然后再删除原来的位置上文件。
、重新启动数据库实例,加载数据库,但不是打开数据库。
Startup mount;
、使用带RENAME FILE子句的ALTER DATABASE语句重新设置重做日志文件的路径和名称,使用语句如下:
SQL> ALTER DATABASE RENAME FILE
‘E:\oradata\orcl\redo03.log’,
‘E:\oradata\orcl\redo02.log’,
‘E:\oradata\orcl\redo01.log’
To
‘e:\oradata\orcl\redo03a.log’,
‘e:\oradata\orcl\redo03a.log’,
‘e:\oradata\orcl\redo03a.log’,
、打开数据库
Alter database open;
、备份控制文件
重新启动数据库后,对联机重做日志文件的修改将生效。通过查询数据字典V$LOGFILE可以获知数据库在所使用的重做日志文件。
SQL>SELECT MEMBER FROM V$LOGFILE;
、删除重做日志组及其他成员
、删除成员日志文件
在删除成员日志文件时要注意以下几点:
×删除成员日志文件后,可能会产生各个重做日志组所包含的成员数不一致,在删除某个日志组中的一个成员后,数据库仍然可以运行,但是如果一个日志组只有一个成员文件,如果这个成员文件被损坏,数据库将会崩溃。
×每个重做日志组中至少要包含一个可用的成员,那些处于无效状态的成员日志文件对于Oracle来说都是不可用的,可用通过查询v$LOFFIEL数据字典视图来查看各个成员日志文件的状态。
×只能删除状态为INACTION的重做日志组中的成员文件。
×如果数据库处于非归档模式下,在删除成员日志文件之前,必须确定它所属重做日志组已经被归档。
要删除一个成员日志文件,只需要使用带DROP LOGFILE MEMBER子句的ALTER DATABASE语句。
例如:
删除4号日志组的第2个成员
ALTER DATABASE DROP LOGFILE MEMBER ‘E:\oradata\log\redo04.log’;
语句知识在数据字典和控制文件中将重做日志成员的信息删除,并不会在操作系统中物理地珊瑚相应的文件,这需要确认删除成员后,再手工的操作系统中删除文件。
、删除整个日志组
在删除日志组时,需要注意如下限制:
×无论日志组有多少个成员,一个数据库至少需要俩个日志组。
×只能删除处于INACTIVE状态的日志组,
×如果数据库处于归档模式下,在删除重做日志组之前必须确定它已经归档。
可以查询V$LOG数据字典视图
查看是否已经对日志组进行过归档
SELECT GROUP# ,ARCHIVED,STATUS FROM V$LOG;
要删除一个重做日志组,需要使用带有DROP LOGFILE子句的ALTER DATABASE语句。
删除4号重做日志组;
ALTER DATABASE DROP LOGFILE GROUP 4;
上述语句只是在数据字典和控制文件中将重做日志组的记录信息删除,并不会物理地删除操作系统中相应的文件,这需要手工在操作系统中将相应的文件删除。
、清空重做日志文件
在数据库运行过程中,联机重做日志文件可能会因为某些原因而损坏,如果出现了这种情况,数据库最终将会由于无法将损坏的重做日志文件归档而停止,如果发生这种情况,可以在不关闭数据库的情况,可以在不关闭数据库的情况下,手工清空日志文件中的内容,以避免出现数据库停止运行的情况。
清空重做日志文件就是将重做日志文件的内容全部初始化,这相当于删除该重做日志文件,然后在重新建立。在清空一个重做日志组时,将同时清空所有成员日志文件,要清空一个重做日志文件或日志文件组,只需要使用CLEAR LGOFILE子句的ALTER DATABASE语句。
例如:
清空2号日志组的中的成员文件:
SQL>ALTER DATABASE CLEAR LOGFILE GROUP2;
在执行上述语句时必须注意如下俩种情况,在这俩种情况下不能可能清空重做日志:
、如果仅有俩个日志组
、被清空的重做日志文件组处于CURRENT状态。
如果要清空的重做日志文件组尚未归档,则必须使用UNARCHIVED子句,避免Oracle对该重做日志文件的组进行归档。
例如:
清空未归档的2号日志组中的成员文件:
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 2;
、查看重做日志文件信息
可查询联机日志信息的数据字典视图
数据字典视图 |
包含信息 |
V$LOG |
显示控制文件中的日志文件信息 |
V$LOGFILE |
日志组和日志成员信息 |
V$LOGFILE_HISTROY |
日志历史信息 |
V$LOG的结构
SQL> desc v$log
名称 是否为空? 类型
----------------------------------------- -------- -------------
GROUP# NUMBER
THREAD# NUMBER
SEQUENCE# NUMBER
BYTES NUMBER
MEMBERS NUMBER
ARCHIVED VARCHAR2(3)
STATUS VARCHAR2(16)
FIRST_CHANGE# NUMBER
FIRST_TIME DATE
其中,比较重要的列包括:
× GROUP# :日志文件组号
× SEQUENEC# : 日志序列号
× STATUS:该组状态(CURRENT/INACTIVE/ACTIVE)
× FIRST_CHANGE#:重做日志组上一次写入时的系统变更码(SCN),也称为检查点号,在使用日志文件对数据库进行恢复时,将会用到SCN,这里只需要知道,日志文件中记录了SCN
设置日志自动归档功能
Oracle数据库有俩种日志模式,第一种是非归档日志模式(NOARCHIVELOG)第二种是归档日志模式(ARCHIVELOG),其中,非归档日志在切换日志时,原日志文件的内容会被新的日志内容所覆盖,而对于归档日志模式而言,Oracle会首先对原日志文件进行归档存储,且在归档未完成之前不允许覆盖原日志。
、归档日志
在重做日志文件被覆盖之前,Oracle能够将已经写满的日志文件通过复制保存到指定的位置,保存下来的所有重做日志文件被称为“归档重做日志”,这个过程就是“归档过程”。只有数据库处于归档模式时,才会对重做日志文件执行归档操作。归档操作可以由后台进程ARCN自动完成,也可以有DBA手工完成。
、归档模式与非归档模式
在非归档模式下,数据库只具有从实例崩溃中恢复的能力,只能对仍然保留在重做日志文件中的,最近对数据库所做的修改进行恢复,而无法进行介质恢复。
对重做日志文件进行归档具有如下优势:
、如果发生磁盘物理损坏,则可以使用数据库备份与归档重做日志模式已经提交的事务,保证不会发生任何数据丢失
、利用归档日志文件,可以实现使用数据库打开状态下创建的备份文件来进行数据库恢复。
、如果为当前数据库建立一个数据库备份,通过持续地为备份数据库备份应用归档重做日志,可以保证数据库与备份数据库的一致。
、归档模式的切换
数据库在归档模式与非归档模式之间进行切换,使用带有ARCHIVELOG或NOARCHIVELOG子句的ALTER DATABASE语句。
想要将归档日志放在默认的路径下时,只需要执行ALTER DATABASE ARCHIVELOG语句,其操作步骤如下:
、关闭数据库
Shutdown
、重新启动实例,但不加载数据库
Startup mount
、使用ALTER DATABASE语句将数据库切换到归档模式,然后再打开数据,
Alter database archivelog;
Alter database open;
、使用如下的语句查看数据库是否已经处于归档模式
Archive log list;
、归档日志信息查询
当归档重做日志时,要确定归档日志文件的保存位置,这个保存位置叫做归档目标。
归档目标由初始化参数DB_RECOVERY_FILE_DEST决定,DBA可以为数据库设置多个归档目标,不同的归档咪表最好存放在不同的磁盘上。
归档目标的设置由设置初始化参数LOG_ARCHIVE_DEST_n来完成,其中n为1到10的整数,即可以为数据库指定1到10个归档目标,在进行归档时,Oracle会将重做日志组以相同的方式归档到每一个归档目标中。
设置归档目标时,既可以指定本地系统作为归档目标(LOCATION)也可以选择远程数据库作为归档目标(使用SERVIVE)
将归档目标指定为本地系统的语句为:
Alter system set log_archive_dest_1=’location=’f:\oradata\archive’;
使用SERVICE关键字将归档目标指定为远程数据库的语句为:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=’service=’QSY’ --QSY是一个远程备用服务器的服务名
、ARCHIVE LOG LIST命令
使用ARCHIVE LOG LIST命令,可以显示当前数据库的总体归档信息。
、数据字典视图查询
如果需要查询更详细的归档信息,需要对系统包含归档信息的数据字典视图进行查询。
可查询归档信息的数据字典视图
数据字典视图 |
包含信息 |
V$DATABASE |
查询数据库的归档模式 |
V$ARCHIVED_LOG |
包含控制文件中所有的已归档的日志信息 |
V$ARCHIVED_DEST |
包括所有的归档目标信息 |
V$ARCHIVED_PROCESSES |
包含已经启动的ARCn进程的状态信息 |
V$BACKUP_REDOLOG |
包含所有已经准备的归档日志信息 |
V$LOG |
包含所有重昨日志组的信息 |