首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 數據庫名與實例名修改完整指南:NID 工具實戰、參數文件調整、Windows 服務重建與監聽配置

     編輯:Oracle 資料庫相關知識

修改前準備與影響評估

影響範圍:
  • DBID 改變 → 所有歷史備份、歸檔日志失效,需重新全量備份
  • DB_NAME/INSTANCE_NAME/SERVICE_NAME 同步修改
  • Windows 服務、密碼文件、監聽配置、TNSNAMES 全鏈路更新
  • Data Guard、GoldenGate、RMAN 腳本、應用連接串全部需同步
前置條件:完整冷備份、確認維護窗口、通知所有下游系統

核心工具:NID (DBNEWID)

位置:$ORACLE_HOME/bin/nid (9iR2+ 內置)

操作步驟詳解

1. 記錄修改前參數

SQL> SHOW PARAMETER name;
NAME                 TYPE    VALUE
db_name              string  ORCL
instance_name        string  ORCL
service_names        string  ORCL
db_unique_name       string  ORCL

2. 關閉數據庫並掛載

SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;

3. 執行 NID 修改數據庫名

$ nid TARGET=sys/password DBNAME=NEWDB
DBNEWID: Release 19.0.0.0.0 - Production
Connected to database ORCL (DBID=1234567890)
Change database ID and database name ORCL to NEWDB? (Y/[N]) => Y
Proceeding with operation
Changing database ID from 1234567890 to 9876543210
Changing database name from ORCL to NEWDB
Control file ... modified
Datafile ... dbid changed, written new name
...
Database name changed to NEWDB.
Modify parameter file and generate new password file before restart.
Database NEWDB DBID changed to 9876543210.
All previous backups and archived logs are unusable.
Database must be opened with RESETLOGS option.
DBNEWID - Completed successfully.

4. 修改參數文件

-- 創建 PFILE 備份
SQL> CREATE PFILE='/tmp/init_newdb.ora' FROM SPFILE;
SQL> SHUTDOWN IMMEDIATE;

-- 編輯 PFILE 修改參數
*.db_name=NEWDB
*.instance_name=NEWDB
*.service_names=NEWDB
*.db_unique_name=NEWDB

5. 以新參數啟動並 RESETLOGS

SQL> STARTUP NOMOUNT PFILE='/tmp/init_newdb.ora';
SQL> CREATE SPFILE FROM PFILE='/tmp/init_newdb.ora';
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE OPEN RESETLOGS;

Windows 平台特殊處理:服務重建

Windows 下 V$INSTANCE.INSTANCE_NAME 由服務名決定,需重建服務。

1. 重建密碼文件

C:\> orapwd FILE=%ORACLE_HOME%\database\PWDNEWDB.ora PASSWORD=syspassword ENTRIES=10

2. 刪除舊服務

C:\> oradim -DELETE -SID ORCL

3. 創建新服務

C:\> oradim -NEW -SID NEWDB -INTPWD syspassword -STARTMODE AUTO -PFILE C:\tmp\init_newdb.ora

4. 設置環境變量並驗證

C:\> SET ORACLE_SID=NEWDB
C:\> sqlplus / as sysdba
SQL> SELECT instance_name FROM v$instance;  -- 應顯示 NEWDB

監聽器與網絡配置同步

1. 更新 listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = NEWDB)
      (ORACLE_HOME = D:\app\oracle\product\19.0.0\dbhome_1)
      (SID_NAME = NEWDB)
    )
  )

2. 更新 tnsnames.ora

NEWDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = NEWDB)
    )
  )

3. 重載監聽器並測試

C:\> lsnrctl reload
C:\> tnsping NEWDB
TNS Ping Utility ... OK (10 msec)

Data Guard 環境同步修改

  1. 主庫完成上述修改後,備庫需重新搭建 (DBID 已變)
  2. 或使用 NID 同步修改備庫 DB_NAME (但 DBID 不變,DG 可能報錯)
  3. 建議:主庫修改完成 → 重新全量備份 → 立新備庫

驗證清單

  • ☑ SELECT name, dbid FROM v$database; 確認 NEWDB、新 DBID
  • ☑ SELECT instance_name FROM v$instance; 確認 NEWDB
  • ☑ SHOW PARAMETER name; 所有 name 參數均為 NEWDB
  • ☑ SELECT * FROM v$services; 服務名正確
  • ☑ RMAN 備份驗證:BACKUP VALIDATE DATABASE;
  • ☑ 應用連接測試:所有下游系統連接串更新並驗證
  • ☑ 歸檔模式確認:ARCHIVE LOG LIST;

回滾方案

若修改失敗,使用備份的控制文件、參數文件、密碼文件恢復:

1. SHUTDOWN ABORT
2. 還原控制文件、SPFILE、PWD 文件
3. STARTUP MOUNT
4. ALTER DATABASE OPEN RESETLOGS (如需)
5. 重建 Windows 服務 (oradim -NEW -SID ORCL ...)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved