重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 931|回复: 0
打印 上一主题 下一主题

[Oracle] alter system switch logfile这个命令做了什么

[复制链接]
跳转到指定楼层
楼主
发表于 2023-6-25 16:11:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
redo log的大小可以影响 DBWR 和 checkpoint ;
larger redo log files provide better performance. Undersized logfiles increase checkpoint activity and reduce performance。

适当大小的log file可以提供更好的性能;redo logfile 设置过小会增加checkpoint 和降低性能;A rough guide is to switch log files at most once every 20 minutes.(推荐日志切换的时间不要超多20分钟).

当我们在Oracle中更改redo log大小 or 增加redo log组时,由于ORACLE没有提供类似RESIZE的参数来重新调整REDO LOG FILE的大小,故只能先把这个文件删除了,然后再重建。又因ORACLE要求最少有两组日志文件在用,所以不能直接删除,必须要创建中间过渡的REDO LOG日志组。

在删除redo日志组时,Inactive状态对应的redo group才能进行alter database drop logfile group操作。
使用select * from v$log;查看redo日志状态:

SYS>  select * from gv$log;

   INST_ID     GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME     CON_ID
---------- ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ --------- ----------
         1          1          1    1009535  209715200        512          1 NO  CURRENT             1.4620E+10 17-JUN-22   1.8447E+19                    0
         1          2          1    1009534  209715200        512          1 YES INACTIVE            1.4620E+10 17-JUN-22   1.4620E+10 17-JUN-22          0
         1          3          2    1203015  209715200        512          1 YES INACTIVE            1.4620E+10 17-JUN-22   1.4620E+10 17-JUN-22          0
         1          4          2    1203016  209715200        512          1 NO  ACTIVE              1.4620E+10 17-JUN-22   1.8447E+19                    0

Unused          -- 表示还没被使用过
Current          -- 表示正在使用
Active                -- Log isactive but is not the current log. It is needed for crash recovery
Inactive        -- Log is nolonger needed for instance recovery


为了删除redo日志对应的group, 此时group对应的redo日志状态必须为inactive。为了尽快完成,会手动执行如下命令:
alter system switch logfile;

那么这条alter system switch logfile到底做了啥操作?

alter system switch logfile 会触发 checkpoint的产生,保证数据库的数据一致性前推;
但 log switch 的完成不依赖于 checkpoint 的完成,只要执行了alter system switch logfile;命令,就会切换当前redo日志的状态;

注意:
log switch 发生时,将被override 的redo log 仍然处于active 状态,就会发生 “Checkpoint not complete” 的错误。
举例:

Thread 1 cannot allocate new log, sequence 21
Checkpoint not complete
  Current log# 4 seq# 20 mem# 0: /u01/app/oracle/oradata/TEST/redo04.log

出现这个错误,就表明redo日志的大小设置过小,需要对redo日志进行调大或者增加redo log组。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-5-11 18:18 , Processed in 0.085204 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表