Oracle数据库中调整redo log(重做日志)的大小

在Oracle数据库中,调整redo log(重做日志)的大小可以通过以下步骤完成:

1、查看当前redo日志组列表:

  • 使用SQL查询来查看当前的redo日志组及其状态、大小等信息。
    常用的查询是SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v l o g f i l e t 1 , v logfile t1,v logfilet1,vlog t2 WHERE t1.GROUP#=t2.GROUP#;[1]。
set linesize 300
col member format a50
SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         3 /u02/oracle/oradata/inorcrd/redo03.log                                 50 INACTIVE
         2 /u02/oracle/oradata/inorcrd/redo02.log                                 50 CURRENT
         1 /u02/oracle/oradata/inorcrd/redo01.log                                 50 INACTIVE

2、确定需要调整的日志组:

  • 通常,会选择INACTIVE(非活动)状态的日志组进行调整,因为活动状态的日志组不能被删除或修改。

3、删除INACTIVE状态的redo日志组:

  • 使用ALTER DATABASE DROP LOGFILE GROUP <group_number>;命令删除指定的INACTIVE日志组[1]。
  • 如果在归档模式下,需要确保INACTIVE的日志组已经完成归档,否则可能无法删除[4]。
ALTER DATABASE DROP LOGFILE GROUP 3;

4、通过操作系统删除redo日志文件:

  • 在操作系统层面删除与已删除日志组相关联的redo日志文件[1]。
rm -rf /u02/oracle/oradata/inorcrd/redo03.log

5、添加新的redo日志组并指定大小:

  • 使用ALTER DATABASE ADD LOGFILE GROUP <group_number> ‘<path_to_logfile>’ SIZE <size_in_MB>M;命令添加新的redo日志组,并指定所需的大小[1][2][4]。
ALTER DATABASE ADD LOGFILE GROUP 3 '/u02/oracle/oradata/inorcrd/redo03.log' SIZE 256M;

6、切换日志组:

  • 使用ALTER SYSTEM SWITCH LOGFILE;命令强制切换日志组,使数据库开始使用新创建的日志组[1][2][4]。
  • 多次切换使其状态变为INACTIVE(非活动),删除–》删除操作系统对应文件,添加新文件

6.1、操作步骤记录如下,仅供参数

-- 少于2组日志文件,所以GROUP 1状态为INACTIVE(非活动),也在删除3后没有办法删除
SYS@inorcrd> ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 1
*
ERROR at line 1:
ORA-01567: dropping log 1 would leave less than 2 log files for instance inorcrd (thread 1)
ORA-00312: online log 1 thread 1: '/u02/oracle/oradata/inorcrd/redo01.log'


SYS@inorcrd> SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         2 /u02/oracle/oradata/inorcrd/redo02.log                                 50 CURRENT
         1 /u02/oracle/oradata/inorcrd/redo01.log                                 50 INACTIVE


-- 添加时报错,因为没有删除GROUP 3对应的操作系统文件

SYS@inorcrd> ALTER DATABASE ADD LOGFILE GROUP 3 '/u02/oracle/oradata/inorcrd/redo03.log' SIZE 256M;
ALTER DATABASE ADD LOGFILE GROUP 3 '/u02/oracle/oradata/inorcrd/redo03.log' SIZE 256M
*
ERROR at line 1:
ORA-00301: error in adding log file '/u02/oracle/oradata/inorcrd/redo03.log' - file cannot be created
ORA-27038: created file already exists
Additional information: 1

-- 操作系统层面删除与已删除日志组GROUP 3相关联的redo日志文件
SYS@inorcrd> host rm -rf /u02/oracle/oradata/inorcrd/redo03.log

-- 添加新的redo日志组GROUP 3,并指定所需的大小256MB
SYS@inorcrd> ALTER DATABASE ADD LOGFILE GROUP 3 '/u02/oracle/oradata/inorcrd/redo03.log' SIZE 256M;

Database altered.

SYS@inorcrd> SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         3 /u02/oracle/oradata/inorcrd/redo03.log                                256 UNUSED
         2 /u02/oracle/oradata/inorcrd/redo02.log                                 50 CURRENT
         1 /u02/oracle/oradata/inorcrd/redo01.log                                 50 INACTIVE

SYS@inorcrd> ALTER DATABASE DROP LOGFILE GROUP 1;

Database altered.

-- 操作系统层面删除与已删除日志组GROUP 1相关联的redo日志文件
SYS@inorcrd> host rm -rf /u02/oracle/oradata/inorcrd/redo01.log

-- 添加新的redo日志组GROUP 1,并指定所需的大小256MB
SYS@inorcrd> ALTER DATABASE ADD LOGFILE GROUP 1 '/u02/oracle/oradata/inorcrd/redo01.log' SIZE 256M;

Database altered.

SYS@inorcrd> SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         3 /u02/oracle/oradata/inorcrd/redo03.log                                256 UNUSED
         2 /u02/oracle/oradata/inorcrd/redo02.log                                 50 CURRENT
         1 /u02/oracle/oradata/inorcrd/redo01.log                                256 UNUSED

SYS@inorcrd> alter system switch logfile;

System altered.

SYS@inorcrd> SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         3 /u02/oracle/oradata/inorcrd/redo03.log                                256 UNUSED
         2 /u02/oracle/oradata/inorcrd/redo02.log                                 50 ACTIVE
         1 /u02/oracle/oradata/inorcrd/redo01.log                                256 CURRENT

SYS@inorcrd> alter system switch logfile;

System altered.

SYS@inorcrd> SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         3 /u02/oracle/oradata/inorcrd/redo03.log                                256 CURRENT
         2 /u02/oracle/oradata/inorcrd/redo02.log                                 50 ACTIVE
         1 /u02/oracle/oradata/inorcrd/redo01.log                                256 ACTIVE

SYS@inorcrd> alter system switch logfile;

System altered.

SYS@inorcrd> SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         3 /u02/oracle/oradata/inorcrd/redo03.log                                256 INACTIVE
         2 /u02/oracle/oradata/inorcrd/redo02.log                                 50 CURRENT
         1 /u02/oracle/oradata/inorcrd/redo01.log                                256 INACTIVE

SYS@inorcrd> alter system switch logfile;

System altered.

SYS@inorcrd> SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         3 /u02/oracle/oradata/inorcrd/redo03.log                                256 INACTIVE
         2 /u02/oracle/oradata/inorcrd/redo02.log                                 50 ACTIVE
         1 /u02/oracle/oradata/inorcrd/redo01.log                                256 CURRENT

SYS@inorcrd> alter system switch logfile;

System altered.

SYS@inorcrd> SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         3 /u02/oracle/oradata/inorcrd/redo03.log                                256 CURRENT
         2 /u02/oracle/oradata/inorcrd/redo02.log                                 50 ACTIVE
         1 /u02/oracle/oradata/inorcrd/redo01.log                                256 ACTIVE

SYS@inorcrd> alter system switch logfile;

System altered.

SYS@inorcrd> SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         3 /u02/oracle/oradata/inorcrd/redo03.log                                256 INACTIVE
         2 /u02/oracle/oradata/inorcrd/redo02.log                                 50 CURRENT
         1 /u02/oracle/oradata/inorcrd/redo01.log                                256 INACTIVE

SYS@inorcrd> alter system switch logfile;

System altered.

SYS@inorcrd> SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         3 /u02/oracle/oradata/inorcrd/redo03.log                                256 INACTIVE
         2 /u02/oracle/oradata/inorcrd/redo02.log                                 50 INACTIVE
         1 /u02/oracle/oradata/inorcrd/redo01.log                                256 CURRENT

-- 多次切换使其日志组GROUP 2状态变为INACTIVE(非活动),执行ALTER DATABASE DROP LOGFILE
SYS@inorcrd> ALTER DATABASE DROP LOGFILE GROUP 2;

Database altered.

-- 操作系统层面删除与已删除日志组GROUP 2相关联的redo日志文件
SYS@inorcrd> host rm -rf /u02/oracle/oradata/inorcrd/redo02.log

-- 添加新的redo日志组GROUP 2,并指定所需的大小256MB
SYS@inorcrd> ALTER DATABASE ADD LOGFILE GROUP 2 '/u02/oracle/oradata/inorcrd/redo02.log' SIZE 256M;

Database altered.

SYS@inorcrd> SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         3 /u02/oracle/oradata/inorcrd/redo03.log                                256 INACTIVE
         2 /u02/oracle/oradata/inorcrd/redo02.log                                256 UNUSED
         1 /u02/oracle/oradata/inorcrd/redo01.log                                256 CURRENT

6.2、切换日志组,使数据库开始使用新创建的日志组

完成redo日志组添加后,切换日志组,使数据库开始使用新创建的日志组

SYS@inorcrd> alter system switch logfile;

System altered.

SYS@inorcrd> /

System altered.

SYS@inorcrd> /

System altered.

SYS@inorcrd> SELECT t1.GROUP#,t1.MEMBER,t2.BYTES/1024/1024 as log_size_MB,t2.STATUS FROM v$logfile t1,v$log t2 WHERE t1.GROUP#=t2.GROUP#;

    GROUP# MEMBER                                                       LOG_SIZE_MB STATUS
---------- ------------------------------------------------------------ ----------- ----------------
         3 /u02/oracle/oradata/inorcrd/redo03.log                                256 ACTIVE
         2 /u02/oracle/oradata/inorcrd/redo02.log                                256 INACTIVE
         1 /u02/oracle/oradata/inorcrd/redo01.log                                256 CURRENT

至此redo log日志文件大小调整完成。

7、(可选)清理和删除旧的日志文件:

  • 如果需要释放存储空间,可以在操作系统层面手动删除旧的、不再需要的redo日志文件[4]。

请注意,在进行任何修改之前,强烈建议在非生产环境中进行充分的测试,并确保已经备份了所有重要数据。此外,对redo log的修改可能会影响数据库的性能和恢复能力,因此请务必谨慎操作。

以上步骤基于当前可用的信息,但Oracle数据库的具体操作可能会因版本和配置的不同而有所差异。在实际操作中,请参考您所使用的Oracle版本的官方文档或咨询数据库管理员。

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值