ORACLE資料庫修改資料庫名db_name

junsansi發表於2009-03-25

某些時候為了快速建立一個新的資料庫(DBCA太慢,而且DBCA建立的庫沒有資料),或者其它原因,你可以希望直接複製現有資料庫,但是又不希望新庫與原庫重名,這時候就就可以通過重建控制檔案的方式修改資料庫名。

大致步驟如下:

  • 原庫生成控制檔案建立指令碼並shutdown
  • 複製資料檔案、控制檔案、歸檔檔案、Online Redologs以及spfile到新伺服器適當路徑下。
  • 新庫中根據spfile生成pfile,並做適當修改後,再根據pfile生成spfile
  • 開啟原庫生成的trace檔案,獲取控制檔案建立指令碼並做適當修改
  • 新庫啟動至nomount
  • 執行修改後的trace

下面演示通過JSSSTR資料庫複製出一個JSSBAK,操作如下:

1、 生成控制檔案建立指令碼:

    JSSSTR> alter database backup controlfile to trace;

    Database altered.

執行下列語句,獲取當前生成的trace檔案路徑:

    JSSSTR> select c.value || '/' || d.instance_name || '_ora_' ||

      2  to_char(a.spid,'fm99999') || '.trc'

      3  from v$process a, v$session b, v$parameter c, v$instance d

      4  where a.addr = b.paddr

      5  and b.audsid = userenv('sessionid')

      6  and c.name = 'user_dump_dest'; 

    C.VALUE||'/'||D.INSTANCE_NAME||'_ORA_'||TO_CHAR(A.SPID,'FM99999')||'.TRC'

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

    /data/oracle/admin/jssstr/udump/jssstr_ora_5612.trc

2、 關閉資料庫

    JSSSTR> shutdown immediate

    Database closed.

    Database dismounted.

    ORACLE instance shut down.

3、 複製檔案

過程略,注意檔案要複製完整,包括資料檔案,歸檔檔案,Online Redo以及tnsnames.ora,listener.ora等等。

注,控制檔案不需要複製。

4、 新庫中通過原spfile生在pfile

    [oracle@yans3 dbs]$ export ORACLE_SID=jssbak

    [oracle@yans3 dbs]$ sqlplus "/ as sysdba"

    SQL*Plus: Release 10.2.0.3.0 - Production on Wed Mar 25 15:45:05 2009

    Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

    Connected to an idle instance.

    SQL> set sqlprompt "JSSBAK> "

    JSSBAK> create pfile ='/data/oracle/product/10.2/dbs/pfilejssbak.ora' from spfile ='/data/oracle/product/10.2/dbs/spfilejssstr.ora';

    File created.

5、 文字編輯器修改pfilejssbak.ora

主要修改路徑引數和db_name等。過程略

6、 建立spfile並啟動到nomount

    JSSBAK> create spfile from pfile='/data/oracle/product/10.2/dbs/pfilejssbak.ora';

    File created.

    JSSBAK> startup nomount

    ORACLE instance started.

    Total System Global Area  524288000 bytes

    Fixed Size                  2073984 bytes

    Variable Size             150997632 bytes

    Database Buffers          364904448 bytes

    Redo Buffers                6311936 bytes

7、 源庫開啟生成的trace檔案並修改

找到Set #2. RESETLOGS case,複製其後的語句並做適當修改。

主要將:

CREATE CONTROLFILE  REUSE  DATABASE "JSS STR " RESETLOGS  ARCHIVELOG

改為:

CREATE CONTROLFILE SET DATABASE "JSSBAK" RESETLOGS  ARCHIVELOG

其它檔案路徑按照實際情況修改,另外由於前面檔案是冷複製,因此移除RECOVER DATABASE USING BACKUP CONTROLFILE那一句。

8、 執行修改後的指令碼

    JSSBAK> CREATE CONTROLFILE SET DATABASE "JSSBAK" RESETLOGS  ARCHIVELOG

      2      MAXLOGFILES 16

      3      MAXLOGMEMBERS 3

      4      MAXDATAFILES 100

      5      MAXINSTANCES 8

      6      MAXLOGHISTORY 292

      7  LOGFILE

      8    GROUP 1 '/data/oracle/oradata/jssbak/redo01.log'  SIZE 50M,

      9    GROUP 2 '/data/oracle/oradata/jssbak/redo02.log'  SIZE 50M,

     10    GROUP 3 '/data/oracle/oradata/jssbak/redo03.log'  SIZE 50M

     11  DATAFILE

     12    '/data/oracle/oradata/jssbak/system01.dbf',

     13    '/data/oracle/oradata/jssbak/undotbs01.dbf',

     14    '/data/oracle/oradata/jssbak/sysaux01.dbf',

     15    '/data/oracle/oradata/jssbak/users01.dbf',

     16    '/data/oracle/oradata/jssbak/strmtbs01.ora',

     17    '/data/oracle/oradata/jssbak/webdata01.dbf'

     18  CHARACTER SET ZHS16GBK

     19  ;

    Control file created.

    JSSBAK> ALTER DATABASE OPEN RESETLOGS;

    Database altered.

    JSSBAK> ALTER TABLESPACE TEMP ADD TEMPFILE '/data/oracle/oradata/jssbak/temp01.dbf' REUSE;

    Tablespace altered.

如果沒有報錯,則資料庫複製並改名成功。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-578372/,如需轉載,請註明出處,否則將追究法律責任。

相關文章