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

标题: alter system switch logfile这个命令做了什么 [打印本页]

作者: mahan    时间: 2023-6-25 16:11
标题: alter system switch logfile这个命令做了什么
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组。




欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2