因業務整合、測試環境克隆或命名規範統一,常需修改 Oracle 資料庫實例名(SID)。本文以 CentOS 6.5 + Oracle 10.2.0.5 為例,記錄從環境變數、控制檔、參數檔、口令檔到驗證的全流程操作,並說明 SID ≠ DB_NAME 的關鍵區別。
| 項目 | 修改前 | 修改後 |
|---|---|---|
| OS | CentOS 6.5 x86_64 | |
| Oracle 版本 | 10.2.0.5.0 | |
| ORACLE_SID | orcl | linuxidc |
| DB_NAME | orcl | orcl(未變) |
| ORACLE_HOME | /u01/app/oracle/product/10.2.0/db_1 | |
$ echo $ORACLE_SID
orcl
$ sqlplus / as sysdba
SQL> SELECT instance FROM v$thread;
INSTANCE
--------
orcl
SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> EXIT
$ vi ~/.bash_profile
# 修改 ORACLE_SID
export ORACLE_SID=linuxidc
# 生效
$ source ~/.bash_profile
$ echo $ORACLE_SID
linuxidc
$ vi /etc/oratab
# 原行:orcl:/u01/app/oracle/product/10.2.0/db_1:Y
linuxidc:/u01/app/oracle/product/10.2.0/db_1:Y
$ cd $ORACLE_HOME/dbs
$ ls -l *orcl* *zf* # 視實際檔名而定
$ mv hc_orcl.dat hc_linuxidc.dat
$ mv lkorcl lklinuxidc
$ mv orapworcl orapwlinuxidc
$ mv spfileorcl.ora spfilelinuxidc.ora
$ mv initorcl.ora initlinuxidc.ora
注意:檔名中 SID 部分需與新 SID 完全一致,否則啟動時會報
ORA-01078或找不到參數檔。
$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=123456 entries=5 force=y
# 產生 orapwlinuxidc
舊口令檔改名後無法被新實例識別,必須重建。
$ sqlplus / as sysdba
SQL> STARTUP
ORACLE instance started.
Database mounted.
Database opened.
SQL> SELECT instance FROM v$thread;
INSTANCE
--------
linuxidc
執行上述步驟後,實例名已變更為 linuxidc,但資料庫名仍為 orcl。這意味著:
tnsnames.ora 中 SID=linuxidc 可連線。SERVICE_NAME 連線,服務名預設為 orcl(DB_NAME),需同步修改 SERVICE_NAMES 參數或 LISTENER.ORA GLOBAL_DBNAME。DB_NAME 的地方不可隨意修改,否則會導致備份恢復、同步邏輯失效。STARTUP MOUNTNID 工具:nid target=/ dbname=newdbname setname=YESinit.ora/spfile 中 DB_NAME=newdbnameALTER DATABASE BACKUP CONTROLFILE TO TRACE 重建tnsnames.ora、listener.ora、/etc/oratab、環境變數最佳實踐:僅修改 SID 滿足多實例共存、測試環境隔離需求;修改 DB_NAME 屬高風險操作,需完整備份、停機窗口、回滾預案,非必要不建議執行。