一、目标:
-
理解oracle11g的归档和非归档方式的含义
-
会调整oracle的归档方式
-
掌握oracle11g中联机日志、联机日志组的相关操作
-
区别9i和10g、11g在归档位置的初始化参数设置上的不同
-
会从相关视图中查看日志文件、日志文件组、归档信息
二、日志文件的概念1
1、Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,包括对表作的数据改变,对系统做的改变等。可以使用它,来维护数据的完整性,以及进行数据库的恢复,可以进行日志挖掘(logmnr)。
对数据库所做的修改,先写入到日志缓冲区中,再通过LGWR进程,将缓冲区的重做条目, 写入到redo01.log,red02.log,redo03.log中(即硬盘中)
(1)用户修改了记录,然后commit,之后数据库宕机了,所以我们需要重启数据库,可能用到redo01.log文件
(2)这中间涉及到的概念,数据库启动时,有前滚、回滚操作
(3)可以达到的效果是:对于DML操作而言,只要用户commit的记录,都不会丢失;只要是用户没有commit的记录,都不被保存。
例子:
A、SQL>update sutdent set sage=sage+10 where sno <1000;
commit;
宕机了,重新打开数据库,发现:保存下来了提交的数据。
B、SQL>update sutdent set sage=sage+10 where sno >1000;
宕机了,重新打开数据库,发现:没有保存。
含义:联机重做日志文件=联机日志文件=在线日志文件
2、日志文件分为在线日志文件和归档日志文件两类。
3、归档日志文件是在线日志文件的历史备份。
三、日志文件的概念2——联机日志文件组(redo01,redo02,redo03为一个组,循环覆盖使用)
日志按照组来组织,每一个组里面有多个文件。日志组按照循环方式来工作,所以ORACLE中,至少应该有两个日志组。
当一个联机重做日志组被写满的时候,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志组2写满的时 候,又会发生日志切换,去写联机重做日志组1,就这样反复进行。
四、日志文件的概念3——归档日志模式和非归档日志模式
1、如果数据库处于非归档模式,联机日志在切换时就会丢弃.
2、而在归档模式下,当发生日志切换的时候,被切换的日志会进行归档。(ARCH进程完成)
比如,当前在使用联机重做日志1,当1写满的时候,发生日志切换,开始写联机重做日志 2,这时联机重做日志1的内容会被拷贝到另外一个指定的目录下。这个目录叫做归档目录,拷贝的文件叫归档重做日志。
3、数据库使用归档方式运行时才可以进行灾难性恢复。
五、数据库的归档方式
1、Oracle 数据库可以运行在两种归档方式:
(1)非归档日志方式——非归档日志方式可以避免实例故障,但无法避免介质故障。在此方式下,数据库只能实施冷备份
实例故障:内存+进程=实例,如果内存或进程出现问题,导致数据库问题,即为实例故障【如果中间把数据库shutdown abort,导致数据库无法启动,是否属于实例故障】
介质故障:硬盘损坏
(2)归档日志方式———归档日志方式产生归档日志,用户可以使用归档日志完全恢复数据库——(可以处理任何故障),可以实现对任意情况的恢复
例子:
数据库从2020年7月1日开始运行,一直运行到2020年7月16日;突然有一个要求:让管理员把数据库恢复到7月10号 12:00:00
(1)如果在归档模式,而且归档日志完整的话,可以实现上述要求
(2)如果在非归档模式,无法实现上述要求,只能进行冷备份
2、归档日志方式下数据库的工作原理:
(1)ARCH进程进行归档
3、配置归档日志方式
(1)查看当前数据库的归档方式,以及归档位置
(2)SQL>archive log list
(3)改变非归档模式到归档模式:
1)SQL>SHUTDOWN NORMAL/IMMEDIATE;
2)SQL>START MOUNT;
3)SQL>ALTER DATABASE ARCHIVELOG;
4)SQL>ALTER DATABASE OPEN;
使得数据库从归档模式调整到非归档模式,和上面步骤一样。
(4)查看归档路径:SQL> show parameter db_recovery_file_dest;【默认值,后面可以手动更改位置】
闪回区和归档日志区在同一个大目录下
(5)手动进行归档日志切换
SQL>alter system switch logfile;——随时把当前的归档日志创建到新日志中
再执行
(6)更改归档到非归档
SQL>ALTER DATABASE ARCHIVELOG;
4、归档日志位置的设置
SQL> show parameter log_archive_dest;
修改此处的value值,则可以改变归档日志的存放位置
SQL>alter system set log_archive_dest_1='location=/data/arch1/';
手动进行归档日志
alter system switch logfile;
并查看ls -rlt /data/arch1发现已经产生了新的归档日志了。
根据上上图,可以看到有很多log_archive_dest位置可以选择
再更改位置2,写入/data/arch2中
再创建log_archive_dest_4
同时查看1,2,4的文件,发现同一个log归档日志文件在多个路径中
所以,由上述得出结论,log_archive_dest_*,是为了将同一个归档日志文件存储于多处
5、归档日志位置的state状态设置
(1)SQL> show parameter log_archive_dest_state;——如果这些位置值不是enable,而是,那么为不可用,则无法对此位置进行设置路径
(2)SQL>alter system set log_archive_dest_state_10='defer';
此时给log_archive_dest_10进行设置路径location=/data/arch10,最终显示arch1中有新增数据,arch10中没有
6、log_archive_start和LOG_ARCHIVE_DEST
(1)早期的初始化参数log_archive_start,已经不起作用了。
就是说:从Oracle10g开始,log_archive_start参数已经被废弃,只要启动数据库的归档模式,Oracle就会启用自动归档,这避免了10g以前由于用户疏忽所带来的一系列问题。
(2)早期的初始化参数LOG_ARCHIVE_DEST(name) ,已经不起作用了。
就是说:从Oracle10g开始, LOG_ARCHIVE_DEST参数已经被废弃。 参数log_archive_dest_state_1=‘defer’; 表示停止向log_archive_dest_1这个归档位置归档日志。
注:此处的LOG_ARCHIVE_DEST是指show paramter log_archive_dest 中的第一行参数
六、联机日志文件和联机日志文件组
1、由于联机日志文件的重要性,因此应该以组的方式建立日志文件。
(1)数据库中至少要有两个日志文件组;
(2)同时每一个日志文件组至少要包含两个日志文件;
(3)每一个日志组里的所有的日志成员的内容都完全相同,如果一个日志文件损坏,只有组内的其他日志文件仍然可用,则该组仍然对外提供日志操作,不会宕机。
2、查看日志文件和日志文件组的相关信息
(1)SQL>select * from v$logfile;——查看每一个联机日志文件的信息。【SQL>select * from v$controlfile;】
(2)查看日志文件组(四种状态)——联机日志文件组有四种常见状态(从v$log中查看):
-
CURRENT【当前使用的组】:表示这是当前正在使用的联机日志文件组
-
ACTIVE【活动状态】:表示这个日志文件组中,所记录的重做记录所对应的内存中的脏数据块【先在内存中修改的数据】还没有被完全写入到数据文件中。
-
INACTIVE【不活动状态】:表示这个日志文件组中,所记录的重做记录所对应的内存中的脏数据块已经被写入到数据文件中。
-
UNUSED:表示还没有被使用过。
SQL> select * from v$log;
3、如何增加日志文件组、给文件组增加日志文件
(1)给一个日志组增加一个文件
SQL>alter database add logfile member '/data/u01/app/oracle/oradata/orcl/redo02_2.log' to group2;
注:redo02_2.log和redo02.log的内容完全一样,如果redo02.log损坏,redo02_02仍然可以使用;
(2)创建一个新的日志组
SQL>alter database add logfile group 4 '/data/u01/app/oracle/oradata/orcl/redo04.log' size 40m;
此处,使用impdp导入数据,可以看到active的情况
(3)不同日志组可以不同大小,但是同一个组内的所有日志文件必须同样大小。
4、清除联机日志文件
(1)使用alter database clear logfile group <group号>;
(2)可以清除联机日志文件组内的所有成员,适用于日志文件组损坏了部分成员的情况,
(3)被清除的日志组必须是INACTIVE状态,
(4)清除后的日志组的状态变成UNUSED。
七、自动归档和手动归档
1、数据库的日志归档方式有两种:
(1)手动归档允许用户手动归档非活动日志文件文件的已填充组,
SQL>alter system switch logfile;
(2)自动归档
2、可以通过数据字典视图查看归档日志信息
V$ARCHIVE_DEST - 显示当前所有归档日志存储位置及其状态
V$ARCHIVE_LOG - 显示历史归档日志信息
文章评论