首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle NID 工具修改資料庫名稱與 DBID 完整實戰指南

     編輯:Oracle 資料庫基礎

適用場景

  • 資料庫命名不規範需標準化
  • 克隆資料庫後需修改名稱避免衝突
  • Data Guard 環境備庫命名調整
  • 測試環境從生產復原後需區分身份

核心影響:修改控制檔、資料檔標頭、重置 DBID。操作前必須完整備份!

實戰案例:ORATEST → TEST (10.2.0.3)

步驟 0:記錄變更前狀態

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

步驟 1:關閉資料庫並啟動至 MOUNT

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.

步驟 2:執行 NID 修改

$ 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.

步驟 3:處理驗證錯誤 (NID-00600)

此錯誤常見於臨時表空間或唯讀表空間驗證階段。解決步驟:

-- 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

若持續報錯,檢查:

  • 臨時表空間是否正常 (可重建)
  • 唯讀表空間是否存在 (暫設 READ WRITE)
  • 控制檔多路鏡像是否一致

步驟 4:修改參數檔並啟動

-- 修改 init.ora / spfile
*.db_name = 'TEST'
*.instance_name = 'TEST'
*.service_names = 'TEST'

-- 重啟
SHUTDOWN IMMEDIATE;
STARTUP;

步驟 5:驗證變更結果

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  -- 已變更

後續必做清單

  1. 更新 tnsnames.ora / listener.ora 服務名稱
  2. 修改應用端連線字串 (SERVICE_NAME/SID)
  3. Data Guard 環境:重新配置備庫連線、重啟 MRP
  4. RMAN 目錄:UNREGISTER DATABASE 舊 DBID,重新註冊
  5. Enterprise Manager:重新發現目標、修正監控設定
  6. 備份腳本:更新 DB_NAME 變數、驗證備份可恢復性
  7. 執行完整備份建立新基準線

NID 參數速查

參數說明
TARGET連線字串,如 sys/pwd@tns
DBNAME新資料庫名稱 (最多 8 字元)
LOGFILE操作日誌檔路徑
REVERTYES:僅恢復先前失敗的 NID 操作
SETNAMEYES:僅修改名稱,不修改 DBID (罕用)
APPEND日誌追加模式

風險與限制

  • ❌ 無法修改資料庫字符集 (需重建)
  • ❌ 無法修改區塊大小 (需重建)
  • ❌ 已啟用 TDE 加密的資料庫需特殊處理
  • ❌ 實體備份為基礎的複製資料庫優先用 RMAN DUPLICATE
  • ✅ 僅修改名稱/DBID 的輕量級操作,NID 為首選

NID 以「修改控制檔+資料檔標頭+重置 DBID」三位一體實現資料庫身份重塑。標準化流程:備份→MOUNT→NID→參數檔→驗證→後續清單→完整備份。嚴守流程,讓資料庫改名成為可控常規操作而非冒險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved