今天是周一,难得在单位,开会过程中,出来喝口茶,问题就出来了。接到客户一电话,其数据库环境为Oracle 9.2.0.5的rac,运行在aix平台上。由于未知原因,数据库宕掉。重启之后,首先发现的是3个控制文件不一致,客户就选择其中一个控制文件进行mount,mount成功之后,在open数据库时,提示需要介质恢复。客户又用以下命令recover database using backup controlfile;进行自行恢复。结果恢复的时候提示找不到归档日志。这时客户的电话找到了我,接到电话了解情况之后,为简单起见首先提示客户把database的online redolog挨个输入进行recover,当recover至最后一个日志时,出现ORA-03113: end-of-file on communication channel.见到此错误,就意识到事情不妙,赶紧叫客户打开alert日志查看,出现了redolog corruption,也就意味着数据库宕机时出现redolog损坏!意识到远程电话沟通,难以解决此类问题。恰巧,有同事在客户现场附近,赶紧叫同事去客户现场,自己再做远程支持。
如果出现current online redolog corruption,最常规的解决办法就是置隐含参数_ALLOW_RESETLOGS_CORRUPTION,将隐含参数设置之后,再用recover database using backup controlfile until cancel进行不完全恢复,最后用alter database open resetlogs打开。但是在打开数据库过程中,出现了2256错误,ora-600 2256 6 1073741824 2811 2669208191 [] [] [] ,该错误以为着数据库需要的scn和current scn处于不一致状态。利用ora-00600 [2262]类似的算法:
引用
ORA-600 [2662] [a] [b] [c] [d] [e]
Arg [a] Current SCN WRAP
Arg [b] Current SCN BASE
Arg [c] dependent SCN WRAP
(注:为了存储更大的SCN值,当SCN BASE到足够大并开始重置的时候,SCN WRAP将加1)
Arg [d] dependent SCN BASE
Arg [e] Where present this is the DBA where the dependent SCN came from
也就是Arg[d]的值是从哪个block中找到的,通常是一个data block address。
通过这几个参数根据一定的规则可以计算出我们需要的level。计算规则如下:
Arg [c]*4得出一个数值,假设为V_Wrap
如果Arg [d]=0,则V_Wrap值为需要的level
Arg [d] < 1073741824,V_Wrap+1为需要的level
Arg [d] < 2147483648,V_Wrap+2为需要的level
Arg [d] < 3221225472,V_Wrap+3为需要的level
将level设置为11247=2811*4+3,使用如下事件进行scn递增,(注意数据库处于mount状态)
alter session set events '10015 trace name adjust_scn level 11247’,再次尝试进行open,alert日志继续报ora-600 4193 42665 42729 【】 【】 【】 【】 【】,其后台跟踪文件显示
引用
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [4193], [42665], [42729], [], [], [], [], []
Current SQL statement for this session:
update lob$ set retention = :1 where retention >= 0
根据mtalink doc 39282.1解释,出现4193主要是因为undo和redo的seq号出现不匹配。
引用
PURPOSE:
This article discusses the internal error "ORA-600 [4193]", what
it means and possible actions. The information here is only applicable
to the versions listed and is provided only for guidance.
ERROR:
ORA-600 [4193] [a] [b]
VERSIONS:
versions 6.0 to 10.1
DESCRIPTION:
A mismatch has been detected between Redo records and Rollback (Undo)
records.
We are validating the Undo block sequence number in the undo block against
the Redo block sequence number relating to the change being applied.
This error is reported when this validation fails.
ARGUMENTS:
Arg [a] Undo record seq number
Arg [b] Redo record seq number
一般来讲4193在数据库已经处于open状态时,处理比较简单。详见metalink doc 281429.1,但目前是mount状态,并不能用metalink介绍的方法进行解决。事情到这里似乎没有眉目了,再次尝试用隐含参数_CORRUPTED_ROLLBACK_SEGMENTS进行处理,但前提是需要知道损坏的undo segment,进一步查看相关跟踪文件并没有相关undo segment信息,直觉告诉我处理4193,4194并不需要设置_CORRUPTED_ROLLBACK_SEGMENTS参数,考虑到目前undo为auto,尝试将undo_management设置为manual,再次尝试将数据open,可喜的是open成功!接下来就是一些收尾工作,具体不表。事后查询Oracle metalink文档 doc 452662.1比较详细的说明了怎么解决了4193错误,其中一种方法就是将undo_management设置为manual。
分享到:
相关推荐
3. 基于当前 SCN 为该表做一次初始化(expdp-impdp) 4. 在复制进程加入 map owner.table_name, target owner.table_name,filter ( @GETENV ("TRANSACTION", "CSN") >scn 号);并重启进程。 如果问题仍然没有得到...
"ORACLE数据库一次意外宕机的分析处理实记(ora-1578)" 在本文中,我们将讲述ORACLE数据库一次意外宕机的分析处理过程。该宕机事件发生在测试环境中的一台装有ORACLE数据库的AIX小机上,导致数据库宕机。我们将从...
如果数据过大,可以考虑分块读取或使用流式处理,避免一次性加载到内存中。 在实际应用中,还可能涉及CLOB字段的写入操作,这通常可以通过`PreparedStatement`的`setClob()`方法实现,将String转换为`Clob`对象...
- 在应用redo文件的过程中,每当转换redo文件时,都会发生一次Media Recovery Checkpoint。 - 当数据文件的STOP SCN达到时,同样会触发Media Recovery Checkpoint,并更新数据文件头部的checkpoint值。 10. **...
案例中指出,此错误发生在迁移完成后的一次查询操作中。Oracle数据库的告警日志是诊断问题的关键资源,它记录了系统运行期间的关键事件。通过对告警日志的分析,找到了一个ORA-07445错误,这是一个严重的内部错误,...
- **解决方法**:确保每个参数只被指定一次。 #### ORA-00081: Parameter value out of range - **描述**:参数值超出范围。 - **解决方法**:将参数值设置在允许的范围内。 #### ORA-00082: Parameter value must...
- **性能优化:** 当处理较大的Blob数据时,为了提高性能,可以采用分块读写的方式,即将大数据分成若干小块进行处理,避免一次性加载全部数据导致内存不足或其他性能问题。 通过上述介绍,我们可以了解到在PB中...
接着,我们看到两个ORA-00600错误,这是Oracle数据库的一个内部错误代码,表示遇到了未预期的情况。错误参数中的[6856]和[4194]是特定的错误子类型,而其他参数可能与故障的具体位置或状态有关。这些错误通常需要...
本文记录了一次在Oracle 10g 64位环境中,通过DBLink连接到MySQL 5.5的过程,并在面临RAC环境中的问题时找到了解决方案。 首先,Oracle 10g 64位版本的HSODBC(异构服务)可能出现问题,表现为HSODBC文件大小为0,...
- 确保每个游标仅在一个作用域内被打开一次。 - 在使用完游标后立即关闭它。 #### ORA-6530:ACCESS_INTO_NULL - **异常说明**:访问空值。 - **常见原因**: - 访问未初始化或已设置为 NULL 的对象属性。 - ...
一个Job可以被设置为周期性执行,也可以是一次性的。 2. **Program(程序)**:Program是用来执行特定操作的实体,它可以是PL/SQL块、外部过程或其他类型的可执行程序。每个Program都必须与至少一个Job关联。 3. *...
2. **分析错误日志**:错误日志显示了ALTER DATABASE RECOVER命令的执行记录,以及一系列的ORA-00600内部错误代码,这些错误通常表示数据库遇到了无法自动处理的严重问题。错误中提到了数据块校验失败,如[kddummy_...
3. 集合类型:PL/SQL支持数组、关联数组和集合,允许一次处理多个数据项。 4. 引用游标:允许将游标作为参数传递,实现更灵活的代码设计。 5. 表达式索引:在创建索引时可以包含函数或表达式,加速复杂查询。 五、...
- **错误描述**:多次尝试使用无效的凭据登录数据库。 - **解决方案**:停止当前操作,重启数据库工具,并使用正确的用户名和口令重新登录。 ### EXP-00006 内部矛盾错误 - **错误描述**:导出过程中检测到数据...
### Oracle init.ora 配置详解 在Oracle数据库管理中,`init.ora`文件扮演着极其重要的角色,它主要用于存储数据库实例级别的参数配置。这些参数对于数据库的启动、运行及性能优化至关重要。下面我们将对init.ora...
**Oracle 存储过程**是数据库管理中一种重要的编程组件,它允许数据库管理员和开发者在Oracle数据库中编写一组预编译的SQL和PL/SQL语句。存储过程可以执行复杂的数据处理任务,提高应用程序的性能,并减少网络流量,...
本文将重点分析Oracle中的一个常见错误代码——ORA-01578,并提供相应的解决策略。 ORA-01578错误表示Oracle数据块损坏,这可能是由多种原因导致的,包括但不限于: 1. 硬件I/O错误:硬盘驱动器或其他存储设备可能...
在本例中,错误提示为ORA-08102和ORA-00600,这两个错误通常与索引不一致有关。为解决这个问题,需要对出现问题的索引进行重建,若索引无法重建,可能需要清空表(TRUNCATE)后再导入数据。 接着,当日志错误排除后...