oracle数据库故障一例

数据库出现如下的报错

分析:

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

Private Strands 是10gR2才有的,它用于处理redo的latch( redo allocation latch)。 是一种允许进程利用多个allocation latch更高效地将redo写入redo buffer cache的机制,它与9i中出现的 log_parallelism 参数相关。提出Strand的概念是为了确保实例的redo生成率达到最佳,并能确保在出现某种redo争用时,可以动态调整strand的数量进行补偿。初始分配的strand数量取决于CPU的数量,最少两个strand,其中一个strand用于active的redo生成。

对于大型的oltp系统,redo生成量非常大,因此当前台进程遇到redo争用时,这些strand会被激活。 shared strand总是与多个private strand共存 。 Oracle 10g的redo(和undo)机制有一些重大变化,目的是为了减少争用。 此机制不再实时记录redo,而是先记录在一个private area,并在commit时flush到redo log buffer中去 。 在这种新机制引入后,一旦用户进程申请到private strand,redo不再保存到pga中,因此 不再需要redo copy latch这个过程 。

如果新事务申请不到private strand的redo allocation latch,则会继续遵循旧的redo buffer机制,申请写入shared strand中 。 对于这个新的机制,在进行redo被写出到logfile时,LGWR需要将shared strand与private strand的内容写出。当redo flush发生时,所有的public   strands的 redo allocation latch需要被获取,所有的public strands的redo copy latch需要被检查,所有包含活动事务的private strands需要被持有。

其实,对于这个现象也可以忽略,除非 “cannot allocate new log”信息和“advanced to log sequence”信息之间有明显的时间差。

如果想要在alert.log中避免出现Private strand flush not complete事件,那么可以通过增加参数db_writer_processes的值来实现,因为DBWn会触发LGWR将redo写入到logfile,如果有多个DBWn进程一起写,可以加速redo buffer cache写入redo logfile。

解决:

可以使用以下命令修改:

SQL> alter system set db_writer_processes=4  scope=spfile ;   -- 该参数时静态参数,必需重启数据库后生效

注意,DBWR进程数应该与逻辑CPU数相当。另外地,当oracle发现一个DB_WRITER_PROCESS不能完成工作时,也会自动增加其数量,前提是已经在初始化参数中设定过最大允许的值。

如果系统支持 AIO(disk_async_io=true) ,一般不用设置多dbwr 或io slaves。

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

如果"cannot allocate new log" 与"advanced to log sequence"有明显的时间间隔,应考虑增加db_writer_processes

mos文档建议增加db_write_processes,通过增加db_write_processes来增加脏块的写出速率。个人认为和io的关系应该
最大.也有部分的bug会导致该提示抛出.增加redo group和增大redo file的size,从而减少log switch的次数,可能效果
会更好一些.

还有出现这样“cannot allocate new log”的信息

也可以

是个比较常见的错误。通常来说是因为在日志被写满时会切换日志组,这个时候会触发一次checkpoint,DBWR会把内存中的脏块往数据文件中写,只要没写结束就不会释放这个日志组。如果归档模式被开启的话,还会伴随着ARCH写归档的过程。如果redo log产生的过快,当CPK或归档还没完成,LGWR已经把其余的日志组写满,又要往当前的日志组里面写redolog的时候,这个时候就会发生冲突,数据库就会被挂起。并且一直会往alert.log中写类似上面的错误信息。

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

时间: 2024-11-05 14:43:03

oracle数据库故障一例的相关文章

ORACLE数据库错误一例Error 12154 received logging on to the standby

环境:AIX RAC + DG,ORACLE 10G 现象:主库一个节点出现如下报错 460a:/home/oracle/admin/port/bdump$tail -f *.log Sat Jan 10 11:06:24 2015 Errors in file /home/oracle/admin/port/bdump/port1_cjq0_19661256.trc: Sat Jan 10 11:09:19 2015 kkjcre1p: unable to spawn jobq slave p

ORACLE数据库不同故障下的恢复总结

ORACLE数据库不同故障下的恢复总结1. 非归档模式下丢失或损坏的文件--1.1 数据文件--启动数据库的状态到MOUNT--恢复方法:通过之前创建的数据库完整备份,修复整个数据库,不过备份之后发生的所有修改将丢失:修复数据库之后不需要进行RECOVER操作.(由于没有归档,也无从RECOVER),直接通过RESETLOGS方式打开数据库即可. --1.2 数据文件及联机重做日志文件--启动数据库的状态到MOUNT--恢复方法(同上):通过之前创建的数据库完整备份,修复整个数据库,不过备份之后

Oracle ASM数据库故障数据恢复解决方案

[故障描述] ASM磁盘组掉线 ,ASM实例不能mount.ASM磁盘组有4个500G的磁盘组成,数据库和ASM软件为10.2.0.1,急需恢复oracle数据库. [故障分析] 分析组成ASM磁盘组的磁盘,取出ASM元数据,对元数据进行分析:ASM存储元数据损坏,导致diskgroup无法mount.重组ASM存储空间,从ASM磁盘组中导出数据库文件,然后对数据库文件进行检测,修复.如果数据库文件完好,可以利用从ASM磁盘组中导出的数据库文件启动数据库.如果数据库文件损坏,这底层解析这些数据库

oracle数据库常见故障情况数据恢复分析

一.Oracle启动后无法工作或者数据库无法启动 一旦数据库出现无法启动的情况,首先需要检查system表是否为未损坏状态,通常情况而言,如果system表未被损坏那么很容易进行数据恢复,如果system表已经被损坏,那么就需要数据恢复工作人员手动对表结构进行分析核对,这样数据恢复的周期就相对较长,但是数据恢复成功率依然较高,不用担心数据恢复失败. 二.Oracle 数据库的ASM存储受到损坏 这种故障情况通常是因为ASM的部分设备故障或者由于ASM重置等原因导致的数据库数据丢失.出现这种情况后

安装部署oracle数据库

部署Oracle数据库 防伪码:宝剑锋从磨砺出,梅花香自苦寒来. 前言:前面我们学习过微软的sqlserver,还有甲骨文公司的mysql,也理解了数据库系统的作用,这两种数据库管理系统适用于软件,网站,游戏等后台数据库,例如我们在学习mysql的时候搭建过动态网站.但oracle属于非常安全.完善的大型数据库管理软件,在电信.银行.证券等大型应用场合拥有着绝对的优势.那么今天就给搭建介绍oracle的安装和基本的使用.Oracle可以安装到windows和linux系统上,但企业更多采用在li

oracle系列(一)”图文+解析”带你部署oracle数据库

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 前言:前面我们学习过微软的sqlserver,还有甲骨文公司的mysql,也理解了数据库系统的作用,这两种数据库管理系统适用于软件,网站,游戏等后台数据库,例如我们在学习mysql的时候搭建过动态网站.但oracle属于非常安全.完善的大型数据库管理软件,在电信.银行.证券等大型应用场合拥有着绝对的优势.那么今天就给搭建介绍oracle的

Oracle数据库基础知识

oracle数据库plsql developer 目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外键 创建删除索引 创建修改删除视图 二     SQL查询 基本的SQL语句 unionminusintersect 内连接外连接 子查询关联子查询 betweeninexists 复制表insert into selectselect into from 三     SQL查询优化 尽量少用 IN 操

手动删除oracle数据库

oracle数据库sqldatabaseloggingfile –===================== – 手动删除oracle数据库 –===================== 在很多情况下,或无法使用dbca工具的时候,我们需要手动来删除数据库.对此,可以借助drop database命令来实现,下面的描述中给出手动删除数据库 的具体步骤,包含文件系统数据库以及ASM数据库.环境:Oracle Enterprise Linux 5.4 + Oracle 10g R2 . 一.手动删除

Oracle数据库备份手册

1         故障类型 l  实例故障 由ORACLE内部异常.操作系统故障或其它相关软件引起,导致ORACLE实例中的进程或内存区出现故障或数据库无法正常关闭,这种故障称为实例故障.实例故障没有本质上的破坏,无须对数据库进行恢复,只要重启数据库就可正常. l  媒介故障 媒介故障主要是由于磁盘驱动器出问题.磁盘块坏.数据文件被删除或损坏等引起,文档中所介绍的备份方法基本为这种故障而设计的. 2         与备份相关的数据库环境 2.1    数据库类型 与数据库备份最紧密相关的数据