新员工培训环境准备中,碰见的两个ORA-600错误

下周要为新员工介绍Oracle数据库,为了让课程更接地气,准备了虚拟机环境,用于实验和练习,在此过程中出现了两个ORA-600的错误,偶然中又有必然,记录于此。

操作过程:

1. 我在MAC上创建完成虚拟机环境,未关闭虚拟机操作系统。

2. 用移动硬盘,拷贝了次环境。

3. DELL笔记本中打开VMWare,引用移动硬盘中的环境。首先提示了这个选项,我选择的是“我已移动该虚拟机”,

两者区别:

“我已移动该虚拟机”:网卡MAC地址会保持不变,但若复制本地,同时开机在一个vmnet可能造成冲突。

”我已复制该虚拟机“:网卡MAC地址会变化,即虚拟机网卡物理地址,是新生成。

4. 打开虚拟机后,需要启动Oracle数据库,

SQL> startup
ORACLE instance started.
...
Database mounted.
ORA-00600: internal error code, arguments: [kcratr_scan_lastbwr], [], [], [],[], [], [], [], [], [], [], []

执行startup命令的时候,提示了ORA-00600错误,参数名称是kcratr_scan_lastbwr。

放到以前,此时第一个念头,必定是重新拷贝一份,是不是就能解决了。的确,有可能就解决了,但这就是“知其然,不知其所以然”,不是一名严谨的技术人员,解决问题的方法,于是乎需要探究一下。

ORA-00600是Oracle中非常著名的一个错误号,同时可能是一个会让你非常头疼的一个错误号,类似于Java语言中抛出的异常,

The ORA-600 error is the generic internal error number for Oracle program exceptions. It indicates that a process has encountered a low-level, unexpected condition.

他的通用提示信息如下,

ORA 600 "internal error code, arguments: [%s], [%s],[%s], [%s], [%s]"

其中,第一个参数是一个内部信息数字或字符串类型。这个参数,以及数据库版本号,非常重要,用这些信息,可以明确问题根本原因,以及对系统的潜在影响。其他参数,则用来提供进一步的信息(例如内部变量的值等)。非常详细的堆栈信息,则会记录于ORA-600的trace文件中。在Java语言中,抛出的异常,通常也会有一些提示信息、堆栈信息。

这篇文章《ORA-600/ORA-7445/ORA-700 Error Look-up Tool (文档 ID 153788.1)》提供了针对这几种Oracle错误的快捷查找工具,

回到上面描述的问题,查看alert日志,记录的错误信息如下所示,

ALTER DATABASE OPEN

Beginning crash recovery of 1 threads

Started redo scan

Hex dump of (file 3, block 144) in trace file /u01/app/oracle/diag/rdbms/bisal/BISAL/trace/BISAL_ora_3392.trc

Reading datafile '/u01/app/oracle/oradata/BISAL/undotbs01.dbf' for corruption at rdba: 0x00c00090 (file 3, block 144)

Reread (file 3, block 144) found same corrupt data (logically corrupt)

Write verification failed for File 3 Block 144 (rdba 0xc00090)

Errors in file /u01/app/oracle/diag/rdbms/bisal/BISAL/trace/BISAL_ora_3392.trc  (incident=2554):

ORA-00600: internal error code, arguments: [kcratr_scan_lastbwr], [], [], [], [], [], [], [], [], [], [], []

Incident details in: /u01/app/oracle/diag/rdbms/bisal/BISAL/incident/incdir_2554/BISAL_ora_3392_i2554.trc

Use ADRCI or Support Workbench to package the incident.

See Note 411.1 at My Oracle Support for error and packaging details.

Aborting crash recovery due to error 600

Errors in file /u01/app/oracle/diag/rdbms/bisal/BISAL/trace/BISAL_ora_3392.trc:

ORA-00600: internal error code, arguments: [kcratr_scan_lastbwr], [], [], [], [], [], [], [], [], [], [], []

Errors in file /u01/app/oracle/diag/rdbms/bisal/BISAL/trace/BISAL_ora_3392.trc:

ORA-00600: internal error code, arguments: [kcratr_scan_lastbwr], [], [], [], [], [], [], [], [], [], [], []

ORA-600 signalled during: ALTER DATABASE OPEN...

Dumping diagnostic data in directory=[cdmp_20170901062027], requested by (instance=1, osid=3392), summary=[incident=2554].

Fri Sep 01 06:21:24 2017

Sweep [inc][2554]: completed

Sweep [inc2][2554]: completed

提示open数据库阶段,读取undotbs01.dbf回滚表空间数据文件,3号文件144号块出现了逻辑坏块。

MOS这篇文章《Bug 9584943 - Crash / recovery failure due to lost write even if mirror has a good image (文档 ID 9584943.8)》介绍了这种ORA-00600错误,

指出即使镜像拷贝正常,但由于缺失一部分写入,导致实例恢复失败。读取错误的文件头,能毁坏一个正常的镜像拷贝。这种情况下,可能会抛出这两种错误,ORA-600 [kcratr_scan_lostwrt]或者ORA-600 [kcratr_scan_lastbwr]。

回想一下,从MAC中拷贝出的虚拟机,是未关闭状态,但从DELL打开移动硬盘的镜像,则是关闭状态,需要重新开机,换句话说,这就是异常断电的场景,此时log buffer中的redo信息未必来得及触发写出条件,即持久化至在线重做日志,当重新开启数据库的时候,由于不是正常关闭数据库,因此需要执行实例恢复,我们知道,实例恢复包括两个阶段,一是利用日志文件中的redo信息,进行交易的前滚操作,恢复到异常断电时刻的状态,此时数据库包含已提交和未提交两种类型的改变向量,二是利用UNDO表空间中的数据进行交易回滚操作,阶段一中除了恢复出了已提交的交易,还恢复出了未提交的事务,此时就会执行rollback操作,回滚所有未提交的事务,此刻数据库中仅包含已提交的事务,状态一致,才能继续open数据库。

上述kcratr_scan_lastbwr则是因为执行实例恢复,第二个阶段,即读取回滚数据的时候,发现了逻辑坏块,因此无法执行,导致open失败。

《ORA-600 [kcratr_scan_lastbwr] (文档 ID 1267231.1)》这篇文章则介绍了这种ORA-00600错误的解决方案,即需要做数据库的逻辑恢复,

数据库启动到mount状态,执行recover database操作,然后open数据库。

按此操作执行,

SQL> startup mount;

ORACLE instance started.

...

SQL> recover database;

Media recovery complete.

...

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1],

[7], [160384], [160414], [], [], [], [], [], [], []

open的时候,又报错了,还是ORA-00600,但这次参数不同,是kcratr_nab_less_than_odr。

查看alert日志,

alter database open

Beginning crash recovery of 1 threads

Started redo scan

Completed redo scan

read 47 KB redo, 0 data blocks need recovery

Errors in file /u01/app/oracle/diag/rdbms/bisal/BISAL/trace/BISAL_ora_3464.trc  (incident=3755):

ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [7], [160384], [160414], [], [], [], [], [], [], []

Incident details in: /u01/app/oracle/diag/rdbms/bisal/BISAL/incident/incdir_3755/BISAL_ora_3464_i3755.trc

Use ADRCI or Support Workbench to package the incident.

See Note 411.1 at My Oracle Support for error and packaging details.

Aborting crash recovery due to error 600

Errors in file /u01/app/oracle/diag/rdbms/bisal/BISAL/trace/BISAL_ora_3464.trc:

ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [7], [160384], [160414], [], [], [], [], [], [], []

Errors in file /u01/app/oracle/diag/rdbms/bisal/BISAL/trace/BISAL_ora_3464.trc:

ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr], [1], [7], [160384], [160414], [], [], [], [], [], [], []

ORA-600 signalled during: alter database open...

Fri Sep 01 06:26:24 2017

Dumping diagnostic data in directory=[cdmp_20170901062624], requested by (instance=1, osid=3464), summary=[incident=3755].

Fri Sep 01 06:26:32 2017

Sweep [inc][3755]: completed

Sweep [inc2][3755]: completed

再次检索MOS,《Alter database open fails with ORA-00600 kcratr_nab_less_than_odr (文档 ID 1296264.1)》这篇文章,详细介绍了kcratr_nab_less_than_odr错误信息,首先是现象,

After Power Fail Alter database open fails with
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr]

# The Database can't open at this Point. In the corresponding Tracefile we can find this Error Callstack:

dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0)
----- Current SQL Statement for this session (sql_id=1h50ks4ncswfn) -----
ALTER DATABASE OPEN

----- Call Stack Trace -----
ksedst1 <- ksedst <- dbkedDefDump <- ksedmp <- dbgexPhaseII <- dbgexProcessError <- dbgePostErrorKGE  <- kgeasnmierr <- kcratr_odr_check  <- kcratr <- kctrec <- kcvcrv <- kcfopd <- adbdrv <- opiexe <- opiosq0 <- kpoal8 <- opiodr <- ttcpip <- opitsk <- opiino <- opiodr <- opidrv <- sou2o <- opimai_real <- ssthrdmain <- main <- start

指出异常断电后,open数据库则会报这个错误。此时数据库无法open,并且trace文件中会记录以上调用栈。

给出了一些原因,

There was a power failure causing logical corruption in controlfile

This Problem is caused by Storage Problem of the Database Files.
The Subsystem (eg. SAN) crashed while the Database was open.
The Database then crashed because the Database Files were not accessible anymore.
This caused a lost Write into the Online RedoLogs and/or causing logical corruption in controlfile so Instance Recovery is not possible and raising the ORA-600.

指出是由于异常断电,导致控制文件,出现了逻辑损坏。诱因可能是以下几种之一:

1. 数据库文件的存储问题。

2. 数据库open状态下,例如SAN子系统崩溃。

3. 由于数据库文件不可访问,导致数据库崩溃。

4. 在线重做日志写入丢失,或者控制文件出现逻辑损坏,以至于实例恢复不可执行,也会出现这种ORA-00600错误信息。

根据以上信息,我的问题,是由4这个诱因引起的,由于开机拷贝,导致在线重做日志,并未完成所有持久化,导致open数据库,无法执行实例恢复操作。

解决方案一

Do cancel based reocvery, and apply 'current online redolog' manually

做一次不完全恢复,并手工应用当前的在线重做日志。

首先检索控制文件名称,以及当前的日志文件,

SQL> Show parameter control_files

NAME     control_files

TYPE       string

VALUE     /u01/app/oracle/oradata/BISAL/control01.ctl, /u01/app/oracle/oradata/BISAL/control02.ctl

SQL> select a.member, a.group#, b.status from v$logfile a ,v$log b where a.group#=b.group# and b.status='CURRENT' ;

MEMBER       /u01/app/oracle/oradata/BISAL/redo01a.log

GROUP#       1

STATUS         CURRENT

执行shutdown abort,

SQL> shutdown abort

ORACLE instance shut down.

操作系统中备份控制文件,接着将数据库,启动mount状态,执行不完全恢复,输入当前使用的在线重做日志文件名信息,完成介质恢复,

SQL> startup mount;

ORACLE instance started.

SQL> recover database using backup controlfile until cancel ;

ORA-00279: change 243562 generated at 08/30/2017 08:10:54 needed for thread 1

ORA-00289: suggestion :

/u01/app/oracle/fast_recovery_area/BISAL/archivelog/2017_09_01/o1_mf_1_7_%u_.arc

ORA-00280: change 243562 for thread 1 is in sequence #7

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

/u01/app/oracle/oradata/BISAL/redo01a.log

Log applied.

Media recovery complete.

从alert日志看,

ALTER DATABASE   MOUNT

Successful mount of redo thread 1, with mount id 286455927

Database mounted in Exclusive Mode

Lost write protection disabled

Completed: ALTER DATABASE   MOUNT

Fri Sep 01 06:36:57 2017

ALTER DATABASE RECOVER  database using backup controlfile until cancel

Media Recovery Start

Serial Media Recovery started

ORA-279 signalled during: ALTER DATABASE RECOVER  database using backup controlfile until cancel   ...

Fri Sep 01 06:37:16 2017

ALTER DATABASE RECOVER    LOGFILE '/u01/app/oracle/oradata/BISAL/redo01a.log'

Media Recovery Log /u01/app/oracle/oradata/BISAL/redo01a.log

Incomplete recovery applied all redo ever generated.

Recovery completed through change 243563 time 08/30/2017 08:10:54

Media Recovery Complete (BISAL)

Completed: ALTER DATABASE RECOVER    LOGFILE '/u01/app/oracle/oradata/BISAL/redo01a.log'

以resetlogs方式,open数据库,

SQL> alter database open resetlogs;

Database altered.

从alert日志看,

alter database open resetlogs

RESETLOGS after complete recovery through change 243563

Clearing online redo logfile 1 /u01/app/oracle/oradata/BISAL/redo01a.log

Clearing online log 1 of thread 1 sequence number 7

Clearing online redo logfile 1 complete

Clearing online redo logfile 2 /u01/app/oracle/oradata/BISAL/redo02a.log

Clearing online log 2 of thread 1 sequence number 5

Clearing online redo logfile 2 complete

Clearing online redo logfile 3 /u01/app/oracle/oradata/BISAL/redo03a.log

Clearing online log 3 of thread 1 sequence number 6

Clearing online redo logfile 3 complete

Resetting resetlogs activation ID 286366553 (0x11119b59)

Online log /u01/app/oracle/oradata/BISAL/redo01a.log: Thread 1 Group 1 was previously cleared

Online log /u01/app/oracle/oradata/BISAL/redo02a.log: Thread 1 Group 2 was previously cleared

Online log /u01/app/oracle/oradata/BISAL/redo03a.log: Thread 1 Group 3 was previously cleared

Fri Sep 01 06:39:57 2017

Setting recovery target incarnation to 2

Fri Sep 01 06:39:57 2017

Assigning activation ID 286455927 (0x1112f877)

Thread 1 opened at log sequence 1

Current log# 1 seq# 1 mem# 0: /u01/app/oracle/oradata/BISAL/redo01a.log

Successful open of redo thread 1

Fri Sep 01 06:39:57 2017

MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set

Fri Sep 01 06:39:57 2017

SMON: enabling cache recovery

[3636] Successfully onlined Undo Tablespace 2.

Undo initialization finished serial:0 start:688494 end:689074 diff:580 (5 seconds)

Dictionary check beginning

Dictionary check complete

Verifying file header compatibility for 11g tablespace encryption..

Verifying 11g file header compatibility for tablespace encryption completed

SMON: enabling tx recovery

Database Characterset is ZHS16GBK

No Resource Manager plan active

replication_dependency_tracking turned off (no async multimaster replication found)

Starting background process QMNC

Fri Sep 01 06:40:01 2017

QMNC started with pid=20, OS id=3664

LOGSTDBY: Validating controlfile with logical metadata

LOGSTDBY: Validation complete

Completed: alter database open resetlogs

Fri Sep 01 06:40:03 2017

db_recovery_file_dest_size of 2048 MB is 0.00% used. This is a

user-specified limit on the amount of space that will be used by this

database for recovery-related files, and does not reflect the amount of

space available in the underlying filesystem or ASM diskgroup.

Fri Sep 01 06:40:04 2017

Starting background process CJQ0

Fri Sep 01 06:40:04 2017

CJQ0 started with pid=22, OS id=3681

此时数据库已打开,可以执行一次正常关闭、打开操作,进行确认,

SQL> shutdown immediate;

SQL> startup;

解决方案二

Recreate the controlfile using the Controlfile recreation script

使用控制文件重建脚本,重建控制文件。

没有实操,直接展示一下文章的操作,

$ rman target /
rman> spool log to '/tmp/rman.log';
rman> list backup ;
rman> exit

# Keep this log handy

Go to sqlplus

SQL> Show parameter control_files

Keep this location handy.

SQL> oradebug setmypid
SQL> Alter session set tracefile_identifier='controlfilerecreate' ;
SQL> Alter database backup controlfile to trace noresetlogs;
SQL> oradebug tracefile_name ; --> This command will give the path and name of the trace file

Go to this location ,Open this trace file and select the controlfile recreation script with NOResetlogs option

SQL> Shutdown immediate;

Rename the existing controlfile to <originalname>_old ---> This is Important as we need to have a backup of existing controlfile since we plan to recreate it

SQL> Startup nomount

Now run the Controlfile recreation script with NO Resetlogs option.

SQL> Alter database open ;

For database version 10g and above

Once database is opened you can recatalog the rman backup information present in the list /tmp/rman.log using

Rman> Catalog start with '<location of backupiece>' ;

If backups are on tape, and you are not using a catalog, backups can be cataloged using information in:

How to Catalog Tape Backup Pieces (Doc ID 550082.1)

主要过程,是在RMAN中使用Alter database backup controlfile to trace noresetlogs,创建控制文件重建脚本,数据库启动至nomount状态,执行脚本,以非resetlogs方式,open数据库。

无论用上述何种方法,数据库open了,此时就应该做一次热备,下次再碰见这种情况,一旦上述两种方法不起作用,或者备份集不全,则可以从最近的一次备份,进行数据库的restore和recover,

Once the database has been opened using the Option a or Option b,  it is recommended to take a hot backup of the database.  The same steps are applicable to RAC if all instance are down with same error.

If  both Options (a|b) fails,  or you do not have the full set of files, then you have to restore and recover the Database from a recent Backup.

总结:

1. 对于虚拟机环境的拷贝,建议需要关闭操作系统,再拷贝文件,避免这种异常断电的场景。

2. ORA-00600是Oracle中的一种通用错误号,和普通ORA报错不同,可能会需要根据堆栈信息,才能进一步定位问题,MOS有工具可以方便检索,但终究还是需要靠积累和学习,才能从容面对更多的错误,对于我这样的小白来说,需要继续学习。

如果您觉得此篇文章对您有帮助,欢迎关注微信公众号:bisal的个人杂货铺,您的支持是对我最大的鼓励!共同学习,共同进步:)

时间: 2024-08-01 00:26:06

新员工培训环境准备中,碰见的两个ORA-600错误的相关文章

北京天云科技2011年第二季度新员工培训圆满结束

中云网北京6月15日讯 "这次培训活动组织得比较周详和全面.一方面,全国各地分公司的兄弟姐妹们聚在一起交流,挺难得的.另一方面,云技术日新月异,可能每一两个月就会有新的思想出现,公司总部能及时获取这些信息,但分公司了解这些就不会这么及时和全面.因此,希望公司能够定期组织这样的活动."北京天云融创科技有限公司济南分公司的张先生对中云网记者如是说. 而香港分公司的陈先生则表示,通过这次培训对天云科技充满了信心,"我十分看好天云科技,原因有二:一是公司背靠具有产业链优势的祥云基地,

新员工培训的十三条黄金法则

1.明确培养新员工的重要性--做事与做人培养新员工是每一位管理者都要共同面对的话题.没有社会经验,完全一张白纸,新员工开始自己的职业生涯.他们会受到最初在公司遇到的上司及前辈的影响.问题是,遇到的上司及前辈会是什么样的人呢?对他们的成长是否有正面影响呢?或者,他们会完全被那些不称职的上司毁掉?所以,培养新员工,有两点很关键.一是要交给新员工做事的方法.虽然给新员工安排的工作难度不大,但是必须要让他掌握合理的操作方法."做事的方法"会让新员工在尽可能短的时间里,克服潜意识里的自卑,获得自

phpcms 2008 sp4中一个表模型中不能出现两个地区的错误的修复

出现这个问题的原因是因为使用的了相同的js函数,函数名错误,导致了调用乱了,只要修改一个生成的界面的js就可以,最简单的办法,在函数上加入控件的ID,如何解决呢 在fields->areaid->form.inc.php中给函数加入控件的ID,最主要的是area_load与area_reload,这两个函数,修改完成后,还需要修改一下load.php这个文件,因为这个文件返回的是一个select控件,在select控件的onchange这个函数也需要调整成新的函数名,这样问题就解决了

探究客服中心新员工 “接地气”培训模式

一.当前新员工培训背景 新员工入职后先是进行统一安排的理论和实操培训,为接听话务打下扎实的理论基础,接下来分进部门,此时离直接服务客户尚有差距,新人具有可塑性强的特点,如何让其快速调整心态.转换角色.顺利实现话务接听?这个过渡期间的培训发挥了桥梁作用.面临呼叫中心90后为主流群体的人员现状,如何打破常规,摒弃刻板,研究出让新人觉得既有规矩.又充满乐趣的易接受的培训,是每位培训管理人员值得去思考的问题. 笔者在本文中置身于新入职员工角度,阐述了一套为该阶段的新人量身定做的创新培训流程--2CIP模

培训新员工值不值?

年轻人对于自己的第一份工作总是会抱有许多浪漫的幻想--比如薪水.工作内容等等.但或许最令人心酸的错误想法是,雇主会花时间培养他们的能力.埃森哲公司(Accenture)最近的一项调查发现,2013年即将毕业的大学生中,77%的人期待在第一份工作中接受正式培训.但在2011届和2012届的毕业生中,报告接受过培训的却只有48%.埃森哲公司人才与组织业务常务董事凯瑟琳•拉威尔说:"雇主希望毕业生们来到公司时已经具备相关的能力,但期望与现实之间总是存在差距."也就是说,很少有毕业生在来公司报

呼叫中心新员工离职谁的错

离职,对呼叫中心行业来说是司空见惯的事情,也是困扰整个行业的一大难题,而新员工离职往往又是员工离职中占比最大.较为集中发的情形.从某种意义上来讲,新员工入职时间不长,企业需要承担人员.招聘.培训等一系列成本.而新员工在培训期间,基本不能给公司带来利润,这是一个前期投资的过程,然而这个过程却总是困扰着管理者们. 最近,笔者所在企业作为储备招入一批新员工,1月份左右入的职,因为年后中心会迎来一个离职潮.但是这批人新人究竟能留下来多少,年后他们是不是能够按时返程上班,却是一个大大的问号.有关领导一直在

企业怎样留住新员工?

流水不腐,户枢不蠹.保持适当的员工流动率,不但可以优化公司组织的人员结构,提升企业在人力资源方面的竞争能力,而且对企业未来的发展起到有效的推动作用,帮助企业早日实现组织愿景.新员工是企业的新鲜血液,也是保持企业生机的源泉.新员工的加入,不但可解决企业的人员缺乏问题,而且也会为企业带来新的活力.然而,新员工过高的流失率,却使很多企业都处在招聘--流失--再招聘--再流失的循环之中,严重影响了企业的经营活动.那么,企业如何才能留住新员工,防止过多流失呢?一. 新员工招聘贵在"适合,而非"优

呼叫中心如何培养新员工

作为呼叫中心,应该如何去培养员工,特别是新员工的服务意识呢? 一.新员工的问题 (一)缺乏工作经验. 中国的呼叫中心产业发展快速,已逐渐趋于成熟,但人员流动性高.流失率高带来的人才短缺问题,已经成为困扰呼叫中心产业长期稳定发展的关键因素.现在,为招揽人才,呼叫中心已加入校园招聘行列,这也致使新进员工一般没有或者仅有较少的兼职工作经验,在就职初期较难摆正职业人心态. (二)缺乏专业态度. 新员工年轻.缺乏社会经验的特质,导致其在从事客户服务工作初期,遭遇吵嚷型.投诉或无理型客户时,易把自身设定在与

阿里感悟(十四)-如何带新员工(转)

引言 在阿里,每一位新员工进来之后都会有一位导师,导师一般都是团队中非常优秀的员工.有些部门可能不叫导师了,而是叫师兄,可能更亲切,但是我觉得导师更贴切. 导师指导新员工的过程,我觉得应该是一个PDCA的过程,即计划,执行,检查和总结.   第一.定计划 对于新员工一定要给帮主他们制定学习和工作计划,做到计划驱动学习,互联网开发要学的东西比较多,对于新员工生来说不知道该先学什么后学什么,学到什么程度.所以计划驱动比较重要,在工作和学习之前给新员工列一份详细的学习和工作计划,并询问下新员工这个计划