linux oracle 网络安全 编程
分类: Oracle
2013-02-21 23:39:21
原文地址:一次真实的操作更改oracle redolog的大小 作者:hot815
一直想更改我们生产的redo log的大小,今天更新了,中间还是有一些可圈可点的东西 拿出来和大家分享一下
1.通关查看联机文档 (1) redo log的大小可以影响 DBWR 和 checkpoint ;(2)larger redo log files provide better performance. Undersized log files increase checkpoint activity and reduce performance.(大的log file可以提供更好的性能,小的log file 会增加checkpoint 和降低性能);(3)A rough guide is to switch log files at most once every 20 minutes.(推荐日志切换的时间不要超多20分钟).以上三句话是我从11g的联机帮助文档上摘抄下来的,感觉第二句和第三节好像是有些矛盾。我个人感觉redo log大点是有好处的,会减少日志切换的次数和总的等待时间、我也看了一下我的系统的alert日志 切换频率是有些高了在5-10分钟。具体在一个什么范畴,我也说不好 。在网上找了找 众说不一。通过看我的awr报告 log file switch 等待时间还比较靠前 而且产生的redo信息也比较多。所以我决定先把redo改大些然后在观察。具体的操作如下:
2.操作部分
select * from v$log 查看日志的组数
select * from v$logfile 查看日志文件
通过查看 我有三组redolog 1/2/3每组两个成员 状态都正常 大小50m
现在开始操作更改
(1)先创建两日志组(其实在这可以不用创建或是只建一组就可以)
alter database add logfile group 4 ('/oracle/oradata/redo04.log') size 100m;
alter database add logfile group 5 ('/oracle/oradata/redo05.log') size 100m;
(2)select * from v$log 看一下status这个字段 ,这个字段有必要说一下。status 有几个值 分别是:UNUSED(还没有使用过);CURRENT(正在使用);ACTIVE(Log is active but is not the current log. It is needed for crash recovery) ;INACTIVE(Log is no longer needed for instance recovery),我理解active和inactive的区别是active 状态下,日志在实例恢复中还是要用的,而inactive已经不是实例恢复所必须的。
查看日志组的状态看一下哪个是当前组,哪个是inactive状态的。删除掉inactive的那个组。如果状态为current和active 在删除的时候会报错
错误提示如下:
1)ERROR at line 1:
ORA-01623: log 2 is current log for instance dbstat (thread 1) - cannot drop
ORA-00312: online log 2 thread 1: '/data1/dbstat/redo2.log'
2)ERROR at line 1:
ORA-01624: log 2 needed for crash recovery of instance dbstat (thread 1)
ORA-00312: online log 2 thread 1: '/data1/dbstat/redo2.log'
删除日志组的语句为:alter database drop logfile group 2
(3)重新创建日志组,并设置大小
因为执行alter database drop logfile group 2 这个语句是不会把os上的物理文件删除的,所以我执行的语句如下:
alter database add logfile group 2 ('/oracle/oradata/redo02_01.log') size 200m reuse
执行成功后,在看一下v$log 里面重新出现了group2 状态为unused 大小变成了200m,在v$logfile只有一个group 2文件,
因为我每组有两成员,这是我需要给group 2再增加一个文件
alter database add logfile member '/backup/redo/redo02_02.log' to group 2
这是报错了,错误原因是我os的文件没有删除,删除后重新执行上语句就ok了。
在看一下v$logfile 已经有了新加的日志组成员文件,可是问题又来了,status 显示INVALID。我又看了一下联机文档 v$logfile status值如:(1)null 空值为正常
(2)deleted 删除不在使用的(3)invalid 文件不能访问(4)stale 文件内容不完整。又在网上查了一下,网上说新增成员后是显示invalid 等日志切换到这一组后就会正常了,我做了多个alter system switch logfile;在看就正常了。
我查看了一下alter database 语句 alter database add logfile member '/backup/redo/redo02_02.log' to group 2 可以改为
alter database add logfile member '/backup/redo/redo02_02.log' reuse to group 2 这样就不用物理删除文件了
(4)以上依次类推就可以调整1、2、3组的redo log的大小。
调整完成后,在删除掉步骤一种增加的那2组日志组 就可以了!查看v$log 和v$logfile 都没有问题 redo log 调整到此结束,然后就是看调整后的测试。