在使用ADRCI命令的时候,碰到了这个错误。
错误信息如下:
bash-3.00$ adrci
ADRCI: Release 11.1.0.6.0 - Beta on星期五4月3 00:57:35 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
ADR base = "/data/oracle"
adrci> show home
ADR Homes:
diag/rdbms/test11g/test11g
diag/clients/user_oracle/host_1520143511_11
diag/clients/user_unknown/host_411310321_11
diag/tnslsnr/netdb1/listener
adrci> set home diag/rdbms/test11g/test11g
adrci> show alert
ADR Home = /data/oracle/diag/rdbms/test11g/test11g:
*************************************************************************
DIA-48216: Field Len Exceeds Max Field Length [5] [0] [20] [20]
这时就报了这个错误,如果在执行其他的命令,比如show incident,那么刚才没有显示的show alert的部分内容就会显示出来:
adrci> show incident
chived
ORA-19502: write error on file "", block number (block size=)
ORA-00312: online log 1 thread 1: '/data/oracle/oradata/test11g/redo01.log'
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance test11g - Archival Error
ORA-16014: log 1 sequence# 1351 not archived, no available destinations
ORA-00312: online log 1 thread 1: '/data/oracle/oradata/test11g/redo01.log'
Errors in file /data/oracle/diag/rdbms/test11g/test11g/trace/test11g_arc1_2030.trc:
ORA-16014: log 1 sequence# 1351 not archived, no available destinations
ORA-00312: online log 1 thread 1: '/data/oracle/oradata/test11g/redo01.log'
2008-07-07 16:48:19.564000 +08:00
ARC2: Closing local archive destination LOG_ARCHIVE_DEST_1: '/data/oradata/test11g/archivelog/1_1351_639087572.dbf' (error 19502)
(test11g)
Errors in file /data/oracle/diag/rdbms/test11g/test11g/trace/test11g_arc2_2032.trc:
ORA-19502: write error on file "/data/oradata/test11g/archivelog/1_1351_639087572.dbf", block number 18433 (block size=512)
ORA-27063: number of bytes read/written is incorrect
SVR4 Error: 28: No space left on device
Additional information: -1
Additional information: 1048576
ORA-19502: write error on file "/data/oradata/test11g/archivelog/1_1351_639087572.dbf", block number 1 (block size=512)
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance test11g - Archival Error
ORA-16038: log 1 sequence# 1351 cannot be archived
ORA-19502: write error on file "", block number (block size=)
ORA-00312: online log 1 thread 1: '/data/oracle/oradata/test11g/redo01.log'
Errors in file /data/oracle/diag/rdbms/test11g/test11g/trace/test11g_arc2_2032.trc:
ORA-16038: log 1 sequence# 1351 cannot be archived
ORA-19502: write error on file "", block number (block size=)
ORA-00312: online log 1 thread 1: '/data/oracle/oradata/test11g/redo01.log'
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance test11g - Archival Error
ORA-16014: log 1 sequence# 1351 not archived, no available destinations
ORA-00312: online log 1 thread 1: '/data/oracle/oradata/test11g/redo01.log'
Errors in file /data/oracle/diag/rdbms/test11g/test11g/trace/test11g_arc2_2032.trc:
ORA-16014: log 1 sequence# 1351 not archived, no available destinations
ORA-00312: online log 1 thread 1: '/data/oracle/oradata/test11g/redo01.log'
ADR Home = /data/oracle/diag/rdbms/test11g/test11g:
*************************************************************************
INCIDENT_ID PROBLEM_KEY CREATE_TIME
------------ --------------------------- ----------------------------------
18318 ORA 7445 [_memcpy()+120] 2008-12-26 00:18:15.238140 +08:00
18199 ORA 7445 [_memcpy()+120] 2008-12-26 00:15:13.928626 +08:00
18198 ORA 7445 [_memcpy()+120] 2008-12-26 00:11:11.145517 +08:00
15989 ORA 600 [17092] 2008-10-14 02:32:16.507569 +08:00
15973 ORA 600 [kupdls_rdData-01] 2008-10-05 08:00:23.783814 +08:00
15960 ORA 600 [kupdls_rdData-01] 2008-10-14 02:07:26.658728 +08:00
15959 ORA 600 [kupdls_rdData-01] 2008-10-08 01:05:53.160055 +08:00
15958 ORA 600 [kupdls_rdData-01] 2008-10-08 01:02:03.092177 +08:00
15957 ORA 600 [kupdls_rdData-01] 2008-10-05 08:01:30.902312 +08:00
15910 ORA 600 [kupdls_rdData-01] 2008-10-08 01:09:02.958271 +08:00
15909 ORA 600 [kupdls_rdData-01] 2008-10-08 01:01:20.237790 +08:00
15893 ORA 600 [729] 2008-09-25 18:23:24.133284 +08:00
11019 ORA 600 [15851] 2008-06-24 16:39:06.831932 +08:00
13 rows fetched
执行一些查询的操作也会报错:
adrci> show alert -p "message_text like 'ORA-00600%'"
ADR Home = /data/oracle/diag/rdbms/test11g/test11g:
*************************************************************************
DIA-48216: Field Len Exceeds Max Field Length [5] [0] [20] [20]
查询了一下metalink文档,Oracle确认是bug,Oracle在文档Doc ID:784840.1中进行了比较详细的描述,问题是XML文档/alert/log.xml文件的格式出现了错误导致了这个问题。
Oracle给出的一个解决问题的办法是备份这个文件,然后清空里面错误的结构,从而避免这个错误的产生。
根据上面显示的错误信息,基本上确认是由于数据库中无法归档错误,导致了同一个时间点产生了大量的错误信息,导致Oracle在处理这些错误时,超过了MESSAGE_TEXT text(2049)的长度限制。
备份老的log.xml,取原文件的后10000条记录作为新的log.xml:
bash-3.00$ mv log.xml log.xml.bak
bash-3.00$ tail -10000 log.xml.bak > log.xml
编辑新的log.xml文件,删除文件开头部分xml不对应的部分,然后退出adrci,重现登陆:
adrci> exit
bash-3.00$ adrci
ADRCI: Release 11.1.0.6.0 - Beta on星期五4月3 01:43:29 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
ADR base = "/data/oracle"
adrci> set home diag/rdbms/test11g/test11g
adrci> show alert -p "message_text like 'ORA-00600%'"
ADR Home = /data/oracle/diag/rdbms/test11g/test11g:
*************************************************************************
问题消失。