[Oracle] データベースのコピー方法(オフライン・バックアップを利用する方法<その2>) | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

データベースのコピー方法(オフライン・バックアップを利用する方法(その1) ”では、全く同じ構成のデータベースしかコピーできないですが、少し(?)手順を加えることによって、ファイルの物理配置、インスタンス名、データベース名、初期化パラメータ、sysパスワードなどを変更してデータベースをコピーすることもできます。

手順は以下のとおり。
1.初期化パラメータファイルの作成
サーバー・パラメータ・ファイルで起動しているインスタンスの場合、ソース・データベース上で以下のSQLを実行し、初期化パラメータファイルを作成します。

CREATE PFILE={任意のディレクトリ}\init{SID}.ora 
  FROM SPFILE='{ORACLE_HOME}\database\spfile{SID}.ora'

  PFILE :作成する初期化パラメータファイル名
  SPFILE:作成元となるサーバー・パラメータファイル名

  例)ORACLE_HOMEがC:\oracle\ora92、SIDがORCL、作成する初期化パラメータ
      ファイル名をC:\oracle\initORCL2.oraの場合、以下のようなSQLとなります。

      CREATE PFILE='C:\oracle\initORCL2.ora' 
        FROM SPFILE='C:\oracle\ora92\database\spfileORCL.ora'

2.制御ファイル作成スクリプトの生成(バックアップ)
ソース・データベース上で以下のSQLを実行し、制御ファイル作成スクリプトを生成します。
ALTER DATABASE BACKUP CONTROLFILE TO TRACE

  ※結果は初期化パラメータuser_dump_destで指定されたディレクトトリに
    トレースファイル(~.trc)として作成されます。

3.ソースデータベースの停止
コピーするデータベース・ファイルを確定させる(オフライン・バックアップを取得できる状態にする)ためにソース・データベースを停止します。
4.Oracleデータベース構成ファイルのコピー
ソース・データベース上のOracleデータベース構成ファイルを、ネットワークあるいはテープなどのバックアップ・メディアを介して、ターゲット・データベース上にコピーします。

この時、ソース・データベースとターゲット・データベースで各ファイルの物理配置を変更する必要があれば変更します。

コピー対象となるOracleデータベース構成ファイルは以下のとおり。

  • 初期化パラメータ・ファイル ※1.で作成したもの
  • 制御ファイルのバックアップ・トレースファイル(~.trc) ※2.で作成したもの
  • データ・ファイル
  • REDOログファイル
  • トレース・ファイル・ディレクトリ ※ファイルのコピーは不要
  • アーカイブ・ディレクトリ ※アーカイブ・ログ・モードで運用しているデータベースの場合。
    ファイルのコピーは不要。

それぞれのファイルが何処に格納されているかは、データベースによって異なりますが、例えば、何も考えずに標準の設定で作成した"ORCL"というデータベースの場合は、以下のようなディレクトリとファイルの構成になります。

C:  \oracle
    \admin
      \ORCL
        \bdump
        \cdump
        \udump
          ~.trc
    \ora92
      \database
        initORCL.ora
        PWDORCL.ora
    \oradata
      \ORCL
        controll~.ctl
        ~.dbf
        redo~.log
        \archive

5.初期化パラメータ・ファイルの編集
1.で作成し、4.でターゲット・データベースにコピーした初期化パラメータ・ファイルをテキスト・エディタで開き、ターゲット・データベースの環境に合わせてパラメータを編集します。(表2)

表2.編集する初期化パラメータ
パラメータ名 説明 編集要領
background_dump_dest バックグラウンド・ダンプの出力先 4.でコピーしたディレクトリに合わせます。
control_files 制御ファイルの物理位置 4.でコピーしたディレクトリに合わせます。
core_dump_dest コア・ダンプの出力先 4.でコピーしたディレクトリに合わせます。
db_cache_size データベース・キャッシュサイズ 物理メモリー構成や他のアプリケーションとのメモリーの配分を考慮して決定します。
db_name データベース名 ソース・データベースと異なる名称にしたい場合は変更します。
instance_name インスタンス名 ソース・データベースと異なる名称にしたい場合は変更します。
java_pool_size Javaプールサイズ 物理メモリー構成や他のアプリケーションとのメモリーの配分を考慮して決定します。
large_pool_size ラージ・プールサイズ 物理メモリー構成や他のアプリケーションとのメモリーの配分を考慮して決定します。
log_archive_dest_1(※) アーカイブ・ログ出力先 4.でコピーしたディレクトリに合わせます。
pga_aggregate_targe PGA集計ターゲット 物理メモリー構成や他のアプリケーションとのメモリーの配分を考慮して決定します。
sga_max_size SGA最大サイズ 物理メモリー構成や他のアプリケーションとのメモリーの配分を考慮して決定します。
shared_pool_size 共有プールサイズ 物理メモリー構成や他のアプリケーションとのメモリーの配分を考慮して決定します。
user_dump_dest ユーザーダンプ出力先 4.でコピーしたディレクトリに合わせます。

※Standard Editionの場合は、log_archive_dest
6.ターゲット・データベースのパスワード・ファイルの作成
ターゲット・データベース上でコマンドプロンプトから以下のコマンドを実行し、sysユーザーのパスワードファイルを作成します。

orapwd FILE={ORACLE_HOME}\database\PWD{SID}.ora 
  PASSWORD={sysのパスワード}

  FILE    :パスワードファイル名
  PASSWORD:sysのパスワード

  例)ORACLE_HOMEがC:\oracle\ora92、SIDがORCL2、sysのパスワードが
      managerの場合、以下のようなSQLとなります。

      orapwd FILE=C:\oracle\ora92\database\PWDORCL2.ora PASSWORD=manager

7.ターゲット・データベースのOracleインスタンス(サービス)の作成
ターゲット・データベース上でコピーしたデータベースを起動するために、コマンド・プロンプトから以下のコマンドを実行し、Oracleインスタンス(サービス)を作成します。

ORADIM -NEW -SID { SID } -STARTMODE AUTO

    -NEW          :  Oracleインスタンスの新規作成
    -SID          :  作成するOracleインスタンスのSID
    -STARTMODE    :  OS起動時のOracleインスタンス(サービス)の
                      自動起動設定

SIDが"ORCL2"の場合、以下のようなコマンドとなります。

ORADIM -NEW -SID ORCL2 -STARTMODE AUTO

既に作成されているOracleインスタンス(サービス)を同一名称で再作成したい場合は、上記のコマンドを実行する前に以下のコマンドを実行して既存のOracleインスタンス(サービス)を削除します。

ORADIM -DELETE -SID { SID }

8.リスナーの構成
Oracle Net Managerを利用して、リスナーにデータベース・サービスを追加します。

※listener.oraの構成を理解しているのであれば、listener.oraを直接編集してもOKです。
9.Oracle Netサービスの構成
Oracle Net Managerを利用して、Oracle Netサービスを追加します。

※tnsnames.oraの構成を理解しているのであれば、tnsnames.oraを直接編集してもOKです。
10.ターゲット・データベースの起動
1.で作成し、4.でターゲット・データベースにコピーした制御ファイルのバックアップトレースファイルをテキスト・エディタで開き、"# Set #2. RESETLOGS case"以降のSQL文だけを抜き出し、以下の要領で編集します。

#
#     Set #2. RESETLOGS case
#
# The following commands will create a new control file and use it
# to open the database.
# The contents of online logs will be lost and all backups will
# be invalidated. Use this only if online logs are damaged.
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG
--  SET STANDBY TO MAXIMIZE PERFORMANCE
    MAXLOGFILES 5
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 226
LOGFILE
  GROUP 1 'E:\ORACLE\ORADATA\ORCL\REDO01A.LOG'  SIZE 100M,
  GROUP 2 'E:\ORACLE\ORADATA\ORCL\REDO02A.LOG'  SIZE 100M,
  GROUP 3 'E:\ORACLE\ORADATA\ORCL\REDO03A.LOG'  SIZE 100M
-- STANDBY LOGFILE
DATAFILE
  'E:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF',
  'E:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF',
  'E:\ORACLE\ORADATA\ORCL\DRSYS01.DBF',
  'E:\ORACLE\ORADATA\ORCL\INDX01.DBF',
  'E:\ORACLE\ORADATA\ORCL\TOOLS01.DBF',
  'E:\ORACLE\ORADATA\ORCL\USERS01.DBF',
  'E:\ORACLE\ORADATA\ORCL\XDB01.DBF'
CHARACTER SET JA16SJISTILDE
;
# Recovery is required if any of the datafiles are restored backups,
# or if the last shutdown was not normal or immediate.
RECOVER DATABASE USING BACKUP CONTROLFILE
# Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;
# Commands to add tempfiles to temporary tablespaces.
# Online tempfiles have complete space information.
# Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE 'E:\ORACLE\ORADATA\ORCL\TEMP01.DBF'
     SIZE 174063616  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;
# End of tempfile additions.
#

(1)STARTUP NOMOUNT
5.で編集した初期化パラメータ・ファイルを指定します。
例)STARTUP NOMOUNT PFILE='E:\oracle\admin\ORCL2\pfile\initORCL2.ora'
(2)CREATE CONTROLFILE ~
・データベース名を変更する場合は、DATABASEの後ろの"データベース名"を変更し、DATABASEの前に"SET"を付け加えます。
※データベース名は5.で編集した初期化パラメータファイルのDB_NAMEと一致させること
・アーカイブログモードを変更する場合は、RESETLOGSの後ろのARCHIVELOG(またはNOARCHIVELOG)をNOARCHIVELOG(またはARCHIVELOG)に変更します。
・デーファイル、REDOログファイルのディレクトリを4.でコピーしたディレクトリに合わせます。
例)CREATE CONTROLFILE REUSE SET DATABASE "ORCL2" RESETLOGS  NOARCHIVELOG
    --  SET STANDBY TO MAXIMIZE PERFORMANCE
        MAXLOGFILES 5
        MAXLOGMEMBERS 3
        MAXDATAFILES 100
        MAXINSTANCES 1
        MAXLOGHISTORY 226
    LOGFILE
      GROUP 1 (
        'E:\ORACLE\ORADATA\ORCL2\REDO01A.LOG',
        'E:\ORACLE\ORADATA\ORCL2\REDO01B.LOG'
      ) SIZE 100M,
      GROUP 2 (
        'E:\ORACLE\ORADATA\ORCL2\REDO02A.LOG',
        'E:\ORACLE\ORADATA\ORCL2\REDO02B.LOG'
      ) SIZE 100M,
      GROUP 3 (
        'E:\ORACLE\ORADATA\ORCL2\REDO03A.LOG',
        'E:\ORACLE\ORADATA\ORCL2\REDO03B.LOG'
      ) SIZE 100M
    -- STANDBY LOGFILE
    DATAFILE
      'E:\ORACLE\ORADATA\ORCL2\SYSTEM01.DBF',
      'E:\ORACLE\ORADATA\ORCL2\UNDOTBS01.DBF',
      'E:\ORACLE\ORADATA\ORCL2\DRSYS01.DBF',
      'E:\ORACLE\ORADATA\ORCL2\INDX01.DBF',
      'E:\ORACLE\ORADATA\ORCL2\TOOLS01.DBF',
      'E:\ORACLE\ORADATA\ORCL2\USERS01.DBF',
      'E:\ORACLE\ORADATA\ORCL2\XDB01.DBF'
    CHARACTER SET JA16SJISTILDE
    ;
(3)RECOVER DATABASE ~
リカバリは不要であるため削除します。
(4)ALTER DATABASE OPEN RESETLOGS;
そのまま使用します。
(5)ALTER TABLESPACE TEMP ~
TEMPFILEのディレクトリを4.でコピーしたディレクトリに合わせます。
例)ALTER TABLESPACE TEMP ADD TEMPFILE 
      'E:\ORACLE\ORADATA\ORCL\TEMP01.DBF'
      SIZE 625999872  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

SQLが編集できたら、sqlplusで7.で作成したインスタンスにsysユーザー(SYSDBA権限)で接続して実行します。

STARTUP NOMOUNT PFILE='E:\oracle\admin\ORCL2\pfile\initORCL2.ora'
CREATE CONTROLFILE REUSE SET DATABASE "ORCL2" RESETLOGS  NOARCHIVELOG
--  SET STANDBY TO MAXIMIZE PERFORMANCE
    MAXLOGFILES 5
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 226
LOGFILE
  GROUP 1 (
    'E:\ORACLE\ORADATA\ORCL2\REDO01A.LOG',
    'E:\ORACLE\ORADATA\ORCL2\REDO01B.LOG'
  ) SIZE 100M,
  GROUP 2 (
    'E:\ORACLE\ORADATA\ORCL2\REDO02A.LOG',
    'E:\ORACLE\ORADATA\ORCL2\REDO02B.LOG'
  ) SIZE 100M,
  GROUP 3 (
    'E:\ORACLE\ORADATA\ORCL2\REDO03A.LOG',
    'E:\ORACLE\ORADATA\ORCL2\REDO03B.LOG'
  ) SIZE 100M
-- STANDBY LOGFILE
DATAFILE
  'E:\ORACLE\ORADATA\ORCL2\SYSTEM01.DBF',
  'E:\ORACLE\ORADATA\ORCL2\UNDOTBS01.DBF',
  'E:\ORACLE\ORADATA\ORCL2\DRSYS01.DBF',
  'E:\ORACLE\ORADATA\ORCL2\INDX01.DBF',
  'E:\ORACLE\ORADATA\ORCL2\TOOLS01.DBF',
  'E:\ORACLE\ORADATA\ORCL2\USERS01.DBF',
  'E:\ORACLE\ORADATA\ORCL2\XDB01.DBF'
CHARACTER SET JA16SJISTILDE
;
ALTER DATABASE OPEN RESETLOGS;
ALTER TABLESPACE TEMP ADD TEMPFILE 'E:\ORACLE\ORADATA\ORCL\TEMP01.DBF'
     SIZE 625999872  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

11.サーバー・パラメータファイルの作成
ターゲット・データベース上で以下のSQLを実行し、サーバー・パラメータファイルを作成します。

CREATE SPFILE='{ORACLE_HOME}\database\spfile{SID}.ora' 
  FROM PFILE={5.で編集した初期化パラメータ・ファイル}'

  SPFILE:作成するサーバー・パラメータファイル名
  PFILE :作成元となる初期化パラメータファイル名

  例)ORACLE_HOMEがC:\oracle\ora92、SIDがORCL2、作成元の初期化パラメータ
      ファイル名がE:\oracle\admin\ORCL2\pfile\initORCL2.oraの場合、
      以下のようなSQLとなります。

      CREATE SPFILE='C:\oracle\ora92\database\spfileORCL2.ora' 
        FROM PFILE='E:\oracle\admin\ORCL2\pfile\initORCL2.ora'

12.ターゲット・データベースへの接続の確認
7.で作成されたOracleインスタンス(サービス)を再起動し、sqlplus、Oracle Enterprise Managerなどを使用してターゲット・データベースに接続できることを確認します。

※接続できない場合は、アラートログファイルやリスナー、Oracle Netの設定などを確認します。




【関連エントリ】
[Oracle] データベースのコピー方法(オフライン・バックアップを利用する方法<その1>) 2004/09/09
[Oracle] データベースのコピー方法(オフライン・バックアップを利用する方法<その2>) 2004/09/10