oracle 更改數據庫名的方法

這兩天一朋友問如何更改數據庫名,于是做個測試,簡單記錄下,以便說明問題。

如何修改數據庫名(db_name)及實例名(Instance_name or Service_name)

Nid是oracle從9iR2開始提供的工具,可以用來更改數據庫名稱,而無需通過之前重建控制文件等繁瑣方式。
nid是自帶的工具,在oracle_home/bin目錄中.以下方法假設登陸到數據庫本機做。
目的:在本例中,假設原來的數據庫名為orcl,要改成dborcl,原實例名(service_name,instance_name)orcl,要改成dborcl.
步驟概述:

1.檢查當前的參數情況
2.shutdown數據庫,然后mount數據庫
3.運行nid命令
4.更改參數文件pfile.ora(db_name,instance_name)
5.檢測更改情況
6.如果是windows平臺,要修改服務
7.修改監聽服務

C:Documents and SettingsAdministrator>sqlplus “/as sysdba”
SQL*Plus: Release 10.2.0.1.0 – Production on 星期四 10月 22 11:56:33 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.

連接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options
SQL> select * from v$version;
BANNER
—————————————————————-
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Prod
PL/SQL Release 10.2.0.1.0 – Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 – Production
NLSRTL Version 10.2.0.1.0 – Production
1. 查看更改前的相應名稱
SQL> show parameter name
NAME TYPE VALUE
———————————— ———– ——————————
db_file_name_convert string
db_name string orcl
db_unique_name string orcl
global_names boolean FALSE
instance_name string orcl
lock_name_space string
log_file_name_convert string
service_names string orcl
2. –先shutdown數據庫
SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
3. –nid需要在mount狀態下才能做。因為要更改控制文件的信息
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 180358020 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。

nid是操作系統的命令,所以要用host
SQL> host nid -help
DBNEWID: Release 10.2.0.1.0 – Production on Fri Oct 23 13:40:54 2009
Copyright (c) 1982, 2005, Oracle. 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
以上是nid命令的語法
4。 –運行nid命令
SQL> host nid target=sys/aibo dbname=dborcl
DBNEWID: Release 10.2.0.1.0 – Production on 星期四 10月 22 11:58:27 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已連接數據庫 ORCL (DBID=1224293825)
已連接服務器版本 10.2.0
數據庫中的控制文件數:
D:ORACLEPRODUCT10.2.0ORADATAORCLCONTROL01.CTL
D:ORACLEPRODUCT10.2.0ORADATAORCLCONTROL02.CTL
D:ORACLEPRODUCT10.2.0ORADATAORCLCONTROL03.CTL
是否將數據庫 ID 和數據庫名 ORCL 更改為 DBORCL? (Y/[N]) => y
操作繼續進行
將數據庫 ID 從 1224293825 更改為 3277448932
將數據庫名從 ORCL 更改為 DBORCL
控制文件 D:ORACLEPRODUCT10.2.0ORADATAORCLCONTROL01.CTL – 已修改
控制文件 D:ORACLEPRODUCT10.2.0ORADATAORCLCONTROL02.CTL – 已修改
控制文件 D:ORACLEPRODUCT10.2.0ORADATAORCLCONTROL03.CTL – 已修改
數據文件 D:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.DBF – dbid 已更改,
已寫入新名稱
數據文件 D:ORACLEPRODUCT10.2.0ORADATAORCLUNDOTBS01.DBF – dbid 已更改,
已寫入新名稱
數據文件 D:ORACLEPRODUCT10.2.0ORADATAORCLSYSAUX01.DBF – dbid 已更改,
已寫入新名稱
數據文件 D:ORACLEPRODUCT10.2.0ORADATAORCLUSERS01.DBF – dbid 已更改, 已
寫入新名稱
數據文件 D:ORACLEPRODUCT10.2.0ORADATAORCLEXAMPLE01.DBF – dbid 已更改,
已寫入新名稱
數據文件 D:ORACLEPRODUCT10.2.0ORADATAORCLTEMP01.DBF – dbid 已更改, 已
寫入新名稱
控制文件 D:ORACLEPRODUCT10.2.0ORADATAORCLCONTROL01.CTL – dbid 已更改,
已寫入新名稱
控制文件 D:ORACLEPRODUCT10.2.0ORADATAORCLCONTROL02.CTL – dbid 已更改,
已寫入新名稱
控制文件 D:ORACLEPRODUCT10.2.0ORADATAORCLCONTROL03.CTL – dbid 已更改,
已寫入新名稱
實例關閉
數據庫名已更改為 DBORCL。
修改參數文件并在重新啟動前生成新的口令文件。
數據庫 DBORCL 的數據庫 ID 已更改為 3277448932。
此數據庫的所有以前的備份和歸檔重做日志均不可用。
數據庫無法識別恢復區中以前的備份和歸檔日志。
數據庫已關閉, 用 RESETLOGS 選項打開數據庫。
已成功更改數據庫名和 ID。
DBNEWID – 已成功完成。
5. —shutdown數據庫
SQL> shutdown immediate
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist

SQL> startup nomount
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 180358020 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes

SQL> create pfile=’D:oracleproduct10.2.0pfile20091022.ora’ from spfile;
文件已創建。
SQL> shutdown immediate;
ORA-01507: ??????

6. —修改初始化參數文件、spfile文件(init.ora/spfile)

###########################################
instance_name=eyglen
#instance_name=eyglev
###########################################
db_domain=””
db_name=eyglen
# db_name=eyglev
###########################################
7. —以修改后的參數啟動數據庫
SQL> startup pfile=’D:oracleproduct10.2.0pfile20091022.ora’
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 180358020 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
ORA-01589: 要打開數據庫則必須使用 RESETLOGS 或 NORESETLOGS 選項

SQL> create spfile from pfile=’D:oracleproduct10.2.0pfile20091022.ora’
2 ;
文件已創建。
SQL> shutdown immediate
ORA-01109: 數據庫未打開

已經卸載數據庫。
ORACLE 例程已經關閉。

SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 180358020 bytes
Database Buffers 423624704 bytes
Redo Buffers 7135232 bytes
數據庫裝載完畢。
ORA-01589: 要打開數據庫則必須使用 RESETLOGS 或 NORESETLOGS 選項

SQL> alter database open noresetlogs
2 ;
alter database open noresetlogs
*
第 1 行出現錯誤:
ORA-01588: 要打開數據庫則必須使用 RESETLOGS 選項

SQL> alter database open resetlogs
2 ;
數據庫已更改。

8. –現在數據庫已經啟動了啊,那就檢查下吧,看看是否已經修改了
SQL> select open_mode from v$database;
OPEN_MODE
———-
READ WRITE
SQL> show parameter name
NAME TYPE VALUE
———————————— ———– ——————————
db_file_name_convert string
db_name string dborcl
db_unique_name string dborcl
global_names boolean FALSE
instance_name string dborcl
lock_name_space string
log_file_name_convert string
service_names string dborcl
SQL>
SQL> select instance_name from v$instance;
INSTANCE_NAME
—————-
orcl

9. 發現v$instance里的沒有修改過來,這是因為在windows平臺,繼續如下操作

********如果是windows平臺,v$instance里的instanc_name沒有變, 繼續如下操作
passwd文件通常放在oracle_home/database目錄下,文件命名形式為PWDsid.ora,sid為實例名(Service_name),
如當前的數據庫名及service_name為orcl,則passwd文件為PWDorcl.ora

C:Documents and SettingsAdministrator>orapwd file=D:oracleproduct10.2.0db_
1databasePWDdborcl.ora password=aibo entries=5
要注意一下,此時雖然數據庫名已經改成dborcl了,但instance_name還是orcl,所以,passwd文件必須跟以前一樣。否則會出錯。

10. 刪除以前的實例orcl
C:Documents and SettingsAdministrator>oradim -delete -sid orcl
實例已刪除。
11. 創建新的實例名 dborcl
C:Documents and SettingsAdministrator>oradim -new -sid dborcl -intpwd aibo -st
artmode a -pfile D:oracleproduct10.2.0pfile20091022.ora
OPW-00005: 存在相同名稱的文件 – 請刪除或重命名
實例已創建。
12.

C:Documents and SettingsAdministrator>set oracle_sid=dborcl
C:Documents and SettingsAdministrator>sqlplus “/as sysdba”
SQL*Plus: Release 10.2.0.1.0 – Production on 星期四 10月 22 13:41:12 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.

連接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options

SQL> quit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options 斷開

13.檢查服務名
C:Documents and SettingsAdministrator>lsnrctl reload
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 – Production on 22-10月-2009 13:4
3:13
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在連接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.56)(PORT=1521)))
命令執行成功
C:Documents and SettingsAdministrator>sqlplus “/as sysdba”
SQL*Plus: Release 10.2.0.1.0 – Production on 星期四 10月 22 13:43:21 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.

連接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options
SQL> select open_mode from v$database;
OPEN_MODE
———-
READ WRITE
SQL> select instance_name from v$instance;
INSTANCE_NAME
—————-
dborcl
SQL> show parameter name;
NAME TYPE VALUE
———————————— ———– ——————————
db_file_name_convert string
db_name string dborcl
db_unique_name string dborcl
global_names boolean FALSE
instance_name string dborcl
lock_name_space string
log_file_name_convert string
service_names string dborcl

SQL> quit
從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options 斷開
檢查service是否被更改
C:Documents and SettingsAdministrator>tnsping dborcl
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 – Production on 22-10月-
2009 13:50:00
Copyright (c) 1997, 2005, Oracle. All rights reserved.
已使用的參數文件:
D:oracleproduct10.2.0db_1networkadminsqlnet.ora
已使用 EZCONNECT 適配器來解析別名
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=dborcl.gdgg.local
))(ADDRESS=(PROTOCOL=TCP)(HOST=202.106.195.30)(PORT=1521)))
^C

測試不通過,說明dborcl配置有問題

修改tnsnames.ora文件,添加如下內容:
×××××××××××××××××××××××××××××××××××××××××××××××××××××
DBORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.56)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dborcl)
)
)
×××××××××××××××××××××××××××××××××××××××××××××××××××××

–重啟監聽
C:Documents and SettingsAdministrator>lsnrctl reload
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 – Production on 22-10月-2009 13:5
0:46
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在連接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.56)(PORT=1521)))
命令執行成功

—在測試
C:Documents and SettingsAdministrator>tnsping dborcl
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 – Production on 22-10月-
2009 13:52:18
Copyright (c) 1997, 2005, Oracle. All rights reserved.
已使用的參數文件:
D:oracleproduct10.2.0db_1networkadminsqlnet.ora

已使用 TNSNAMES 適配器來解析別名
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.
2.56)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = dborcl)
))
OK (20 毫秒)

到此所有的 數據庫名(db_name)及實例名(Instance_name or Service_name) ,都已經更改

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享