修改DBNAME
?
?
??? 最近通過VMware硬盤的直接復制來創建結點,需要修改DBID和DBNAME(保證數據庫環境可用),找了找可以用來直接修改DBNAME的方法,還真有,原來Oracle本身就自帶了這個功能的工具(NID),用了一下發現使用還是比較方便的,但是更改之后問題多多,使用的最終結論還是:不到萬不得已不推薦使用,因為DBID涉及到的關聯很多,修改SID后會引發很多不可預知的錯誤,很多參數都任然沿用之間的%SID%,如果沒有非常特殊的要求,還是保留datafile后,刪除重建。講一下
具體的操作過程:
一、NID的用法:
?
??? 這是Oracle自帶的工具,數據庫安裝完成后就自動安裝了。
C:\>nid
DBNEWID: Release 9.2.0.1.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation.? All rights reserved.
?
Keyword???? Description??????????????????? (Default)
----------------------------------------------------
TARGET????? Username/Password????????????? (NONE)
DBNAME????? New database name????????????? (NONE)
LOGFILE???? Output Log???????????????????? (NONE)
REVERT????? Revert failed change?????????? NO
SETNAME???? Set a new database name only?? NO
APPEND????? Append to output log?????????? NO
HELP??????? Displays these messages??????? NO
用法舉例:
1) 只修改DBID的用法
:
wangxiaoqi> nid TARGET=sys/sys
2) 修改DBID和DBNAME的用法:
wangxiaoqi> nid TARGET=sys/sys DBNAME=kaka02
3) 只修改DBNAME不改DBID的用法:
wangxiaoqi> nid TARGET=sys/sys DBNAME=kaka02 SETNAME=YES
?
4) 添加日志的用法
wangxiaoqi> nid TARGET=sys/sys DBNAME=kaka02 SETNAME=YES LOGFILE='D:\test\nid.log'
--理論上應該是這樣的,但是這個測試沒通過,根本不產生LOG
?
?
二、修改步驟:
?
1) 連接并修改DBNAME
?
SQL> conn sys/sys
as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
?
Total System Global Area? 135338868 bytes
Fixed Size?????????????????? 453492 bytes
Variable Size???????????? 109051904 bytes
Database Buffers?????????? 25165824 bytes
Redo Buffers???????????????? 667648 bytes
Database mounted.
SQL> host nid target=sys/sys dbname=kaka02
DBNEWID: Release 9.2.0.1.0 - Production
Copyright (c) 1995, 2002, Oracle Corporation.? All rights reserved.
?
Connected to database KAKA (DBID=524574739)
?
Control Files in database:
??? D:\ORACLE\ORADATA\KAKA\CONTROL01.CTL
??? D:\ORACLE\ORADATA\KAKA\CONTROL02.CTL
??? D:\ORACLE\ORADATA\KAKA\CONTROL03.CTL
?
Change database ID and database name KAKA to KAKA02? (Y/[N]) => y
?
Proceeding with operation
Changing database ID from 524574739 to 2420728802
Changing database name from KAKA to KAKA02
??? Control File D:\ORACLE\ORADATA\KAKA\CONTROL01.CTL - modified
??? Control File D:\ORACLE\ORADATA\KAKA\CONTROL02.CTL - modified
??? Control File D:\ORACLE\ORADATA\KAKA\CONTROL03.CTL - modified
??? Datafile D:\ORACLE\ORADATA\KAKA\SYSTEM01.DBF - dbid changed, wrote new name
??? Datafile D:\ORACLE\ORADATA\KAKA\UNDOTBS01.DBF - dbid changed, wrote new name
??? Control File D:\ORACLE\ORADATA\KAKA\CONTROL01.CTL - dbid changed, wrote new name
??? Control File D:\ORACLE\ORADATA\KAKA\CONTROL02.CTL - dbid changed, wrote new name
??? Control File D:\ORACLE\ORADATA\KAKA\CONTROL03.CTL - dbid changed, wrote new name
?
Database name changed to KAKA02.
Modify parameter file and generate a new password file before restarting.
Database ID for database KAKA02 changed to 2420728802.
All previous backups and archived redo logs for this database are unusable.
Shut down database and open with RESETLOGS option.
Succesfully changed database name and ID.
DBNEWID - Completed succesfully.
2) 修改db_name參數,重啟數據庫
SQL> shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
? --在spfile文件里作相應修改,數據庫db_name
SQL>startup mount;
SQL>alter system set db_name=kaka02 scope=spfile;
System altered.
? --如果是pfile文件,需手工修改db_name參數值
3) 重新創建密碼文件
SQL>host orapwd file=c:\oracle\ora92\database\pwdkaka02.ora password=sys entries=8
SQL> conn
sys/sys
as sysdba
Connected to an idle instance.
4) 以Resetlogs選項打開數據庫
SQL> startup mount
ORACLE instance started.
?
Total System Global Area? 135338868 bytes
Fixed Size?????????????????? 453492 bytes
Variable Size???????????? 109051904 bytes
Database Buffers?????????? 25165824 bytes
Redo Buffers???????????????? 667648 bytes
Database mounted.
SQL> alter database open resetlogs;
Database altered.
5) 查看修改是構成功
SQL> select dbid,name from v$database;
????? DBID NAME
---------- ---------
2420728802 KAKA02
SQL>
注意:2、3不能顛倒,否則,重建口令文件是不可用的
?
?
三、注意修改監聽
?
??? 發現在..\network\admin\listener.ora下直接添加SID修改不管用,監聽起來的時候還是沒有對新的DB進行監聽。
?
??? 最后在圖形界面下增加了新的SID后,重啟lsnrctl,連接成功。
?
?
?
?
?
?
?
附:Tom對修改SID的建議和過程:
***************************************************
***************************************************
?
?
?
?