存档日志的管理(一)
相较redo log来说,archivelog对于系统的功用可能会更多一些。很多Oracle的特性都需要archivelog的支持才能得到应用。当然redolog绝对要比archivelog要重要的多,可以没有archivelog的DB,但不可能没有redolog。OK,看一下archivelog的性质:
一、存档日志概念
已填满的联机重做日志文件组可以保存到一个或多个脱机目的地,这些日志就是存档日志。必须要将DATABASE设定ARCHIVELOG模式才可以使用存档,可以选择自动存档和手动存档两种方式。
存档日志与被复制的联机重做日志是完全相同的,并且可以保留组的唯一日志序号。当ARCn进程进行存档时,不允许日志写入进程LGWR的使用,也不能重写联机重做日志组,直到存档完成为止。
二、ARCHIVELOG模式
1、NOARCHIVELOG模式
① 当运行在NOARCHIVELOG模式时,已填满的组不需要存档,因此在日志切换后,已填充的组可以用于LGWR的重用。
② 要存档NOARCHIVELOG模式下的已填充组,需要进行额外的管理操作,如果不能接收任何数据丢失,那必须采用ARCHIVELOG模式。
③ NOARCHIVELOG模式只能保护数据库免于实例的失败,但不能避免介质失败。也就是说,只能将数据库恢复到最近的完整备份,而不能恢复后来的事务。
④ NOARCHIVELOG模式下,不能进行联机表空间备份。所以在这种模式下,需要定时进行数据库的备份。
2、ARCHIVELOG模式
使用ARCHIVELOG模式有以下好处:
① 数据库备份时联机重做日志文件也一起备份,可以保证在操作系统或磁盘失败时间后,恢复所有已提交的事务。
② 可以使用 打开数据库时以及正常系统使用中所获得的备份。
③ 将已存档日志用于备份数据库,可以将当前的备用数据库与原来的数据库一起保留
下图说明了归档的逻辑结构:
三、控制存档模式
1、设置初始存档模式
可以在CREATE DATABASE 语句中设置数据库的初始归档模式。
一般若没有指定,都是NOARCHIVELOG模式,一开始没有什么必要指定,可以在创建后数据库之后进行修改。
2、改变归档模式
将NOARCHIVELOG转换到ARCHIVELOG:
① SHUTDOWN
② 备份数据库
③ 修改初始化参数(是否允许自动存档以及存档日志位置)
④ STARTUP MOUNT
⑤ ALTER DATABASE ARCHIVELOG;
⑥ ALTER DATABASE OPEN;
3、允许自动存档方式
① 实例启动时
修改初始化参数LOG_ARCHIVE_START = TRUE (下次启动时生效)
② 实例启动后
ALTER SYSTEM ARCHIVE LOG START;
③ 存档进程的数目
设置LOG_ARCHIVE_MAX_PROCESSES参数,最多可设置10个ARCn进程
也可以动态修改 ALTER SYSTEM LOG_ARCHIVE_MAX_PROCESSES=3;
注:一般没有必要修改LOG_ARCHIVE_MAX_PROCESSES参数的默认值1,因为Oracle会根据系统工作量适当调配ARCn进程
4、禁止自动存档
一旦禁止自动存档,则必须及时手动存档,否则联机重做日志文件组全部写满时,数据库会暂时中断,直到存档位置。
① 实例启动时
LOG_ARCHIVE_START = FALSE
② 实例启动后
ALTER SYSTEM ARCHIVE LOG STOP;
注:当正在存档时禁止,则ARCn会完成当前组的存档操作,但不进行下一个日志组的存档。
5、执行手动存档
不管是否允许自动存档,都可以进行手动存档。
ALTER SYSTEM ARCHIVE ALL;
该会存档所有未存档的日志文件。
四、指定存档目标位置
1、使用LOG_ARCHIVE_DEST_n定义
① 本地路径指定
LOG_ARCHIVE_DEST_1 = 'LOCATION = /disk1/archive'
LOG_ARCHIVE_DEST_2 = 'LOCATION = /disk2/archive'
LOG_ARCHIVE_DEST_3 = 'LOCATION = /disk3/archive'
② 远程存档
LOG_ARCHIVE_DEST_1 = 'SERVICE = standby1'
注:standby1是在tnsname.ora文件中定义的网络服务名
③ 定义文件名
LOG_ARCHIVE_FORMAT = arch%s.arc
注:%s作为序号,%t包含线程号,%S和%T以0补充文件名左边的空白
2、使用LOG_ARCHIVE_DEST和LOG_ARCHIVE_DUPLEX_DEST
这个指定方法最多指定两个位置,分别是由LOG_ARCHIVE_DEST指定的主存档位置,以及LOG_ARCHIVE_DUPLEX_DEST指定的辅助存档位置
举例:
LOG_ARCHIVE_DEST = '/disk1/archive'
LOG_ARCHIVE_DUPLEX_DEST = '/disk2/archive'
LOG_ARCHIVE_FORMAT = arch_t%_%s.arc
3、存档位置的状态
通过查询v$archive_dest视图来查看状态