在本地建Standby时会遇到下面这个错误. 有几个库是从同一个源库拷贝出来, 今天在为他们在同一台机器上建Standby也遇到了这个问题, 这几个库拷出来后就没有改更过DB_NAME, 因此他们都是相同的, 只是实例名不同而已.
SQL> alter database mount standby database;
alter database mount standby database
*
ERROR at line 1:
ORA-01102: cannot mount database in EXCLUSIVE mode
其实这个问题和一个文件有关, Oracle数据库在运行着时会锁定生成或锁定一个文件. 发现在数据库运行着时, 用fuser可以看到有Oracle的进程在打开这个文件, 而在Windows中则不能删除这个文件. 如数据库PROD.
C:\oracle\product\10.2.0\database\hc_PROD.dat
/app/oracle/product/10.2.0/dbs/lkPROD
这个文件默认是从DB_NAME来生成的, 但是如果设了LOCK_NAME_SPACE值, 如改成PRODSTBY, 则这个文件名就变成了从LOCK NAME SPACE的值来生成. 如:
C:\oracle\product\10.2.0\database\hc_PRODSTBY.dat
/app/oracle/product/10.2.0/dbs/lkPRODSTBY
另外一个猜测想, 如果我们用一个Perl角本或其他程序锁定这个文件名, 也可以模拟出这个错误的, 还没有去验证这一点.
留言 (2)
遇到过一次,这个文件丢失导致数据库挂起。
Posted by eygle | Aug 22, 2007 4:16 PM
这个文件丢失以后, 怎么修复的, 比如 如何重新生成一个.
还是简单的restart 就行了?
Posted by 木匠 | Aug 23, 2007 12:55 PM