select * from v$log;
create table haha as select * from all_objects;
insert into haha select * from haha;
commit;
delete from haha;
select * from v$log;
alter system switch logfile;
select * from v$log;【不产生数据,手工切换日志】
INACTIVE:同步完成 ACTIVE:有数据未同步完成
切换日志时,切换到ACTIVE状态的日志时,触发check point,把活动的写完了,或者变成同步完成状态,然后才能切换,等十几秒切换,所以切换有点慢。
十几秒对于我们来说,这时间很有短暂,但对于生产库,访问量大的话,十几秒太可怕了。
你想像一下,所有数据库都是先写日志后操作,意味你在切换日志时,外部的操作不能执行,因为你现在 正在切换日志组
你没法往日志组里写,操作动作都得等,等日志组正常,等切换完日志才可以,
想像一下生产库,写满50M等十几秒钟,再写满50M等十几秒钟,生产环境中50M太好写完了,一会就写完了,所以你在做数据库维护时还有一块,
日志大小的调整,一定要满足,公司的业务不要太频繁的切换日志。假如1分钟切换1次,每过1分钟等十几秒钟,领导肯定怒,体验效果非常差。
把日志组调得大点,根据业务来调整,一般情况下,保证1小时切换一次最好。
我见过最大的日志组2G大小,这属于大库,日志产生2G,是不是数据也产生2G?数据可能大于2G,也可能小于2G【增删改】。
在公司中到底设置多大好,需要你自己去监控,维护数据库,隔段时查询一下。
比如:
在业务峰值时,查询当前查 序列号4,过了1小时后,再次查询 序列号14,这证明你1小时内切换了10次日志。那你可以把日志大小调大10倍。
第2天你再继续在业务高峰监控,如果当前序列是15,过了1小时再查询是16了,那正常了。如果还不正常,继续调整。
这个日志切换太频繁不好,不切换也不好。为什么不让你设置成无限大?因为你要设置太大了,总也不切换了,带来一个问题,很少产生归档。
如果当前日志坏了,这段时间内你的数据全没了。
所以,峰值时最好1小时切换1次。2小时强制切换。
(1)强制切换 (2)计划任务
如何通过脚本实现?
抓取 v$log 中 SEQUENCE#的值,第1次是5,第2次是6,算一次时间就出来了。
set lines 300
spool '/home/oracle/aa.txt'
select max(SEQUENCE#) from v$log;
spool off;