1、oracle 归档日志管理在 Oracle 中,数据一般是存放在数据文件中,不过数据库与 Oracle 最大的区别之一就是数据库可以在数据出错的时候进行恢复。这个也就是我们常见的Oracle 中的重做日志(REDO FILE)的功能了。在重做日志分成 2 部分,一个是在线重做日志文件,另外一个就是归档日志文件。这里不详细说明在线重做日志,而是说一下归档日志(Archive Log)。在线重做日志大小毕竟是有限的,当都写满了的时候,就面临着 2 个选择,第一个就是把以前在线重做日志从头擦除开始继续写,第二种就是把以前的在线重做日志先进行备份,然后对被备份的日志擦除开始写新的在线 Redo Fil
2、e。这种备份的在线重做日志就是归档日志。而数据库如果采用这种生成归档日志的模式的话,就是归档日志模式(ARCHIVELOG 模式),反之如果不生成归档日志,就是非归档日志模式(NOARCHIVELOG 模式)。有了归档日志有什么好处了。比如在这个月 1 号的时候备份了一次数据,然后过了 10 天,这 10 天生成了成百上千个在线重做日志,突然发现其中有一个数据磁盘出问题了,不能用了,那我该如何是好呢。如果没有采用归档日志,那么实际上磁盘中只会有几个最新的在线重做日志。那么我只能要不然把出问题的数据磁盘上所占据的表空间都删除掉。但是如果是 SYSTEM 表空间所涉及的磁盘出错,就没办法这么做了,
3、只能用第二种方法。那第二种方法就是把 1 号备份的数据拿出来恢复。那么 1 号到 10 号之间的 10天的数据都丢了,如果是关键系统,比如证券金融什么的系统,就要让你赔钱赔死掉。但是如果有了归档日志,那么你这 10 天的重做日志都会存放起来,那么 DBA 首先把 1 号的备份数据恢复,然后再拿这 10 天的 REDO 日志来进行一次数据操作重放,那么就可以完全恢复最新的数据库,不会有什么后果了。在软件开发的时候,由于测试服务器的配置有限,特别是磁盘空间有限,所以有可能要限制 REDO 文件的大小,有可能就把系统设置为 NOARCHIVELOG 模式了。但是在实际的生产运行环境下,基本上一定要使
4、用 ARCHIVELOG 模式,否则万一出了问题,真是哭都来不及了。有人可能会怕归档日志造成性能损失。其实这个完全是杞人忧天的,归档日志只是做一个备份,其实也就是多耗一些磁盘空间而已。在当前的软件系统中,硬盘的存储容量成本已经属于低到可以忽略的地步,而最重要的是数据库的安全。DBA 的任务本来就是确保数据的安全,如果连安全都保证不了,那点微乎其微的性能提高又有什么用呢。归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于 ARCHIVELOG 模式并进行日志切换式,后台进程ARCH 会将重做日志的内容保存到归档日志中.当数据库出现介
5、质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库.日志操作模式:ARCHIVELOG NOARCHIVELOG1,改变日志操作模式:检查当前日志操作模式SELECT log_mode from v$database;关闭数据库,然后装载数据库SHUTDOWN IMMEDIATESTARTUP MOUNT改变日志操作模式,然后打开数据库ALTER DATABASE ARCHIVELOG;ALTER DATABASE OPEN;2,执行手工归档从 oracle database 10g 开始,当将日志操作模式转变未 ARCHIVELOG 模式时,oracle 会自动启动 ARCH
6、进程.如果要使用手工归档.那么在改变日志操作模式时必须使用命令 ALTER DATABASE ARCHIVELOG MANUAL.需要注意,使用手工归档方式,数据库管理员必须手工执行归档命令.如果没有执行手工归档命令,日志组的原有内容将不能被覆盖.ALTER DATABASE ARCHIVELOG MANUAL 命令是为了与先前的版本兼容而保留的,.将来的 oracle 版本会淘汰该命令,使用手工归档方式是,数据库管理员可以执行以下命令归档重做日志:SLTER SYSTEM ARCHIVELOG ALL;3,配置归档进程初始化参数 LOG_ARCHIVE_MAX_PROCESSES 用于指定例
7、程初始启动的最大归档进程个数,当将数据库转变为 ARCHIVELOG 模式时,默认情况下 oracle 会自动启动两个归档进程.通过改变初始化参数 LOG_ARCHIVE_MAX_PROCESS 的值,可以动态地增加或降低归档进程的个数:ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3;配置归档位置和文件格式当数据库处于 ARCHIVELOG 模式时,如果进行日志切换,后台进程将自动生成归档日志,归档日志的默认位置为%oracle_home%rdbms,在 oracle database 10g 中,归档日志的默认文件格式为 ARC%S_%R.%T.为了
8、改变归档日志的位置和名称格式,必须改变相应的初始化参数,1,初始化参数 LOG_ARCHIVE_FORMAT 用于指定归档日志的文件名格式,设置该初始化参数时,可以指定以下匹配符:%s: 日志序列号:%S: 日志序列号(带有前导 0)%t: 重做线程编号.%T: 重做线程编号(带有前导 0)%a: 活动 ID 号%d: 数据库 ID 号%r RESETLOGS 的 ID 值.从 10g 开始,配置归档日志文件格式时,必须带有%s,%t 和%r 匹配符,配置了归档文件格式后,必须重启数据库.2,使用 LOG_ARCHIVE_DEST 配置归档位置如果不使用备用数据库,只需要将归档日志存放到本地目
9、录.配置本地归档位置可以使用初始化参数 LOG_ARCHIVE_DEST 和 LOG_ARCHIVE_DUPLEX_DEST,其中,第一个参数用于设置第一个归档位置,第二个参数用于指定第二个归档位置.ALTER SYSTEM SET log_archive_dest=d:demoarchive1;ALTER SYSTEM SET log_archive_duplex_dest=d:demoarchive2;3,使用 LOG_ARCHIVE_DEST_n 配置多个归档位置.初始化参数 LOG_ARCHIVE_DEST_n 用于指定多个归档位置,该参数最多可以指定10 个归档位置.通过使用初始化参
10、数 LOG_ARCHIVE_DEST_n,不仅可以配置本地归档位置,还可以配置远程归档位置.如果既要在主节点上生成归档日志,又要将归档日志传递到备用节点,那么必须使用参数 LOG_ARCHIVE_DEST_n.该参数与 LOG_ARCHIVE_DEST 具有如下区别;初始化参数 LOG_ARCHIVE_DEST_n 可以配置本地归档位置和远程归档位置,而初始化参数 LOG_ARCHIVE_DEST 和 LOG_ARCHIVE_DUPLEX_DEST 只能配置本地归档位置.初始化参数 LOG_ARCHIVE_DEST_n 可以配置多达 10 个归档位置,而初始化参数LOG_ARCHIVE_DES
11、T 和 LOG_ARCHIVE_DUPLEX_DEST 最多只能配置两个归档位置.初始化参数 LOG_ARCHIVE_DEST_n 不能与初始化参数 LOG_ARCHIVE_DEST 和LOG_ARCHIVE_DUPLEX_DEST 同时使用.因为初始化参数 LOG_ARCHIVE_DEST_n 不能与初始化参数 LOG_ARCHIVE_DEST 和LOG_ARCHIVE_DUPLEX_DEST 同时使用,所以必须禁用初始化参数LOG_ARCHVE_DEST 和 LOG_ARCHIVE_DUPLEX_DEST.当使用初始化参数LOG_ARCHIVE_DEST_n 配置本地归档位置时,需要指定
12、LOCALTION 选项.当配置远程归档位置时,需要指定 SERVICE 选项.示例如下:ALTER SYSTEM SET log_archive_duplex_dest=;ALTER SYSTEM SET log_archive_dest=;ALTER SYSTEM SET log_archive_dest_1=location=d:demoarchive1;ALTER SYSTEM SET log_archive_dest_2=location=d:demoarchive2;ALTER SYSTEM SET log_archive_dest_3=location=d:demoarchive
13、3;ALTER SYSTEM SET log_archive_dest_4=service=standby;配置远程归档位置时,SERVICE 选项需要指定远程数据库的网络服务名(在tnsnames.ora 文件中配置)4,使用 LOG_ARCHIVE_DEST_n 选项使用初始化参数 LOG_ARCHIVE_DEST_n 配置归档位置时,可以在归档位置上指定OPTIONAL 或 MANDATORY 选项.指定 MANDATORY 选项时,可以设置 REOPEN 属性.OPTIONAL:该选项是默认选项.使用该选项时,无论归档是否成功,都可以覆盖重做日志.MANDATORY:强制归档.使用该选
14、项时,只有在归档成功之后,重做日志才能被覆盖.REOPEN:该属性用于指定重新归档的时间间隔,默认值为 300 秒,必须跟在MANDATORY 后.例:Alter system set log_archive_dest_1=location=d:demoarchive1 mandatory;Alter system set log_archive_dest_2=location=d:demoarchive2 mandatory reopen=500;Alter system set log_archive_dest_3=location=d:demoarchive3 optional;5,控制
15、本地归档成功的最小个数.使用初始化参数 LOG_ARCHIVE_MIN_SUCCEED_DEST 控制本地归档的最小成功个数Alter system set log_archive_min_succeed_dest=2;6,使用初始化参数 LOG_ARCHIVE_DEST_STATE_n 控制归档位置的可用性.设置该参数为 ENABLE(默认值),表示会激活相应的归档位置;设置该参数为 DEFER,表示禁用相应归档位置.当归档日志所在磁盘损坏或填满时,DBA 需要暂时禁用该归档位置.Alter system set log_archive_dest_state_3=defer;(禁用)Alte
16、r system set log_archive_dest_state_3=enable;(启用)显示归档日志信息1,使用 ARCHIVE LOG LIST 命令可以显示日志操作模式,归档位置,自动归档机器要归档的日志序列号等信息.2 显示日志操作模式SELECT name,log_mode FROM v$database;3,显示归档日志信息.Col name format a40Select name, swquence#, first_change# FROM v$archived_log;Name 用于表示归档日志文件名,sequence#用于表示归档日志对应的日志序列号,firs_c
17、hange#用于标识归档日志的起始 SCN 值.4 执行介质恢复时,需要使用归档日志文件,此四必须准确定位归档日志的存放位置.通过查询动态性能视图 v$archive_dest 可以取得归档日志所在目录.SELECT destination FROM v$archive dest;5,显示日志历史信息SELECT * FROM v$loghist;THREAD#用于标识重做线程号,SEQUNCE#用于标识日志序列号,FIRST_CHANGE#用于标识日志序列号对应的起始 SCN 值,FIRST_TIME 用于标识起始 SCN 的发生时间.SWICTH_CHANGE#用于标识日志切换的 SCN 值.6.显示归档进程信息.进行日志切换时,ARCH 进程会自动将重做日志内容复制到归档日志中,为了加快归档速度,应该启用多个 ARCH 进程.通过查询动态性能视图V$ARCHIVE_PROCESSES 可以显示所有归档进程的信息!SELECT * FROM v$archive_processes;Porcess 用于标识 ARCH 进程的编号,status 用于标识 ARCH 进程的状态(ACTIVE:活动,STOPPED:未启动),log_sequence 用于标识正在进行归档的日志序列号,state 用于标识 ARCH 进程的工作状态相关文章: