11g DBNEWID工具修改DBID碰到的問題

yangtingkun發表於2009-04-08

在使用11gDBNEWID工具時,碰到了資料庫無法正常關閉的問題。

11g中成功使用DBNEWID的案例:http://yangtingkun.itpub.net/post/468/481871

 

 

操作步驟如下。將資料庫正常關閉,且置於MOUNT狀態:

bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on 星期六 4 4 01:38:33 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


連線到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select dbid, name from v$database;

      DBID NAME
---------- ------------------
 790993044 TEST11G

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> startup mount
ORACLE
例程已經啟動。

Total System Global Area 5279498240 bytes
Fixed Size                  2094528 bytes
Variable Size            3192597056 bytes
Database Buffers         2080374784 bytes
Redo Buffers                4431872 bytes
資料庫裝載完畢。

下面利用DBNEWID修改資料庫的IDDBNAME

SQL> host
$ nid target=/ dbname=new11g

DBNEWID: Release 11.1.0.6.0 - Production on 星期六 4 4 01:42:36 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

已連線資料庫 TEST11G (DBID=790993044)

已連線伺服器版本 11.1.0

資料庫中的控制檔案數:
    /data/oracle/oradata/test11g/control01.ctl
    /data/oracle/oradata/test11g/control02.ctl
    /data/oracle/oradata/test11g/control03.ctl


以下資料檔案是隻讀的:
    /data/oracle/oradata/test11g/test01.dbf (6)
此實用程式必須能夠寫入這些檔案。

是否將資料庫 ID 和資料庫名 TEST11G 更改為 NEW11G? (Y/[N]) => y

操作繼續進行
將資料庫 ID 790993044 更改為 2654798284
將資料庫名從 TEST11G 更改為 NEW11G
   
控制檔案 /data/oracle/oradata/test11g/control01.ctl - 已修改
   
控制檔案 /data/oracle/oradata/test11g/control02.ctl - 已修改
   
控制檔案 /data/oracle/oradata/test11g/control03.ctl - 已修改
   
資料檔案 /data/oracle/oradata/test11g/system01.dbf - dbid 已更改, 已寫入新名稱
   
資料檔案 /data/oracle/oradata/test11g/sysaux01.dbf - dbid 已更改, 已寫入新名稱
   
資料檔案 /data/oracle/oradata/test11g/undotbs01.dbf - dbid 已更改, 已寫入新名稱
   
資料檔案 /data/oracle/oradata/test11g/users01.dbf - dbid 已更改, 已寫入新名稱
   
資料檔案 /data/oracle/oradata/test11g/yangtk01.dbf - dbid 已更改, 已寫入新名稱
   
資料檔案 /data/oracle/oradata/test11g/test01.dbf - dbid 已更改, 已寫入新名稱
   
資料檔案 /data/oracle/oradata/test11g/temp01.dbf - dbid 已更改, 已寫入新名稱
   
控制檔案 /data/oracle/oradata/test11g/control01.ctl - dbid 已更改, 已寫入新名稱
   
控制檔案 /data/oracle/oradata/test11g/control02.ctl - dbid 已更改, 已寫入新名稱
   
控制檔案 /data/oracle/oradata/test11g/control03.ctl - dbid 已更改, 已寫入新名稱

NID-00600: 內部錯誤 - [28] [3113] [0] [0]


在驗證時更改資料庫名和 ID 失敗 - 資料庫保持原樣。
DBNEWID -
已完成, 但出現驗證錯誤。

$

在上面那個NID-600錯誤發生之前,nid一直沒有響應,在alert檔案中可以看到DBNEWID工具所寫資訊:

*** DBNEWID utility started ***
DBID will be changed from 790993044 to new DBID of 2654798284 for database TEST11G
DBNAME will be changed from TEST11G to new DBNAME of NEW11G
Starting datafile conversion
Setting recovery target incarnation to 1
Datafile conversion complete
Database name changed to NEW11G.
Modify parameter file and generate a new password file before restarting.
Database ID for database NEW11G changed to 2654798284.
All previous backups and archived redo logs for this database are unusable.
Database has been shutdown, open with RESETLOGS option.
Succesfully changed database name and ID.
*** DBNEWID utility finished succesfully ***

除此以外,還可以看到,Oracle在關閉資料庫,但是出現了異常,導致資料庫沒有正常的關閉:

All dispatchers and shared servers shutdown
Sat Apr 04 01:47:56 2009
SHUTDOWN: Active processes prevent shutdown operation
Sat Apr 04 01:53:00 2009
SHUTDOWN: Active processes prevent shutdown operation
Sat Apr 04 01:58:04 2009
SHUTDOWN: Active processes prevent shutdown operation
Sat Apr 04 02:03:08 2009
SHUTDOWN: Active processes prevent shutdown operation
Sat Apr 04 02:08:12 2009
SHUTDOWN: Active processes prevent shutdown operation

長時間等待沒有響應後,手工殺掉了一個後臺程式,導致了上面nid出現了NID-600錯誤:

bash-3.00$ ps -ef|grep test11g
  oracle  5351     1   0 01:40:38 ?           0:00 ora_smon_test11g
  oracle  5347     1   0 01:40:38 ?           0:00 ora_lgwr_test11g
  oracle  5327     1   0 01:40:37 ?           0:02 ora_vktm_test11g
  oracle  5349     1   0 01:40:38 ?           0:01 ora_ckpt_test11g
  oracle  5331     1   0 01:40:38 ?           0:00 ora_diag_test11g
  oracle  5345     1   0 01:40:38 ?           0:00 ora_dbw1_test11g
  oracle  5339     1   0 01:40:38 ?           0:02 ora_dia0_test11g
  oracle  5353     1   0 01:40:38 ?           0:00 ora_reco_test11g
  oracle  5335     1   0 01:40:38 ?           0:00 ora_psp0_test11g
  oracle  5343     1   0 01:40:38 ?           0:00 ora_dbw0_test11g
  oracle  6338  5472   0 02:11:01 pts/2       0:00 grep test11g
  oracle  5333     1   0 01:40:38 ?           0:00 ora_dbrm_test11g
  oracle  5325     1   0 01:40:37 ?           0:03 ora_pmon_test11g
  oracle  5341     1   0 01:40:38 ?           0:00 ora_mman_test11g
  oracle  5414  5413   0 01:42:37 ?           0:01 oracletest11g (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
bash-3.00$ kill -9 5341

雖然DBNEWID報錯,但是修改工作已經完成,修改初始化引數後,透過OPEN RESETLOGS可以順利開啟資料庫:

SQL> shutdown immediate
ORA-03135:
連線失去聯絡
SQL> conn / as sysdba
已連線到空閒例程。
SQL> startup
ORACLE
例程已經啟動。

Total System Global Area 5279498240 bytes
Fixed Size                  2094528 bytes
Variable Size            3192597056 bytes
Database Buffers         2080374784 bytes
Redo Buffers                4431872 bytes
ORA-01103: ?????????? ''NEW11G'' ?? ''TEST11G''


SQL> alter system set db_name = new11g scope = spfile;

系統已更改。

SQL> shutdown immediate
ORA-01507: ??????


ORACLE
例程已經關閉。
SQL> startup mount
ORACLE
例程已經啟動。

Total System Global Area 5279498240 bytes
Fixed Size                  2094528 bytes
Variable Size            3192597056 bytes
Database Buffers         2080374784 bytes
Redo Buffers                4431872 bytes
資料庫裝載完畢。
SQL> alter database open resetlogs;

資料庫已更改。

SQL> select dbid, name from v$database;

      DBID NAME
---------- ------------------
2654798284 NEW11G

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
NEW11G.NETDB

可以看到DBIDDB_NAME都已經修改成功了。

經過多次的測試,對比文章開頭給出的成功的案例,發現導致問題的原因很簡單,由於在執行NID命令的時候,沒有退出SQLPLUS,也就是說SYS使用者的連線還存在,導致NID在關閉資料庫的時候出現了等待,而類似的bug描述在以前也碰到過:http://yangtingkun.itpub.net/post/468/469358

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-586803/,如需轉載,請註明出處,否則將追究法律責任。

相關文章