核心影響:修改控制檔、資料檔標頭、重置 DBID。操作前必須完整備份!
SQL> SHOW PARAMETER instance_name;
NAME TYPE VALUE
------------------- ----- -------
instance_name string ORATEST
SQL> SHOW PARAMETER db_name;
NAME TYPE VALUE
------------------- ----- -------
db_name string ORATEST
SQL> SELECT dbid FROM v$database;
DBID
----------
3213300265
SQL> SHUTDOWN IMMEDIATE;
Database closed. Database dismounted. Oracle instance shut down.
SQL> STARTUP MOUNT;
ORACLE instance started.
Total System Global Area 268435456 bytes
...
Database mounted.
$ nid TARGET=sys/password DBNAME=test
DBNEWID: Release 10.2.0.3.0 - Production
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to database ORATEST (DBID=3213300265)
Connected to server version 10.2.0
Control Files in database:
/u02/oradata/test/control01.ctl
/u02/oradata/test/control02.ctl
/u02/oradata/test/control03.ctl
Change database ID and database name ORATEST to TEST? (Y/[N]) => Y
Proceeding with Operation
Changing database ID from 3213300265 to 1976074532
Changing database name from ORATEST to TEST
Control File /u02/oradata/test/control01.ctl - modified
Control File /u02/oradata/test/control02.ctl - modified
Control File /u02/oradata/test/control03.ctl - modified
Datafile /u02/oradata/test/system01.dbf - dbid changed, wrote new name
Datafile /u02/oradata/test/undotbs01.dbf - dbid changed, wrote new name
Datafile /u02/oradata/test/sysaux01.dbf - dbid changed, wrote new name
Datafile /u02/oradata/test/users01.dbf - dbid changed, wrote new name
Datafile /u02/oradata/test/example01.dbf - dbid changed, wrote new name
Datafile /u02/oradata/test/temp01.dbf - dbid changed, wrote new name
Control File /u02/oradata/test/control01.ctl - dbid changed, wrote new name
Control File /u02/oradata/test/control02.ctl - dbid changed, wrote new name
Control File /u02/oradata/test/control03.ctl - dbid changed, wrote new name
NID-00600: Internal Error - [28] [12152] [0] [0]
Change of database name and ID failed during validation - database is intact.
DBNEWID - Completed with validation errors.
此錯誤常見於臨時表空間或唯讀表空間驗證階段。解決步驟:
-- 1. 重新啟動至 MOUNT
SQL> STARTUP MOUNT;
-- 2. 重新執行 NID (此時資料庫名已改為 TEST)
$ nid TARGET=sys/password DBNAME=test
-- 3. 或指定 LOGFILE 參數避開驗證問題
$ nid TARGET=sys/password DBNAME=test LOGFILE=nid.log
若持續報錯,檢查:
-- 修改 init.ora / spfile
*.db_name = 'TEST'
*.instance_name = 'TEST'
*.service_names = 'TEST'
-- 重啟
SHUTDOWN IMMEDIATE;
STARTUP;
SQL> SHOW PARAMETER db_name;
NAME TYPE VALUE
------------------- ----- -------
db_name string TEST
SQL> SHOW PARAMETER instance_name;
NAME TYPE VALUE
------------------- ----- -------
instance_name string TEST
SQL> SELECT dbid FROM v$database;
DBID
----------
1976074532 -- 已變更
tnsnames.ora / listener.ora 服務名稱UNREGISTER DATABASE 舊 DBID,重新註冊| 參數 | 說明 |
|---|---|
| TARGET | 連線字串,如 sys/pwd@tns |
| DBNAME | 新資料庫名稱 (最多 8 字元) |
| LOGFILE | 操作日誌檔路徑 |
| REVERT | YES:僅恢復先前失敗的 NID 操作 |
| SETNAME | YES:僅修改名稱,不修改 DBID (罕用) |
| APPEND | 日誌追加模式 |
NID 以「修改控制檔+資料檔標頭+重置 DBID」三位一體實現資料庫身份重塑。標準化流程:備份→MOUNT→NID→參數檔→驗證→後續清單→完整備份。嚴守流程,讓資料庫改名成為可控常規操作而非冒險。