oracle 11g的日志文件和归档方式的相关操作
首先我们知道,日志文件在任何一个数据库中都是起着非常重要的作用。
日志文件存放在(以我的安装路径为例)D:\app\Administrator\oradata\orcl
一、联机重做日志
Oracle数据库有联机重做日志(联机:可以随时被使用 重做:redo),这个日志是记录对数据库所做的所有修改(言下之意就是查询不被记录在日志中),包括对表作的数据改变,对系统做的改变等。可以使用它,来维护数据的完整性,以及进行数据库的恢复,可以进行日志挖掘。
产生过程:①将用户所做的操作先记录到日志缓冲区成为一条一条的重做条目
② 通过LGWR这个进程将这些重做条目记录到重做日志这个硬盘上的文件中(联机日志文件)
举例:用户对数据库进行了DML修改,然后执行了commit操作,恰巧此时数据库宕机了,数据库的操作将会被保存下来,数据库再次启动时,有前滚、回滚两个操作,只要是用户commit的操作都不会丢失,但没有commit的操作也一定不会被保存。在这个过程中,之前所提到的联机重做日志文件将会被用到。
二、日志文件的分类
日志文件分为在线日志文件(=联机重做日志文件=联机日志文件)和归档日志文件(在线日志文件的历史备份)两类。归档日志文件是在线日志文件的历史备份。 由于在线日志文件是不停的来记录数据库的修改的,且其空间是有限的,我们就把联机日志文件中记录的东西备份到归档日志文件中。
三、日志组的含义
日志按照组来组织,每一个组里面有多个文件。日志组按照循环方式来工作,所以ORACLE中,至少应该有两个日志组,当一个联机重做日志组被写满的时候,就会发生日志切换,这时联机重做日志组2成为当前使用的日志,当联机重做日志组2写满的时 候,又会发生日志切换,去写联机重做日志组1,就这样反复进行。
四、数据库的两种运行方式
- 非归档模式 联机日志组在切换的时候该日志中所记录的日志会被丢弃,被新的日志记录所覆盖,旧的日志信息没有保留,则我们也不能恢复到旧的日志所反映的时间点。
- 归档模式 联机日志组在切换的时候该日志就会发生归档,如果使用该方式可以进行任意的灾难性恢复。
非归档日志方式可以避免实例故障(内存崩溃,计算机死机,数据库坏了,后台进程坏了),但无法避免介质故障(数据文件所在的物理磁盘坏掉了)。在此方式下,数据库只能实施冷备份
归档日志方式产生归档日志,用户可以使用归档日志完全恢复数据库
知识扩充:
冷备份(cold backup),也被称为离线备份,是指在关闭数据库并且数据库不能更新的状况下进行的数据库完整备份。冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外的位置的一种说法。对于备份Oracle信息而言,冷备份是最快和最安全的方法。
热备份是在数据库运行的情况下,采用archivelog mode方式备份数据的方法
举例说明
比如,当前在使用联机重做日志1,当1写满的时候,发生日志切换,开始写联机重做日志 2,这时联机重做日志1的内容会被拷贝(ARCH进程)到另外一个指定的目录下。这个目录叫做归档目录,拷贝的文件叫归档重做日志。
在图示中,备份旧的日志文件通常是一个庞大的工程,他与打开新的联机日志文件组是同时进行的。
五、操作示例
查看当前归档方式命令:环境:sqlplus 用户: conn / as sysdba
archive log list
– 注意是 archive !!!不是achieve
由非归档模式改为归档模式:
SQL> shutdown immediate; --关闭数据库,无论如何一定要等待其命令结束
--------------------
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount --启动数据库到mount状态
--------------------
ORACLE 例程已经启动。
Total System Global Area 1686925312 bytes
Fixed Size 2176368 bytes
Variable Size 1275071120 bytes
Database Buffers 402653184 bytes
Redo Buffers 7024640 bytes
数据库装载完毕。
SQL> alter database archivelog; --更改数据库为归档模式
--------------------
数据库已更改。
SQL> alter database open; -- 启动数据库
--------------------
数据库已更改。
SQL> archive log list; --查询当前数据库模式
-------------------------
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 96
下一个存档日志序列 98
当前日志序列 98
SQL> show parameter db_recovery; --可以查询存档重点地址与大小
-------------------------
NAME TYPE VALUE
-------- ---------- ------------
db_recovery_file_dest string D:\app\Administrator\flash_recovery_area
db_recovery_file_dest_size big integer 3912M
日志切换: .ARC就是归档日志文件
SQL> alter system switch logfile; --切换日志命令
------------------------
系统已更改。
由归档模式改为非归档模式:
SQL> shutdown immediate; --关闭数据库,无论如何一定要等待其命令结束
--------------------
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount --启动数据库到mount状态
--------------------
ORACLE 例程已经启动。
Total System Global Area 1686925312 bytes
Fixed Size 2176368 bytes
Variable Size 1275071120 bytes
Database Buffers 402653184 bytes
Redo Buffers 7024640 bytes
数据库装载完毕。
SQL> alter database noarchivelog; --更改数据库为归档模式
--------------------
数据库已更改。
SQL> alter database open; -- 启动数据库
--------------------
数据库已更改。
SQL> archive log list; --查询当前数据库模式
-------------------------
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 96
下一个存档日志序列 98
当前日志序列 98
SQL> show parameter db_recovery; --可以查询存档重点地址与大小
-------------------------
NAME TYPE VALUE
-------- ---------- ------------
db_recovery_file_dest string D:\app\Administrator\flash_recovery_area
db_recovery_file_dest_size big integer 3912M
修改归档模式下存档终点的位置:
①查看归档目录:
show parameter log_archive_dest ---查看归档目录
------------------------------
log_archive_dest string
log_archive_dest_1 string
log_archive_dest_2 string
log_archive_dest_3 string
log_archive_dest_4 string
log_archive_dest_state_4 string enable
log_archive_dest_state_3 string enable
log_archive_dest_state_2 string enable
log_archive_dest_state_1 string enable
-----
说明:log_archive_dest_n 是归档目录;
log_archive_dest_state_n 用来表示归档目录是否可用。可以通过设置参数enable或defer来决定
alter system set log_archive_dest_state_1 ='defer';
-- 该语句表示停止向这个位置归档
②修改归档模式下存档终点的位置到目录d:\arch1\
(存在多个归档目录,我们可以对多个目录设置不同的归档位置,一旦进行日志切换,每一个存档终点都会产生一份归档日志文件,前提是归档目录可用,log_archive_dest_state_n的值为enable)
alter system set log_archive_dest_1 ='location= d:\arch1\';
③ 切换日志就会在指定位置发现备份的归档日志文件啦
alter system switch logfile;
------------------------
系统已更改。
在前面我们查看了参数 show parameter log_archive_dest ; 我们会发现其中存在log_archive_dest 还存在 log_archive_dest_n,这里要说明的是 log_archive_dest 与log_archive_dest_n是无法一起使用的;从10g开始, log_archive_dest这个参数已经被废弃。
六、联机日志文件与联机日志文件组
联机日志文件是非常重要的,因为在数据库启动时候会读取联机日志文件,由于联机日志文件的重要性,因此应该以组的方式建立日志文件,数据库中至少要有两个日志文件组,同时每一个日志文件组至少要包含两个日志文件,每一个日志组里的所有的日志成员的内容都完全相同,如果一个日志文件损坏,只有组内的其他日志文件仍然可用,则该组仍然对外提供日志操作,不会宕机。
相关操作
1、查看联机日志组的相关文件:
select * from v$log ;
------
查询参数解释 group# 表示当前联机日志文件组的(编号), 可以看出一共有几组
status 状态,通常有四类常见的取值:
1,CURRENT:表示这是当前正在使用的联机日志文件组
2,ACTIVE:表示这个日志文件组中,所记录的重做记录所对应的内存中的脏数据块还没
有被完全写入到数据文件中。
3,INACTIVE:表示这个日志文件组中,所记录的重做记录所对应的内存中的脏数据块已
经被写入到数据文件中。
4,UNUSED:表示还没有被使用过。
2、从v$logfile中查看每一个联机日志文件的信息 日志文件位置信息以及其所属组
select * from v$logfile;
增加联机日志文件组中的文件:
alter database add logfile member
'D:\app\Administrator\oradata\orcl\redo02a.ora'
to group 2; --给组2增加文件redo02a.ora 此文件大小内容与同组文件完全相同
添加新的日志组:(不同日志组的太小可以不同,但同一日志组中的文件大小必须相同)
alter database add logfile group 4 'D:\app\Administrator\oradata\orcl\redo04.ora'
size 10m ; ---指明日志组中日志文件的大小