1.日志切换和检查点 

数据库管理员可以根据管理和维护的需要,在任何时候强制性地进行重做日志切换,也可以强制性地产生检查点。 

强制性产生重做日志切换的命令为:ALTER SYSTEM SWITCH LOGFILE 

强制性产生检查点的命令为:ALTER SYSTEM CHECKPOINT 

也可以通过设置FAST_START_MTTR_TARGET参数方式来强制产生检查点,其参数设置如下: 

FAST_START_MTTR_TARGET=900 

单位是秒,以上的参数的含义是:实例恢复的时间不会超过900秒。 

1) 获得数据库中有多少个重做日志组,每个组中有多少个成员及它们的大小和状态等信息 

SQL>select group#,sequence#,members,bytes,status,archived from v$log; 

2) 获得数据库中每个重做日志组的每个成员所在的目录和文件名及它们的状态等信息 

SQL>select * from v$logfile; 

2.添加和删除联机重做日志文件组 

创建新的重做日志组的SQL命令格式如下: 

ALTER DATABASE [数据库名] 

 ADD LOGFILE [GROUP 正整数] 文件名 

 [, [GROUP 正整数] 文件名] 。。。] 

 如:SQL>alter database add logfile (‘E:\Disk3\redo04a.log’,’E:\Disk6\redo04b.log’) size 15M; 

删除重做日志组的SQL命令的格式如下: 

ALTER DATABASE [数据库名] 

 DROP LOGFILE {GROUP 正整数|(‘文件名’[,’文件名’]。。。)} 

 [, {GROUP正整数| (‘文件名’[, ‘文件名’] 。。。)}]。。。 

如:SQL>ALTER DATABASE DROP LOGFILE GROUP 4 

注意:当前的重做日志组不能删除。如果要删除,先使用ALTER SYSTEM SWITCH LOGFILE命令进行切换。每个实例至少有两组重做日志才能正常工作。最后要说的是当一组重做日志被删除后,它的操作系统文件依然存在,只能用操作系统命令删除,否则会留下一些无用的垃圾及文件。 

3.添加和删除联机重做日志成员(文件) 

添加重做日志组成员 

SQL>ALTER DATABASE ADD LOGFILE MEMBER 

 ‘J:\DISK3\redo01b.log’ to GROUP 1, 

‘J:\DISK3\redo02b.log’ to GROUP 2, 

‘J:\DISK3\redo03b.log’ to GROUP 3; 

验证是否添加正确 

SQL>SELECT group#,sequence#,members,bytes,status,archived FROM v$log; 

获得每个新创建的重做日志文件名 

SQL>SELECT * FROM v$logfile; 

删除不需要的重做日志成员 

SQL>ALTER DATABASE DROP LOGFILE MEMBER 

 ‘J:\DISK3\red003B.LOG’; 

建议:不能使用上面介绍的命令同时删除每个重做日志组的一个成员,因为不能删除当前组的成员。如要删除,应该先使用ALTER SYSTEM SWITCH LOGFILE命令进行切换。如果想删除刚刚加入的成员,有时可能会遇到麻烦。因为刚刚加入的成员的状态为INVALID,因此在删除它们之前可能要发若干ALTER SYSTEM SWITCH LOGFILE命令多次进行切换,还要等很久。比较容易的方法是:先关闭数据库,再开启数据库,之后就可以轻松地删除这些成员了。 

4.清除联机重做日志文件 

1) 如果数据库是开启的,由于一个联机重做日志文件崩溃使用归档活动不能继续进行,最终导致数据库的挂起。可以重新初始化重做日志文件。 

SQL>ALTER DATABASE CLEAR LOGFILE GROUP 组号; 

2)如果崩溃的重做日志文件已不能归档,可以清除已崩溃的重做日志文件,从而避免对它们进行归档。 

SQL>ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 组号; 

注:当Oracle服务器执行了以上任何一条命令之后,Oracle数据库以前的备份都将变为无用,所以应该尽快做一个全备份。 

例子:清除一个重做日志文件 

首先以system或sys用户并加上AS SYSDBA选项登录。为了安全起见首先为数据库做一个脱机(关闭数据库)的全备份。 

1. 为了备份所需的文件,获取所有控制文件的文件名。 

SQL>select * from v$controlfile; 

2. 因为在Oracle默认安装时,所有的控制文件,数据文件和重做日志文件都放在同一个目录下,因此可以使用如下命令快速关闭数据库。 

SQL>shutdown immediate 

3. 使用操作系统命令将所有的控制文件,数据文件和重做日志文件复制到备份目录中。 

SQL>host copy J:\ORACLE\PRODUCT\10.1.0\ORADATA\MOON\*.* J:\BACKUP\ 

4. 将口令文件和参数文件等也复制到指定的备份目录中。 

SQL>host copy J:\ORACLE\PRODUCT\10.1.0\Db_1\database\*.* J:\Backup\database\ 

5. 完成备份后,启动ORACLE数据库 

SQL>startup 

6. 获得所有重做日志组和成员的详细信息 

SQL>SELECT group#,sequence#,members,bytes,status,archived FROM v$log; 

SQL>SELECT * FROM v$logfile; 

7. 清除第3组重做日志 

SQL>alter database clear logfile group 3; 

8. 再通过如下命令确认 

SQL>SELECT group#,sequence#,members,bytes,status,archived FROM v$log; 

SQL>SELECT * FROM v$logfile; 

会发现第3组重做日志的序列号(SEQUENCE#)已经变为0,这也是为什么当清除一个重做日志后需要做数据库全备份的原因所在。因为Oracle在进行数据库恢复时,要求重做日志的序列号必须是连续的。 

9. 最后,应该再关闭数据库做一个数据库的全备份。 

5. 利用OMF来管理联机重做日志文件 

利用Oracle管理文件(Oracle Managed Files)来自动管理和维护重做日志文件是从9i开始引入的。该方法简化了重做日志的管理和维护。 

例子:利用OMF来自动管理和维护重做日志文件 

以system或sys用户登录 

1. 设定每个重做日志成员存放的目录 

SQL>alter system set DB_CREATE_ONLINE_LOG_DEST_1=’J:\DISK3’; 

SQL>alter system set DB_CREATE_ONLINE_LOG_DEST_2=’J:\DISK6’; 

SQL>alter system set DB_CREATE_ONLINE_LOG_DEST_3=’J:\DISK9’; 

2. 可以用如下命令以OMF方式在所运行的数据库中加入一组新的重做日志,共有3个成员,文件名由服务器生成,其大小都为100MB。 

SQL>alter database add logfile; 

3. 确定是否创建成功 

SQL>SELECT group#,sequence#,members,bytes,status,archived FROM v$log; 

SQL>SELECT * FROM v$logfile; 

例子:如何在数据库中删除一组以OMF方式创建的重做日志组 

以system或sys用户登录 

1. 用如下命令删除数据库中的一组重做日志组 

SQL>alter database drop logfile group 4; 

2. 确定是否删除成功 

SQL>SELECT group#,sequence#,members,bytes,status,archived FROM v$log; 

SQL>SELECT * FROM v$logfile; 

可看出与手工方式不同的是此时Oracle服务器会自动地删除所对应的操作系统文件。 

6 重做日志配置的应用实例 

前提:3个重做日志组各只有一个成员,且所有的重做日志文件存在一张磁盘上,现在将每个重做日志组成员增加到3个,为了使数据库的重做日志的维护变得容易,将重做日志组增加到5个,为了提高数据库运行的效率,每个重做日志成员(文件)的大小都置为15MB。 

1. 添加两个新的重做日志组 

SQL>ALTER DATABASE ADD LOGFILE 

 (‘J:\DISK3\MOON\ONLINELOG\RED0004A.LOG’, 

‘J:\DISK3\MOON\ONLINELOG\RED0004B.LOG’, 

‘J:\DISK3\MOON\ONLINELOG\RED0004C.LOG’) 

 SIZE 15M; 

SQL>ALTER DATABASE ADD LOGFILE 

 (‘J:\DISK3\MOON\ONLINELOG\RED0005A.LOG’, 

‘J:\DISK3\MOON\ONLINELOG\RED0005B.LOG’, 

‘J:\DISK3\MOON\ONLINELOG\RED0005C.LOG’) 

SIZE 15M; 

2. 确定是否添加成功 

SQL>SELECT group#,sequence#,members,bytes,status,archived FROM v$log; 

SQL>SELECT * FROM v$logfile; 

3. 以上可见当前组是那个,假如是第1组,用如下方法删除第3组,并重新添加第3组 

SQL>ALTER DATABASE DROP LOGFILE GROUP 3; 

用如下命令确认下: 

SQL>SELECT group#,sequence#,members,bytes,status,archived FROM v$log; 

 添加第3组: 

 SQL>ALTER DATABASE ADD LOGFILE GROUP 3 

 (‘J:\DISK3\MOON\ONLINELOG\RED0003A.LOG’, 

‘J:\DISK3\MOON\ONLINELOG\RED0003B.LOG’, 

‘J:\DISK3\MOON\ONLINELOG\RED0003C.LOG’) 

SIZE 15M; 

用如下命令确认下: 

SQL>SELECT group#,sequence#,members,bytes,status,archived FROM v$log; 

4. 用以上方法删除第2组,并重新添加第2组 

5. 接下来是删除当前组,但当前组不能删除,于是使用如下命令进行重做日志切换 

SQL>ALTER SYSTEM SWITCH LOGFILE; 

用如下命令确认下: 

SQL>SELECT group#,sequence#,members,bytes,status,archived FROM v$log; 

6. 此时会发现当前组为第2组,但第1组为活动状态,而活动的重做日志组是不能删除的,当然可以等到第1组变为非活动后再删除该组,但是为了加快工作进度,又发了一条重做日志切换命令。 

SQL>ALTER SYSTEM SWITCH LOGFILE; 

用如下命令确认下: 

SQL>SELECT group#,sequence#,members,bytes,status,archived FROM v$log; 

7. 此时第1组变为非活动状态,用以第3步的方法删除第1组,并重新添加第1组 

8. 用如下命令确认是否都存在所规定的磁盘和目录中 

SQL>SELECT * FROM v$logfile ORDER BY group#,member; 

9. 删除操作系统上旧的,无用的重做日志成员所对应的所有操作系统文件。