联机重做日志操作
接着昨天来学习一下关于redo log的操作。这些操作都是日常维护数据库时都需要用到的,所以需要记清楚。
一、创建联机重做日志
1、创建联机重做日志组
ALTER DATABASE ADD LOGFILE ('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500K;
ALTER DATABASE ADD GROUP 10 ('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500K;
注:组号必须在1和MAXLOGFILES之间,且不要跳跃使用,否则会耗费数据库控制文件中的空间。
2、创建联机重做日志成员
ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2b.rdo' TO GROUP 2;
ALTER DATABASE ADD LOGFILE MEMBER '/oracle/dbs/log2c.rdo' TO ('/oracle/dbs/log2a.rdo','/oracle/dbs/log2b.rdo');
注:指定组中所有成员也可以表示这个组。新建的日志成员状态为INVALID,首次使用时变成活动状态。
二、重定位 & 重命名
① 关闭数据库:SHUTDOWN
② 在操作系统中移动或重命名联机重做日志文件
③ 启动并装载数据库:STARTUP MOUNT
④ 使用RENAME语句
ALTER DATABASE RENAME FILE '/diska/logs/log1a.rdo','/diska/logs/log2a.rdo'
TO '/diskc/logs/log1c.rdo','/diskc/logs/log2c.rdo'
三、取消联机重做日志组成员
1、取消日志组
要注意:
① 至少需要保留两组联机重做日志文件
② 日志组状态为“非活动”时才可以取消,如果是“活动”的,则需要进行强制切换
③ 要确保日志组已经存档,可以查看V$LOG视图查看是否存档
ALTER DATABASE DROP LOGFILE GROUP 3;
在执行DROP之后要在操作系统中删除磁盘文件
2、取消联机重做日志成员
要注意:
① 可以取消原先对称的组中的成员,使其暂时不对称,但最好立即调整这种状况
② 实例需要至少两个有效联机重做日志文件,且不能取消最后一个有效成员,使用V$LOGFILE查看状态
③ 和取消组一样,需要成员为非活动状态,否则需要进行一次强制切换
④ 确保要取消的成员已经经过存档
ALTER DATABASE DROP LOGFILE MEMBER '/oracle/dbs/log3c.rdo';
四、强制切换日志
ALTER SYSTEM SWITCH LOGFILE;
五、校验重做日志文件中的块
设置DB_BLOCK_CHECKSUM初始化参数为TRUE,则对所有写到磁盘上的Oracle数据块进行校验,包括重做数日志块。
DB_BLOCK_CHECKSUM参数的默认值是FLASE
<具体原理未知>
注:允许校验会对系统产生额外的开销,并且降低数据库性能。需要监视数据库性能以判断校验的代价是否过重。
六、清除联机重做日志文件
在联机重做日志损坏时,可以使用CLEAR命令来初始化联机重做日志文件
但是要注意以下情况不能使用:
* 仅有两个日志组
* 受到损坏的重做日志文件属于当前组
ALTER DATABASE CLEAR LOGFILE GROUP 3;
ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 3;
注:清除了恢复备份所需的日志文件,则不能再进行恢复,Oracle将在警报文件中写入一条消息来描述不能恢复的备份。
注:若清除的日志可以将脱机表空间变成联机状态,则需要在语句中加上UNRECOVERABLE DATAFILE子句。
因为清除该日志后再也不能把脱机表空间变成联机状态,所以不得不撤销表空间或执行未完成的恢复过程。
七、查看联机重做日志信息
V$LOG:显示来自于控制文件的重做日志文件信息
V$LOGFILE:标识重做日志文件组及其成员的状态
V$LOG_HISTORY:包含日志历史信息