同事报数据库连接不上:
检查了一下,发现数据库没有open。
tail -f alert*.log
alter database open
Wed Mar 18 17:04:16 2009
ORA-1507 signalled during: alter database open ...
Wed Mar 18 17:04:20 2009
alter database mount
Wed Mar 18 17:04:20 2009
ORA-00202: control file: '/dbdata1/ngdb/dbdg1_1_ctl1'
ORA-17503: ksfdopn:3 Failed to open file /dbdata1/ngdb/dbdg1_1_ctl1
ORA-17500: ODM err:ODM ERROR V-41-3-2-180-2 Filesystem not mounted with ODM/QIO support
ORA-205 signalled during: alter database mount ...
因为这个是BCV库,怀疑BCV没成功,文件系统没有挂上来或者出现了坏块,以前就出现过几次逻辑坏块,导致数据库无法打开的情况,当然报错不是这个样子的。
检查文件系统已经挂载。
# bdf
Filesystem kbytes used avail %used Mounted on
/dev/vx/dsk/dbdg1/dg1_lv
926720000 356302284 534767115 40% /dbdata1
检查BCV的日志也没有异常。
测试了控制文件也可以读取,文件系统也能正常读写。
dbbcv:/dbdata1/ngdb>cp dbdg1_1_ctl1 dbdg1_1_ctl1.bak
dbbcv:/dbdata1/ngdb>ls
dbdg1_1_ctl1 dbdg1_1_rd51 dbdg1_8_tmp1 dbdg1_8_udo31
dbdg1_1_ctl1.bak dbdg1_1_rd91 dbdg1_8_udo11 dbdg1_8_udo41
dbdg1_1_rd11 dbdg1_4_sys dbdg1_8_udo21 spfilengdb.ora
dbv检查控制文件也正常
>dbv file=dbdg1_1_ctl1
DBVERIFY: Release 10.2.0.4.0 - Production on Wed Mar 18 16:52:50 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBV-00103: Specified BLOCKSIZE (8192) differs from actual (16384)
dbbcv:/dbdata1/ngdb>dbv file=dbdg1_1_ctl1 blocksize=16384
DBVERIFY: Release 10.2.0.4.0 - Production on Wed Mar 18 16:53:06 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
DBVERIFY - Verification starting : FILE = dbdg1_1_ctl1
DBVERIFY - Verification complete
Total Pages Examined : 1804
Total Pages Processed (Data) : 0
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing (Index): 0
Total Pages Processed (Other): 466
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 1338
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Highest block SCN : 602871 (65535.602871)
结果后来才发现,原来是Veritas 的license过期了,导致ODM无法使用。
原来以为License过期会导致文件系统也mount不上来,但这里有几个巧合。
因为这里的环境是HP11.31,自带的vxfs,自己本身也带了vxfs一些基本功能的unlimited license。
所以实际mount的时候是hp vxfs mount上来的,对文件系统的读写也是基于HP的vxfs的。
但是Oracle启用了ODM,所以oracle读取数据文件的时候,是需要通过ODM的,ODM已经过期,所以无法读写控制文件。
如果我们把ODM给disable掉,也就能读取了。
测试如下:
/oracle/app/oracle/product/10.2.0/db/lib>rm libodm10.so
/oracle/app/oracle/product/10.2.0/db/lib>cp libodm10.so.orig libodm10.so
/oracle/app/oracle/product/10.2.0/db/lib>sqlplus '/as sysdba'
SQL*Plus: Release 10.2.0.4.0 - Production on Thu Mar 19 21:07:12 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> startup ;
ORACLE instance started.
Total System Global Area 5771362304 bytes
Fixed Size 2064504 bytes
Variable Size 1275072392 bytes
Database Buffers 4462739456 bytes
Redo Buffers 31485952 bytes
Database mounted.
Database opened.
SQL>
SQL> select count(*) from v$session;
COUNT(*)
----------
19
SQL> create table test as select * from dba_objects;
Table created.
SQL> drop table test ;
Table dropped.
SQL>
在alert日志中也没有出现Oracle instance running with ODM信息,可以确认没有使用ODM。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10867315/viewspace-573166/ ,如需转载,请注明出处,否则将追究法律责任。