修改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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle - 資料庫名、例項名、服務名、ORACLE_SID 的說明和區別Oracle資料庫
- 使用NID修改Oracle資料庫名Oracle資料庫
- sqlserver修改例項名稱SQLServer
- nid修改資料庫名稱資料庫
- oracle資料庫與oracle例項Oracle資料庫
- 用NID修改資料庫名稱資料庫
- 如何修改MySQL資料庫名稱MySql資料庫
- 在RAC中用NID修改資料庫名稱資料庫
- oracle資料庫建立資料庫例項-九五小龐Oracle資料庫
- 修改Oracle資料檔名及資料檔案存放路徑Oracle
- ***批次修改資料夾名稱
- 安全快速修改Mysql資料庫名的5種方法MySql資料庫
- Android Studio修改專案名和包名Android
- 資料庫 校驗名稱唯一性,用於新增和修改功能資料庫
- Oracle 11G資料庫單例項安裝Oracle資料庫單例
- Oracle 例項和RAC叢集下資料庫日誌目錄合集Oracle資料庫
- oracle 11g 單例項資料庫的安裝Oracle單例資料庫
- The database owner SID recorded in the master database differs from the database owner SID recorded in database 'DB_NAME'DatabaseAST
- 【資料庫資料恢復】ASM例項不能掛載的Oracle資料庫資料恢復案例資料庫資料恢復ASMOracle
- oracle之 單例項監聽修改埠Oracle單例
- 利用Python快速批量修改資料集檔名Python
- SQL Server中獲取資料庫名、表名、欄位名和欄位註釋的SQL語句SQLServer資料庫
- MySQL和Oracle的後設資料抽取例項分析KRGXMySqlOracle
- Laravel 使用多資料庫和 Model 表名去 sLaravel資料庫
- 簽名修改
- Oracle獲取所有表名資訊和獲取指定表名欄位資訊Oracle
- 修改 Ubuntu 系統使用者名稱和登入名Ubuntu
- JDBC連線MySQL資料庫的方法和例項JDBCMySql資料庫
- 達夢資料庫例項的狀態和模式資料庫模式
- 【ASK_ORACLE】Relink ASM單例項資料庫詳細步驟OracleASM單例資料庫
- 修改git遠端倉庫分支名稱Git
- [Oracle]Oracle資料庫資料被修改或者刪除恢復資料Oracle資料庫
- mongodb關閉資料庫例項MongoDB資料庫
- oracle11g修改使用者名稱Oracle
- 【資料庫資料恢復】Oracle ASM例項無法掛載的資料恢復案例資料庫資料恢復OracleASM
- Postgresql10資料庫之更改資料庫的名稱SQL資料庫
- 檔名提取、修改
- 修改Oracle資料庫字符集(zt)Oracle資料庫
- Oracle 20C 多租戶_1.2 資料庫與例項介紹Oracle資料庫