oracle11g 联机重做日志、归档日志、日志文件组以及日志文件操作
一.归档方式
1.1 联机重做日志、归档日志概念
oracle数据库有联机重做日志,用于记录对数据库所做的修改,包括对表进行的DML(INSERT、UPDATE、DELETE)操作以及DDL操作、对系统所做的改变等。
数据库通过LGWR进程把日志缓冲区中的重做条目写入联机日志文件(redo01.log等)中。用户修改记录并commit后,数据库宕机,重新启动数据库,需要用到redo01.log等。对于DML操作, 通过前滚、后滚,只要用户提交了数据记录,就不会丢失,只要没有提交,就不会保存。
由于联机重做日志文件的重要性,因此以组的方式管理日志文件,数据库中至少有2个日志文件组,每个日志组中所有日志成员的内容完全相同,如果一个日志文件损坏,只要组内的其他日志文件仍然可用,该组依然对外提供日志操作,不会宕机。
oracle中日志文件分为在线日志文件(即联机重做日志)和归档日志两类。归档日志是对在线日志文件的历史备份
在线日志查看:
select * from V$LOGFILE;
- 1
1.2 工作模式
在线日志按照组来工作,每一个组有多个文件。日志组按照循环方式进行工作,在oracle中至少有2个日志组。当一个联机重做日志组1被写满时,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志组2写满的时候,又发生日志切换,去写联机重做日志组1,循环往复。
如果数据库处于非归档模式,联机重做日志在切换时就会丢弃。 而在归档模式下,当发生日志切换的时候, arch进程会把被切换的日志进行归档。例如,当前使用联机重做日志1被写满时,发生日志切换,开始写联机重做日志2,归档模式下,联机重做日志1的内容会被拷贝到另一个指定目录下。这个目录被称为归档目录,拷贝的文件被称为归档重做文件。
数据库在归档模式下运行时才可以进行灾难性恢复。(在生产环境中建议启用归档模式,若实际环境中
运行稳定、没有太多日志产生且对实时性要求不高,可采用逻辑备份方式,保证数据库安全)
注: Oracle提供的逻辑备份与恢复的命令有exp/imp,expdp/impdp,表级复制(create table
目标表 as select * from 源表)。Oracle逻辑备份没有支持增量备份;对数据恢复也是非一致性的。
所以一般都是用于数据迁移的工作。
查看归档模式:
方式一:
SELECT log_mode from v$database;
- 1
方式二:
在sqlplus中运行
archive log list
- 1
1.3 数据库恢复
非归档日志方式可避免实例故障,但无法避免介质故障,在此方式下,数据库只能实施冷备份;
归档日志方式产生归档日志,用户可以使用归档日志完全恢复数据库。
1.4 归档模式
(1)启用
关闭数据库:
shutdown immediate;
- 1
启动数据库到mount状态(控制文件已经打开,用户信息仍然不能查看):
startup mount;
- 1
配置归档模式并打开数据库:
alter database archivelog;
alter database open;
- 1
- 2
查看归档状态
archive log list
- 1
注: 存档终点,即联机日志切换时,被拷贝到此目录下
(2)查看归档文件被存放的路径以及存放文件的容量:
(3)手动进行日志切换:
alter system switch logfile;
- 1
(4)log_archive_dest参数,查看归档目录路径和状态:
(5)修改归档目录路径 log_archive_dest_n
alter system set log_archive_dest_1='location=D:\software\arch1\';
- 1
修改归档目录后,手动归档,原来的归档路径不再存储归档日志:
(6)设置多个归档目录,每个归档目录存储的内容是一样的
alter system set log_archive_dest_2='location=D:\software\arch2\';
- 1
alter system set log_archive_dest_3='location=D:\software\arch3\';
- 1
(7)修改归档目录状态 defer (表示不可用) enable(表示可用)
alter system set log_archive_dest_state_1='defer';
- 1
(8)从10g开始 log_archive_dest被废弃,只能使用log_archive_dest_n
1.5 关闭归档模式
调整数据库从归档模式到非归档模式,按照上诉步骤再执行一遍:
shutdown immediate;
startup mount;
alter database noarchivelog;
alter database open;
- 1
- 2
- 3
- 4
二.日志文件组
2.1联机日志文件组四种常见状态:
current:表示当前使用的联机日志文件组;
active:表示这个日志文件组中,所记录的重做记录所对应的内存中的脏数据块还没有被完全写入数据文件中,实例恢复时需要这组日志;(database buffer cache做了修改但还没有写到datafile的数据,只要没有写入数据文件,不管是否提交,都可以称为脏数据)
inactive:表示这个日志文件组中,所记录的重做记录所对应的内存中的脏数据块已经被写入到数据文件中,实例恢复时不需要这组日志;
unused:表示还没有被使用过
2.1联机日志文件组操作
(1)给日志文件组增加文件
alter database add logfile member 'D:\software\oracle\oradata\orcl\redo02a.log' to group 2;
- 1
对于日志文件组2,D:\SOFTWARE\ORACLE\ORADATA\ORCL\REDO02A.LOG和D:\SOFTWARE\ORACLE\ORADATA\ORCL\REDO02.LOG 文件大小和内容将会完全相同
(2)创建日志文件组
不同日志组的大小可以不同,但同一个日志组内所有日志文件大小必须相同
alter database add logfile group 4 'D:\software\oracle\oradata\orcl\redo04.log' size 10m;
- 1
(3)清除联机日志文件组
alter database clear logfile group 1;
- 1
清除联机日志组内所有成员,适用于日志文件组损坏了部分成员的情况,注意被清除的日志文件组必须视inactive状态,清除后的日志组状态变为unused