在某些情况下,您可能希望删除整组重做日志成员。例如,您希望减少实例重做日志中的组数。在不同的情况下,您可能希望删除一个或多个特定的重做日志成员。例如,如果发生磁盘故障,您可能需要删除故障磁盘上的所有重做日志文件,以便数据库不会尝试写入不可访问的文件。在其他情况下,特定的重做日志文件变得不必要。例如,文件可能存储在不适当的位置。
删除日志组
要删除重做日志组,您必须具有ALTER DATABASE系统特权。在删除重做日志组之前,请考虑以下限制和预防措施:
- 无论组中的成员数是多少,实例都需要至少两组重做日志文件。 (一个小组由一个或多个成员组成。)
- 只有在处于非活动状态时,才能删除重做日志组。如果必须删除当前组,则首先强制执行日志切换。
- 在删除之前,请确保存档重做日志组(如果已启用存档)。要查看是否发生了这种情况,请使用V $ LOG视图。
SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG; GROUP# ARC STATUS --------- --- ---------------- 1 YES ACTIVE 2 NO CURRENT 3 YES INACTIVE 4 YES INACTIVE
使用带有DROP LOGFILE子句的SQL语句ALTER DATABASE删除重做日志组。
以下语句删除重做日志组编号3:
ALTER DATABASE DROP LOGFILE GROUP 3;
从数据库中删除重做日志组,并且您没有使用Oracle托管文件功能时,不会从磁盘中删除操作系统文件。而是更新相关数据库的控制文件以从数据库结构中删除组的成员。删除重做日志组后,请确保已成功完成删除,然后使用相应的操作系统命令删除已删除的重做日志文件。
使用Oracle Managed Files时,系统会自动为您清理操作系统文件。
删除重做日志成员
要删除重做日志成员,您必须具有ALTER DATABASE系统特权。删除单个重做日志成员之前,请考虑以下限制和注意事项:
- 允许删除重做日志文件,以便多路复用重做日志暂时不对称。例如,如果使用双工组重做日志文件,则可以删除一个组中的一个成员,即使所有其他组各有两个成员。但是,您应该立即纠正这种情况,以便所有组至少有两个成员,从而消除重做日志可能出现的单点故障。
- 无论组中的成员数是多少,实例始终至少需要两个有效的重做日志文件组。 (一个组包含一个或多个成员。)如果要删除的成员是该组的最后一个有效成员,则在其他成员生效之前,您不能删除该成员。要查看重做日志文件状态,请使用V $ LOGFILE视图。如果数据库无法访问重做日志文件,则该日志文件将变为INVALID。如果数据库怀疑它不完整或正确,它将变为STALE。过时的日志文件在下次将其组成为活动组时再次生效。
- 仅当重做日志成员不属于活动组或当前组时,才能删除该日志成员。要删除活动组的成员,请首先强制执行日志切换。
- 在删除成员之前,请确保归档重做日志成员所属的组(如果已启用归档)。要查看是否发生了这种情况,请使用V $ LOG视图。
要删除特定的非活动重做日志成员,请使用带有DROP LOGFILE MEMBER子句的ALTER DATABASE语句。
以下语句删除了重做日志/oracle/dbs/log3c.rdo:
ALTER DATABASE DROP LOGFILE MEMBER '/oracle/dbs/log3c.rdo';
从数据库中删除重做日志成员时,不会从磁盘中删除操作系统文件。而是更新关联数据库的控制文件以从数据库结构中删除该成员。删除重做日志文件后,请确保已成功完成删除,然后使用相应的操作系统命令删除已删除的重做日志文件。
要删除活动组的成员,必须先强制执行日志切换。
强制日志切换
当LGWR停止写入一个重做日志组并开始写入另一个时,会发生日志切换。默认情况下,当前重做日志文件组填充时会自动进行日志切换。
您可以强制日志切换使当前活动组处于非活动状态,并可用于重做日志维护操作。例如,您要删除当前活动的组,但在该组处于非活动状态之前无法执行此操作。如果必须在完全填充组成员之前的特定时间存档当前活动组,则可能还需要强制执行日志切换。此选项在具有大量重做日志文件的配置中非常有用,这些文件需要很长时间才能填充。
要强制执行日志切换,您必须具有ALTER SYSTEM权限。将ALTER SYSTEM语句与SWITCH LOGFILE子句一起使用。
以下语句强制执行日志切换:
ALTER SYSTEM SWITCH LOGFILE;
参考资料
https://docs.oracle.com/cd/E11882_01/server.112/e25494/onlineredo.htm#ADMIN11322