Oracle 11g (Windows版) - 別サーバーへの複製

前の記事にも書きましたが、今回の目的は現在稼働している Oracle サーバーを仮想化し、そのまま運用を続けることです。サーバー移行の際は、いくらかの時間 Oracle を止めることはできますが、あまり長い時間止めることはできません。そのため、

という単純な方法は(時間がかかりすぎて)とることができませんでした。そこで事前に P2V してホスト名と IP アドレスを変更した仮想マシンを作っておき、サーバー移行の際は Oracle のデータだけをコピーする、という方法にトライすることにしました。具体的には

  • 移行元/移行先サーバーの Oracle を停止
  • 移行元から移行先に Oracle データをコピー
  • 移行元サーバーをシャットダウン
  • 移行先サーバーのホスト名と IP アドレスを(移行元と同じになるよう)変更
  • 移行先サーバーの Oracle を起動

というものです。

どのファイルをコピーするべきか

ユーザー管理データベース・バックアップの作成 を参考に考えてみることにします。

「データベース全体のユーザー管理バックアップの作成」のところを見ると、

オペレーティング・システム・ユーティリティを使用して、すべてのデータファイルと、初期化パラメータ・ファイルのCONTROL_FILESパラメータで指定された すべての制御ファイルのバックアップを作成します。また、初期化パラメータ・ファイルおよびその他のOracle製品の初期化ファイルもバックアップします。

とあります。今回、パラメータファイルは移行元/先で同一のはずなので、

  • データファイル
  • 制御ファイル

をコピーすれば良いことになります。しかし、このマニュアルの説明は障害発生時のリカバリを想定しているのでオンラインREDOログ、アーカイブREDOログの事に触れていませんが、今回の場合は移行先の方が古いオンラインREDOログ、アーカイブREDOログの状態であるためこれらもコピーするべきなのではないかと思います。結局、

  • データファイル
  • 制御ファイル
  • オンラインREDOログ
  • アーカイブREDOログ

をコピーすれば良いと思われます。

各ファイルのパスの調べ方

インスタンスごとに下記SQL文で調べられる。

データファイル
select tablespace_name, file_name from dba_data_files

tablespace_name は表領域名。

制御ファイル
select name from v$controlfile
オンラインREDOログ
select group#, member from v$logfile

group# はメンバーが含まれるロググループの番号。

アーカイブREDOログ

これは少しややこしいところがあります。 Recovery Manager環境の構成 をよく読む必要がある(と思います)。 まず、フラッシュリカバリ領域が有効になっているかどうかで話が変わってきます。有効である場合は、

select name from v$recovery_file_dest;

で確認できるフラッシュリカバリ領域にファイルが作成されます。例えば、上記 SQL

C:\oracle\flash_recovery_area

と表示された場合は、そのフォルダの下に、sid\ARCHIVELOG というフォルダが作成され、その中の日付がついたフォルダ内にアーカイブREDOログはできます。 ファイル名は何らかのルールで決まっているようですが、よくわかりません(初期化パラメータ LOG_ARCHIVE_FORMAT は無視されます)。 この他に、初期化パラメータ LOG_ARCHIVE_DEST_n (n=1〜31)で指定されるフォルダにもアーカイブREDOログはできます。

フラッシュリカバリ領域が無効である場合は、初期化パラメータ LOG_ARCHIVE_DEST_n, LOG_ARCHIVE_DUPLEX, LOG_ARCHIVE_DUPLEX_DEST で指定されるフォルダに アーカイブREDOログは作成されます。(LOG_ARCHIVE_DUPLEX, LOG_ARCHIVE_DUPLEX_DEST は非推奨のオプション。フラッシュリカバリ領域が有効である場合は この2パラメータを指定するとインスタンスを起動できなくなるとのことです)

と、ここまで書いた所でもう少し簡単に調べる方法を見つけました。

archive log list

というコマンドの出力結果に「アーカイブ先」として表示されます。ただし、アーカイブ先が USE_DB_RECOVERY_FILE_DEST となっている場合は上記のフラッシュリカバリ領域がアーカイブ先になります。