甲骨文数据库故障不能分配新的日志一例

数据库出现如下的报错

凹坠俏氖菘夤收喜荒芊峙湫碌娜罩疽焕?

分析:

当数据库切换日志时,所有私人链都必须刷新到当前日志,然后才能继续。此信息表示我们在尝试切换时,还没有完全将所有重做信息写入到日志中。这有点类似于“检查站不完整”,不同的是,它仅涉及到正在被写入日志的重做。在写入所有重做前,无法切换日志。

私人Strands 是10 gr2才有的,它用于处理重做的锁(锁,重新分配)又是;是一种允许进程利用多个分配门闩更高效地将重做写入重做缓冲区缓存的机制,它与我中出现的,log_parallelism 参数相关。提出链的概念是为了确保实例的重做生成率达到最佳,并能确保在出现某种重做争用时,可以动态调整链的数量进行补偿。初始分配的链数量取决于CPU的数量,最少两个链,其中一个链用于活跃的重做生成。

对于大型的oltp系统,重做生成量非常大,因此当前台进程遇到重做争用时,这些链会被激活只共享链总是与多个私人链共存,只oracle 10 g的重做(和撤销)机制有一些重大变化,目的是为了减少争用只此机制不再实时记录重做,而是先记录在一个私人区域,并在提交时冲到重做日志缓冲区中去,只在这种新机制引入后,一旦用户进程申请到私人链,重做不再保存到pga中,因此,不再需要重做副本门闩这个过程,。

如果新事务申请不到私人链的重新分配门闩,则会继续遵循旧的重做缓冲区机制,申请写入共享链中,只对于这个新的机制,在进行重新被写出到日志文件时,LGWR需要将共享链与私人链的内容写出。当重新冲发生时,所有的public ,,链的,重新分配门闩需要被获取,所有的公共股的门闩需重做副本要被检查,所有包含活动事务的私人股需要被持有。

其实,对于这个现象也可以忽略,除非,“不能分配新的日志”信息和“高级日志序列”信息之间有明显的时间差。

如果想要在警报。日志中避免出现私人链冲洗不完整事件,那么可以通过增加参数db_writer_processes的值来实现,因为DBWn会触发LGWR将重做写入到日志文件,如果有多个DBWn进程一起写,可以加速重做缓冲区缓存写入重做日志文件。

解决:

可以使用以下命令修改:

完成改变系统设置db_writer_processes=4,,范围=spfile ;,,,,该参数时静态参数,必需重启数据库后生效

如果在有多个cpu的情况下建议使用DB_WRITER_PROCESSES,因为这样的情况下不用去模拟异步模式,但要注意进程数量不能大于cpu数量。而在只有一个cpu的情况下建议使用DBWR_IO_SLAVES来模拟异步模式,以便提高数据库性能。


还有出现这样”


分析原因:
服务器有三个日志组g1, g2, g3。当g1写完时,要往g2上写,这时候g1要进行归档,还要进行检查站。然后另外两个日志组继续写。当g2和g3都写完之后,又要往g1上写,但是问题来了,g1还没有完成归档和检查点操作,所以这时就会报警。
解决方法:
多加几个日志组,并且每个日志组空间大一点,这样就可以延缓时间,会留给g1充分的时间来完成归档和检查点任务。就不会有报的错。


完成select * from v $ log;

完成select * from v $ logfile;

完成选择组#,#序列,字节,成员,从v $日志状态;






甲骨文数据库故障不能分配新的日志一例