天天看點

oracle 資料庫改oracle_sid的操作方法

修 改 SID

案例: 舊資料庫(OLDDB)

        檔案存放(data files,redo files,control files,temp files, undo files)目錄是

(/u01/OLDDB)

dump檔案目錄是(/u01/dump)

       新資料庫(NEWDB)

        檔案存放(data files,redo files,control files,temp files, undo files)目錄是

(/u02/NEWDB)

dump檔案目錄是(/u02/dump)

1. 生成舊資料庫初始化參數檔案(init{SID}.ora)和文本格式的控制檔案(control.txt)

   create pfile from spfile

alter database backup controlfile to trace as '/tmp/control.txt'

2. 關閉舊資料庫

3. 将舊資料庫存放檔案和dump的目錄移動到新資料庫存放檔案和dump的目錄(如果不更改存放的目錄可以不 

執行該步驟)—重命名檔案

    mv /u01/OLDDB /u02/NEWDB  --資料庫檔案

    mv /u01/dump /u02/dump       --dump目錄

--重新生成pfile檔案

4. 進入$ORACLE_HOME/dbs目錄,拷貝OLDDB的pfile成NEWDB的pfile,同時修改NEWDB的pfile檔案.

    cd $ORACLE_HOME/dbs

    cp initOLDDB.ora initNEWDB.ora

     修改initNEWDB.ora檔案

     a.. db_name和instance_name參數更改成新資料庫的名稱(NEWDB)

    b. background_dump_desc,core_dump_desc和user_dump_desc參數更改為新數

據庫存放dump資訊的目錄(/u02/dump)

     c. control_files參數指定存放新資料庫的控制檔案目錄及名稱

('/u02/NEWDB/control01.ctl','/u02/NEWDB/control02.ctl')

5. 編輯control.txt檔案,新生成newdb.sql和newdb1.sql檔案

   拷貝control.txt檔案中以下行到/tmp/newdb.sql檔案中

   ---------------

   CREATE CONTROLFILE REUSE DATABASE "OLDDB" RESETLOGS  NOARCHIVELOG

    --  SET STANDBY TO MAXIMIZE PERFORMANCE

    MAXLOGFILES 5

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 1

    MAXLOGHISTORY 453

   LOGFILE

    GROUP 1 '/u01/OLDDB/redo01.log'  SIZE 10M,

    GROUP 2 '/u01/OLDDB/redo02.log'  SIZE 10M,

      ...

    GROUP n '/u01/OLDDB/redo0n.log'  SIZE 10M

   -- STANDBY LOGFILE

   DATAFILE

    '/u01/OLDDB/system01.dbf',

    '/u01/OLDDB/undotbs01.dbf',

    '/u01/OLDDB/indx01.dbf',

    '/u01/OLDDB/tools01.dbf',

    '/u01/OLDDB/users01.dbf',

    '/u01/OLDDB/xdb01.dbf',

      ...

    '/u01/OLDDB/filename.dbf'

   CHARACTER SET ZHS16GBK

   ;

   -------------

   并修改/tmp/newdb.sql檔案

   a. REUSE -> SET

   b. OLDDB -> NEWDB

   c. 存放目錄 /u01/OLDDB -> /u02/NEWDB(如果不更改存放的目錄可以不執行該步驟)

   更改後/tmp/newdb.sql檔案内容如下

重新生成控制檔案

      ---------------

   CREATE CONTROLFILE SET DATABASE "NEWDB" RESETLOGS  NOARCHIVELOG

    --  SET STANDBY TO MAXIMIZE PERFORMANCE

   MAXLOGFILES 5

MAXLOGMEMBERS 3

MAXDATAFILES 100

    MAXINSTANCES 1

    MAXLOGHISTORY 453

   LOGFILE

    GROUP 1 '/u02/NEWDB/redo01.log'  SIZE 10M,

    GROUP 2 '/u02/NEWDB/redo02.log'  SIZE 10M,

      ...

    GROUP n '/u02/NEWDB/redo0n.log'  SIZE 10M

   -- STANDBY LOGFILE

   DATAFILE

    '/u02/NEWDB/system01.dbf',

    '/u02/NEWDB/undotbs01.dbf',

    '/u02/NEWDB/indx01.dbf',

    '/u02/NEWDB/tools01.dbf',

    '/u02/NEWDB/users01.dbf',

    '/u02/NEWDB/xdb01.dbf',

      ...

    '/u02/NEWDB/filename.dbf'

   CHARACTER SET ZHS16GBK

   ;

   -------------

   拷貝control.txt檔案中以下行到/tmp/newdb1.sql檔案中

   -------------

   ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/OLDDB/temp01.dbf'

     SIZE 524288000  REUSE AUTOEXTEND ON NEXT 8192  MAXSIZE 32767M;

    ...

   ALTER TABLESPACE TEMPn ADD TEMPFILE '/u01/OLDDB/tempn.dbf'

     SIZE 524288000  REUSE AUTOEXTEND ON NEXT 8192  MAXSIZE 32767M;

   -------------

   并修改/tmp/newdb.sql檔案

   a. 存放目錄 /u01/OLDDB -> /u02/NEWDB(如果不更改存放的目錄可以不執行該步驟)

   更改後/tmp/newdb1.sql檔案内容如下

   -------------            (增加臨時表空間的資料檔案)

   ALTER TABLESPACE TEMP ADD TEMPFILE '/u02/NEWDB/temp01.dbf'

     SIZE 524288000  REUSE AUTOEXTEND ON NEXT 8192  MAXSIZE 32767M;

    ...

   ALTER TABLESPACE TEMPn ADD TEMPFILE '/u02/NEWDB/tempn.dbf'

     SIZE 524288000  REUSE AUTOEXTEND ON NEXT 8192  MAXSIZE 32767M;

   -------------

6. 删除新資料庫pfile檔案(initNEWDB.ora)中control_files參數所指定的控制檔案.

   rm /u02/NEWDB/*.ctl  (删除原來的控制檔案)

7. 啟動新資料庫(NEWDB)到nomount狀态,使用initNEWDB.ora參數檔案

   startup nomount pfile=$ORACLE_HOME/dbs/initNEWDB.ora

8. 執行/tmp/newdb.sql檔案,重建控制檔案

   @/tmp/newdb.sql

9. 使用resetlogs選項打開新資料庫(NEWDB)

Alter dabase mount

   alter database open resetlogs

10. 執行/tmp/newdb1.sql檔案,重建臨時表空間

   @/tmp/newdb2.sql

11. 檢視v$database和v$instance視圖,是不是資料庫名稱已更改

12..profile/.bash_profile檔案

13.Listener.ora,tnsnames.ora檔案修改