现在的位置: 首页 > 数据库 > 正文

Oracle日志归档模式设置

2014年11月16日 数据库 ⁄ 共 2851字 暂无评论 ⁄ 阅读 1,046 次
文章目录

在归档模式下,当LGWR后台进程的写操作从一个重做日志组切换到另一个重做日志组之后,归档写后台进程(ARCH)就会将原来的重做日志文件中的信息复制到归档日志文件中。在复制完成之前,该组重做日志不可用。

在归档模式下数据库崩溃后可做到完全恢复,且备份时不需要关闭数据库,恢复也更灵活,可恢复到特定时间点、SCN号特定归档日志末尾。

将数据库设为归档模式步骤

1)以SYSDBA身份登录Oracle数据库;

2)查看数据库归档信息,使用命令archive log list;

3)关闭数据库,使用命令shutdown immediate;

4)以加载模式启动数据库,使用命令startup mount;

5)更改归档模式,使用命令alter database archivelog;

6)打开数据库,使用命令alter database open;

7)检查是否已更新,使用命令archive log list;

8)备份初始数据库(冷备份,关闭数据库拷贝文件开启数据库);

归档后台进程(ARCn)

在Oracle 10g之前版本中,将数据库设置为归档模式后,Oracle系统并不自动启动归档后台进程,即不会自动把重做日志写入归档日志。这会造成当重做日志写满后,LGWR等待,数据库挂起,以等待手动归档。当然,在10g之后版本自动启用归档后台进程,所以就不需要再改了。手动归档命令如下:

alter system archive log current;

当然,即使在自动归档模式下,DBA也可以使用该命令将处于非活动状态的重做日志归档出去。

启动自动归档后台进程

注:仅针对10g以前版本,因为从10g开始自动启动归档后台进程。

方法一:

使用Oracle命令:alter system archive log start;

然而,这种方法当数据库重启时,归档后台进程并不自动启动,还需要手动使用命令。

方法二:

修改参数文件,将log_archive_start参数修改为true,具体步骤为:

1)查看log_archive_start参数是否为true,使用命令:show parameter log_archive_start;

2)若为false则更改,使用命令:alter system set log_archive_start = true scope = spfile;

3)关闭重启数据库,使用命令shutdown immediate和startup;

多进程归档

LGWR读内存写外存(磁盘),而ARCn读外存写外存,一般情况下内存存取速度是外存的1000~100000倍。所以,当DML频繁时可能出现ARCn读写跟不上LGWR,即重做日志切换一圈了但ARCn还没有将之前的重做日志归档完成。这就造成LGWR等待,数据库挂起。为解决这个问题可以启动多个归档后台进程,主要通过修改参数log_archive_max_processes来决定,具体如下:

1)查看当前参数值,使用命令:show parameter log_archive_max_processes;

2)修改参数值,使用命令:alter system set log_archive_max_processes = 3(可为其他值);

多备份归档

若仅有一个归档日志,一旦日志损坏将无法做到全部恢复。为规避风险,可以将多个完全相同的归档日志写到不同的物理磁盘(最好在不同的I/O控制器上)。可以通过修改参数文件中log_archive_dest_n参数来确定多备份个数,具体如下:

1)以SYSDBA身份登录查看当前归档日志文件路径,使用命令:show parameter log_archive_dest_;

若log_archive_dest_n(n为1、2…)都为空,即没有设置归档日志文件路径。

2)设置归档日志文件路径,使用命令:

alter system set log_archive_dest_1 = “LOCATION=path mandatory”;

其中,LOCATION表示归档日志文件存放在本地磁盘,path是归档日志文件的物理路径(目录),mandatory表示该目录下归档日志文件是强制性的,即该目录下归档日志没有写成功之前,所对应的重做日志不可覆盖使用。

查看是否设置成功可使用命令:show parameter log_archive_dest_1。

同样,可通过该方法设置其他备份日志的存放路径。若省略mandatory(默认使用optional)或替换为optional则表示该目录下归档日志即使没有写成功,对应的重做日志也可以覆盖重用。

3)查看所有多备份归档日志信息可以使用数据字典v$archive_dest,语句如下:

select destination,binding,target,status from v$archive_dest;

当然,当前重做日志文件还没有写满,是不会产生归档日志的。想要产生可以通过切换重做日志,使用语句如下:

alter system switch logfile;

归档日志最低成功数

在多备份情况下虽然规避了一定的风险,然后若只有一个mandatory时,且该备份损坏而其他备份不完全则也可能造成数据恢复不完全。要规避这个风险,可以设置参数log_archive_min_succeed_dest,该参数限定最低成功版本数,具体使用如下:

1)查看当前参数值,使用命令:show parameter log_archive_min_succeed_dest;

2)修改参数值,使用命令:alter system set log_archive_min_succeed_dest = 2;

强制归档日志所在磁盘损坏

在设置多备份归档时,我们可以设置mandatory强制归档日志成功。但如果该磁盘损坏,Oracle系统仍强制该归档日志成功,就会造成数据库挂起。这时,我们可以设置参数log_archive_dest_state_n来设定特定归档日志状态为defer(当归档日志物理路径被设为该状态则Oracle不会对这个路径进行归档操作)来解决这一问题,具体方法如下:

1)查看当前备份可用性,使用命令:show parameter log_archive_dest_;

在结果中我们可以看到哪个备份是mandatory的,以及其state是否是enable可用的。当然,我们也可以通过动态视图v$archive_dest来查看备份是否可用,使用命令:select destination,binding,target,status from v$archive_dest,其中ACTIVE表示可用,而INACTIVE表示不可用。

2)更改归档日志为延迟状态,使用命令:alter system set log_archive_dest_state_1 = defer;

3)defer状态是一个临时维护状态,当磁盘修复后可再转为enable可用状态,并手工恢复丢失的归档文件。

声明:该笔记转载自《Oracle DBA培训教程》,仅用于个人学习,若侵犯到您的版权敬请告知!

» 声明:本站文章源于个人经验总结或书籍、互联网转载,内容仅用于个人学习,请勿转载,否则后果自负!

给我留言

留言无头像?