修改oracle例項名(sid)和資料庫名(db_name)
有時我們需要修改資料庫的sid和dbname,除了使用rman進行備份恢復之外,也可以透過手工方式修改,主要由兩個主要過程完成:
1、修改例項名(SID)
2、修改資料庫名(dbname)
下面演示將資料庫sid和dbname由orcl修改為cnhtm的過程:
[@more@]
1、修改例項名(sid)
1.1、檢查原來的資料庫例項名(sid)
oracle@oracle[/home/oracle]> echo $ORACLE_SID orcl oracle@oracle[/home/oracle]> sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 20 11:14:49 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options sys@ORCL> select instance from v$thread; INSTANCE -------------------------------------------------------------------------------- orcl |
1.2、關閉資料庫
注意不能用shutdown abort,只能是shutdown immediate或shutdown normal
sys@ORCL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. sys@ORCL> exit Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options |
1.3、修改oracle使用者的ORACLE_SID環境變數,如由orcl修改為cnhtm
oracle@oracle[/home/oracle]> cat ~/.bash_profile|grep -i sid ORACLE_SID=cnhtm export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH |
1.4、修改/etc/oratab檔案,將sid名由舊的修改為新的,如從orcl修改為cnhtm
oracle@oracle[/home/oracle]> cat /etc/oratab ...... cnhtm:/oracle/app/10.1:Y +ASM:/oracle/app/10.1:Y |
1.5、進入到$ORACLE_HOME/dbs目錄
將所有檔名中包含原來的sid的修改為對應的新sid的
如我對如下檔案修改為其後對應的檔案
hc_orcl.dat->hc_cnhtm.dat lkORCL->lkCNHTM orapworcl->orapwcnhtm snapcf_orcl.f->snapcf_cnhtm.f spfileorcl.ora->spfilecnhtm.ora |
1.6、使新修改的ORACLE_SID環境變數生效
oracle@oracle[/oracle/app/10.1/dbs]> . ~/.bash_profile oracle@oracle[/oracle/app/10.1/dbs]> echo $ORACLE_SID cnhtm |
1.7、重建口令檔案
因為口令檔案改名後不能在新例項中使用,所以重建
oracle@oracle[/oracle/app/10.1/dbs]> orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=5 force=y oracle@oracle[/oracle/app/10.1/dbs]> ls -lrt orapw* -rw-r----- 1 oracle oinstall 2048 Dec 20 11:27 orapwcnhtm |
1.8、啟動資料庫
oracle@oracle[/oracle/app/10.1/dbs]> sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 20 11:29:53 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to an idle instance. idle> startup ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1218292 bytes Variable Size 62916876 bytes Database Buffers 96468992 bytes Redo Buffers 7168000 bytes Database mounted. Database opened. |
1.9、檢查資料庫例項名
透過如下語句檢查資料庫例項名,發現例項名已經由orcl變成cnhtm
idle> select instance from v$thread; INSTANCE -------------------------------------------------------------------------------- cnhtm |
2、修改資料庫名(dbname)
雖然已經修改過了例項名(sid),但是資料庫的名稱(dbname還是原來的名稱orcl)
idle> conn / as sysdba Connected. sys@ORCL> 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 cnhtm lock_name_space string log_file_name_convert string service_names string orcl |
可以透過如下步驟修改資料庫名(dbname)
2.1、首先切換一下線上日誌,使資料庫做checkpoint
sys@ORCL> alter system archive log current; System altered. |
2.2、生成重建控制檔案的指令碼
sys@ORCL> alter database backup controlfile to trace resetlogs; Database altered. |
2.3、關閉資料庫,需要乾淨關閉,不能shutdown abort
sys@ORCL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. sys@ORCL> exit Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options |
2.4、進入$ORACLE_BASE/admin/
oracle@oracle[/oracle/admin/orcl/udump]> ls -lrt total 2608 -rw-r----- 1 oracle oinstall 577 Nov 7 13:37 orcl_ora_12020.trc ...... -rw-r----- 1 oracle oinstall 4407 Dec 20 11:36 cnhtm_ora_7789.trc |
2.5、將找到的trc檔案複製一份,並命名為ccf.sql
oracle@oracle[/oracle/admin/orcl/udump]> cp cnhtm_ora_7789.trc ccf.sql |
2.6、修改ccf.sql
查詢STARTUP NOMOUNT語句,將這一行上面的所有行都刪除
查詢所有以--開始的行,把這些行刪除
查詢所有的orcl修改為cnhtm,所有的ORCL修改為CNHTM
找到CREATE CONTROLFILE REUSE DATABASE...語句,將其中的REUSE修改為SET
找到RECOVER DATABASE USING BACKUP CONTROLFILE語句,將其用雙橫線(--)註釋掉
如果有精力,可以修改這個指令碼中的datafile和logfile部分使用新的檔名稱,其實這部分不修改也可以,我為了測試的目的進行了修改,修改後要記得去重新命名資料檔案和log檔案,將對應的資料檔案和log檔案與這裡的名稱相對應
我修改後的ccf.sql檔案內容如下
STARTUP NOMOUNT CREATE CONTROLFILE set DATABASE "cnhtm" RESETLOGS ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '+DATA/cnhtm/onlinelog/group_1.LOG' SIZE 100M, GROUP 2 '+DATA/cnhtm/onlinelog/group_2.LOG' SIZE 100M, GROUP 3 '+DATA/cnhtm/onlinelog/group_3.LOG' SIZE 100M, GROUP 4 '+DATA/cnhtm/onlinelog/group_4.LOG' SIZE 100M DATAFILE '+DATA/cnhtm/datafile/system01.DBF', '+DATA/cnhtm/datafile/undotbs101.DBF', '+DATA/cnhtm/datafile/sysaux01.DBF', '+DATA/cnhtm/datafile/users01.DBF', '+DATA/cnhtm/datafile/example01.DBF', '+DATA/cnhtm/datafile/tbs_lmt01.DBF', '+DATA/cnhtm/datafile/tbs_lmt_201.DBF', '+DATA/cnhtm/datafile/tbs_lmt_301.DBF' CHARACTER SET ZHS16GBK ; --RECOVER DATABASE USING BACKUP CONTROLFILE; ALTER DATABASE OPEN RESETLOGS; ALTER TABLESPACE TEMP ADD TEMPFILE '+DATA/cnhtm/tempfile/temp.269.705923003' SIZE 104857600 REUSE AUTOEXTEND ON NEXT 104857600 MAXSIZE 32767M; |
2.7、修改資料檔案、線上日誌檔名
如果上一步修改了ccf.sql檔案中的datafile和logfile段的檔名,這裡要將這些檔名重命令為與其一致。
因為我的實驗環境使用了ASM,在Oracle 10.2中ASM中不能重新命名和複製檔案,我採用了建立別名的方式,操作如下:
oracle@oracle[/oracle/admin/cnhtm/udump]> export ORACLE_SID=+ASM oracle@oracle[/oracle/admin/cnhtm/udump]> sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 20 12:08:52 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options idle> alter diskgroup data add directory '+data/CNHTM'; Diskgroup altered. idle> alter diskgroup data add directory '+data/CNHTM/DATAFILE'; Diskgroup altered. idle> alter diskgroup data add alias 2 '+data/CNHTM/DATAFILE/EXAMPLE01.DBF' 3 for 4 '+data/ORCL/DATAFILE/EXAMPLE.261.705922745'; Diskgroup altered. ...... idle> alter diskgroup data add alias 2 '+data/CNHTM/DATAFILE/USERS01.DBF' 3 for 4 '+data/ORCL/DATAFILE/USERS.266.705922777'; Diskgroup altered. idle> alter diskgroup data add directory '+data/CNHTM/ONLINELOG'; Diskgroup altered. ...... idle> alter diskgroup data add alias 2 '+data/CNHTM/ONLINELOG/group_4.LOG' 3 for 4 '+data/ORCL/ONLINELOG/group_7.273.705923695'; Diskgroup altered. |
2.8、如果歸檔日誌目錄名中包含sid,那麼修改歸檔目錄名
我的測試環境,歸檔目錄使用的是flash_recovery_area,所以需要將這個目錄中的ORCL目錄重新命名為CNHTM
2.9、使用spfile生成pfile
注意這裡沒有啟動資料庫,只是連結到idle狀態
oracle@oracle[/home/oracle]> export ORACLE_SID=cnhtm oracle@oracle[/home/oracle]> sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 20 11:49:20 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to an idle instance. idle> create pfile='?/dbs/initcnhtm.ora' from spfile; File created. idle> exit Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options |
2.10、進入$ORACLE_HOME/dbs目錄
2.11、編輯initcnhtm.ora檔案
搜尋所有的orcl,重命令為cnhtm,搜尋所有的ORCL,重新命名為CNHTM
2.12、刪除控制檔案
將原來的控制檔案刪除或重新命名
控制檔案的位置名稱可以透過檢視2.11步驟中的*.control_files來確定
如果控制檔案在ASM中,可以進入asmcmd命令,然後用rm命令刪除
2.13、進入$ORACLE_BASE/admin目錄
將orcl目錄重新命名為cnhtm
2.14、使用修改過的pfile生成spfile
oracle@oracle[/oracle/admin/cnhtm/udump]> sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Sun Dec 20 11:59:56 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to an idle instance. idle> create spfile from pfile='?/dbs/initcnhtm.ora'; File created. |
2.15、呼叫2.6步驟修改好的ccf.sql
idle> @/oracle/admin/cnhtm/udump/ccf.sql ORACLE instance started. Total System Global Area 167772160 bytes Fixed Size 1218292 bytes Variable Size 67111180 bytes Database Buffers 92274688 bytes Redo Buffers 7168000 bytes Control file created. Database altered. Database altered. Tablespace altered. |
2.16、檢查資料庫狀態
idle> conn / as sysdba Connected. sys@CNHTM>select open_mode from v$database; OPEN_MODE ---------- READ WRITE sys@CNHTM> show parameter name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_file_name_convert string db_name string cnhtm db_unique_name string cnhtm global_names boolean FALSE instance_name string cnhtm lock_name_space string log_file_name_convert string service_names string cnhtm |
發現資料庫名(db_name)已經修改為cnhtm
--end--
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22049049/viewspace-1029874/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 更改資料庫SID名和db_name名資料庫
- 關於資料庫名(db_name)、例項名(instance_name)、ORACLE_SID資料庫Oracle
- (轉)關於資料庫名(db_name)、例項名(instance_name)、ORACLE_SID資料庫Oracle
- 轉貼:關於資料庫名(db_name)、例項名(instance_name)、ORACLE_SID資料庫Oracle
- Oracle - 資料庫名、例項名、服務名、ORACLE_SID 的說明和區別Oracle資料庫
- ORACLE資料庫修改資料庫名db_nameOracle資料庫
- oracle資料庫名和例項名的區別Oracle資料庫
- 如何修改資料庫例項及資料庫名資料庫
- 資料庫名、例項名、資料庫域名、全域性資料庫名、服務名概念區分資料庫
- Oracle中關於資料庫例項名與資料庫服務名(轉載)Oracle資料庫
- windows 修改例項名Windows
- 在本地修改預設啟動的資料庫例項名資料庫
- 使用NID修改Oracle資料庫名Oracle資料庫
- Oracle NID工具修改資料庫DBID和資料庫名稱Oracle資料庫
- 修改資料庫名稱資料庫
- 資料庫名,資料庫例項名,資料庫域名,作業系統環境變數資料庫作業系統變數
- oracle更改例項名Oracle
- Oracle全域性資料庫名、環境變數和sid的區別Oracle資料庫變數
- Oracle例項和Oracle資料庫Oracle資料庫
- oracle 11g 修改資料庫名字和例項名字Oracle資料庫
- JDBC連線自定義sqlserver資料庫例項名(多個例項)JDBCSQLServer資料庫
- nid修改資料庫名稱資料庫
- 如何修改MySQL資料庫名稱MySql資料庫
- 【引數】ORACLE修改資料庫名之完整版Oracle資料庫
- DBCA 刪除資料庫例項時找不到例項名怎麼辦資料庫
- 關於oracle的幾個概念:資料庫、例項、使用者名稱和密碼Oracle資料庫密碼
- 用NID修改資料庫名稱資料庫
- 二、修改資料庫全域性名稱資料庫
- Oracle 11g修改資料庫使用者名稱Oracle資料庫
- 一、更改ORACLE SID名稱Oracle
- 修改資料庫db_name的方法資料庫
- Oracle 11g支援修改資料庫使用者名稱Oracle資料庫
- [轉] 使用NID 修改資料庫名(Oracle9或以上)資料庫Oracle
- oracle 資料庫例項Oracle資料庫
- 關於修改資料庫名稱和ID的方法總結資料庫
- oracle例項和資料庫的區別Oracle資料庫
- 資料庫和例項資料庫
- dbnewid修改dbid和庫名