Oracle 据库包含两种日志操作模式:NONARCHIVELOG和ARCHIVELOG,当建立数据库时如果不指定日志操作模式,则默认日志操作模式为NONARCHIVELOG。
1、NONARCHIVELOG模式
非归档模式是指不保留重做记录的日志操作模式。这种模式只能适合于例程恢复(如断电),不适合于介质恢复。当日志处在NONARCHIVELOG模式时,如果进行日志切换,那么在不保留原有重做日志内容的情况下,日志组的新内容会直接覆盖其原有内容。特点:
1)、当检查点完成之后,后台进程LGWR进程可以覆盖原有重作日志内容。
2)、如果数据库备份之后重做日志的内容已经被覆盖,那么当数据文件出现介质失败时,数据库只能恢复到过去的某个完全备份点
3)、数据库处于OPEN状态时,不能够备份数据库
4)、执行数据库备份时,只能只能SHUTDOWN IMMEDIATE、SHUTDOWN NORMAL、SHUTDOWN TRANSACTIONAL关闭数据库。
5)、执行数据库备份时,必须备份所有的控制文件和数据文件。
2、ARCHIVELOG模式
归档模式是指保留重做日志历史记录的日志操作模式,这种模式适合于例程和介质恢复,当数据库处于归档模式时,后台进程LGWR会在日志切换的时候,后台进行ARCH会自动将重做日志的内容复制到归档日志文件中。特点:
1、可以在数据库处于OPEN状态备份数据库
2、出现介质失败是,除了SYSTEM表空间之外,其他表空间的数据文件可以在OPEN状态恢复。
3、数据库恢复可以执行完全恢复,也可以执行基于时间点的恢复。
二.改变日志操作模式
Oracle建议OLTP(online transaction Process)系统应采用ARCHIVELOG模式,数据仓库(data warehouse)系统采用NONARCHIVELOG。另外开发的时候可以采用NONARCHIVELOG,正式投入使用时使用ARCHIVELOG。
改变日志操作模式必须以SYSDBA或者SYSOPER身份执行,具体的操作如下:
1、检查日志操作模式
Sqlplus sys/manager@demo as sysdba
SQL>select log_mode from v$database;
2、关闭数据库
SQL>shutdown immediate;
SQL>startup mount;
3、改变日志操作模式
SQL>alter database archivelog;
SQL>alter databse open;
注意:从oracle 10g开始,数据库设置为archivelog模式后,ARCn进程自动启动,而之前的版本需要配置初始化参数log_archive_start=true;
SQL>ALTER SYSTEM SET log_archive_start=true SCOPE=spfile;.
三.配置其他归档参数
从oracle 10g开始,归档日志会存放在快速恢复区所对应的目录(对应初始化参数db_recovery_file_dest。如需要改变归档日志文件的位置或名称,需要进行修改配置参数。
1、配置归档日志文件的名称格式
初始化参数log_archive_format设置归档日志的名称格式,使用的通配符如下:
%s:日志序列号
%S:日志序列号(带前导0)
%t:重做线程编号
%T:重做线程编号(带前导0)
%d:数据库ID号
%r:RESETLOGS的ID值
注意:oracle 10g开始,%s、%t、%r是必须的,因为log_archive_format参数是静态的的,所以修改之后需要重启数据库。示例如下:
SQL>alter system set log_archive_format=’%s_%t_%r.log’ scope=spfile;
SQL>shutdown;
SQL>startup;
2、使用log_archive_dest_n配置归档的位置
初始化参数log_archive_dest_n用于指定多个归档日志的位置,n表示1到10的整数。使用这个参数不仅可以配置本地多个归档日志的位置,也可以配置远程归档位置。该参数与log_archive_dest(指定第一个位置)与log_archive_duplex_dest(指定第二个位置)的区别如下:
1)log_archive_dest_n可以配置本地的归档位置和远程的归档位置,而其他两个只能配置本地归档位置。
2)log_archive_dest_n可以配置10个归档位置,而其他两个只能配置最多两个归档位置。
3)log_archive_dest_n不能与其他两个同时使用。
当使用初始化参数log_archive_dest_n时,需要location选项指定本地目录。当配置远程归档位置时,需要使用service选项指定到备用数据库的网络服务名。
使用示例:
SQL>alter system set log_archive_dest_1=’location=C:\demo\log optional’;
SQL>alter system set log_archive_dest_2=’location=D:\demo\log mandatory’;
SQL>alter system set log_archive_dest_1=’service=standby’;(远程归档)
当使用初始化参数log_archive_dest_n配置归档位置时,可以在归档位置上指定optional或者mandatory选项。当指定mandatory选项时,还可以设置reopen属性。作用如下:
1)optional是默认的选项,表示无论归档是否成功,都可以覆盖重做日志
2)mandatory表示只有归档成功之后才能覆盖重做日志。
3)reopen 用于指定重新归档的时间间隔,默认值为300秒。注意reopen选项必须跟在mandatory选项后。
为了强制归档到特定位置,必须指定mandatory选项。下面以强制归档到目录D:\archivelog为例说明mandatory和optional的使用方法。
SQL>alter system set log_archive_dest_1='location=c:\archivelog optional';
SQL>alter system set log_archive_dest_2='location=c:\archivelog mandatory';
3.使用log_archive_dest_state_n控制归档的位置
如果归档的位置出现磁盘空间不够或者出现损坏,那么归档将失败,为了解决这个问题,可能需要临时禁用相应的规定位置,而这个参数正好可以用来控制该规定日志位置是否可用。Enable表示可用(默认值),而defer表示不可用。示例:
SQL>alter system set log_archive_dest_state_2=defer;
上述例子表示禁用了第二个归档位置后,当执行日志切换时,不会在对应的归档位置生成归档日志。
4.使用log_archive_max_processes控制归档进程的个数
默认情况下,oracle会启动两个归档进程,示例:
SQL>alter system set log_archive_max_processes=4;
5.使用log_archive_min_succeed_dest控制最小日志归档成功个数
SQL>alter system set log_archive_min_succeed_dest=2;
执行以上语句之后,如果本地生成的归档日志数小于两个,就不能覆盖重做日志。
6.使用log_archive_dest配置归档位置
如果只需要将归档日志存放到本地目录,则可以使用log_archive_dest)或log_archive_duplex_dest。注:这两个参数是为了与早期版本兼容而留的,并且他们不能与log_archive_dest_n或db_recovery_file_dest同时使用。
四。显示归档信息
1、使用archive log list
2、显示归档日志信息
SQL>select name,sequence#,first_changed# from v$archived_log;
3、显示归档日志的位置
SQL>select dest_name,destination,status from v$archive_dest;
4、显示日志历史信息
SQL>select * from v$loghist;
5、显示归档进程信息
SQL>select * from v$archive_processes;
6、显示日志操作模式
SQL>select name,log_mode from v$database;