web-dev-qa-db-ja.com

RMANはアーカイブログに作成されたデータファイルの名前を変更します

Oracleデータベース(11.2.0.4.0)を別のファイルレイアウトのテストシステムに復元しようとしています。本番データベースはRMANを使用してバックアップされており、カタログは使用されていません。日曜日(最後のデータファイルは3月9日)にすべてのデータファイルの完全バックアップを実行し、週の毎晩のみアーカイブログをバックアップします。

3/9には11のデータファイルがありました。 3/12に新しいテーブルスペース/データファイルを作成しました。今日の復元を行うときの私の一般的なプロセスは次のとおりです。

  1. Oracleソフトウェアのみをインストールし、初期データベースはインストールしない
  2. SPFILEを3/9バックアップからPFILEに復元し、編集します。ここで、DB_DOMAINと、テストサーバー上の制御ファイルの新しい場所を変更します。
  3. 新しいPFILEでnomountを起動します。
  4. 3/9バックアップから制御ファイルを復元します。
  5. データベースをマウントします。 sqlplusを使用して、REDOログの名前を新しい場所に変更します。
  6. 復元された制御ファイルは3/10-3/14のバックアップピースを認識しないため、欠落している日ごとにこれを実行します:_CATALOG BACKUPPIECE '/path/to/backuppiece.bkp'_
  7. 最後に、このRMANコマンドを実行してデータベースを復元/回復します(_LIST BACKUPSET_からSCNを取得):

    _RUN
    {
    SET UNTIL SCN 426265698;
    SET NEWNAME FOR DATAFILE 1 TO '/var/Oracle/data/orcl/system01.dbf';
    SET NEWNAME FOR DATAFILE 2 TO '/var/Oracle/data/orcl/sysaux01.dbf';
    SET NEWNAME FOR DATAFILE 3 TO '/var/Oracle/data/orcl/undotbs01.dbf';
    SET NEWNAME FOR DATAFILE 4 TO '/var/Oracle/data/orcl/users01.dbf';
    SET NEWNAME FOR DATAFILE 5 TO '/var/Oracle/data/orcl/foo01.dbf';
    SET NEWNAME FOR DATAFILE 6 TO '/var/Oracle/data/orcl/foo02.dbf';
    SET NEWNAME FOR DATAFILE 7 TO '/var/Oracle/data/orcl/foo03.dbf';
    SET NEWNAME FOR DATAFILE 8 TO '/var/Oracle/data/orcl/foo04.dbf';
    SET NEWNAME FOR DATAFILE 9 TO '/var/Oracle/data/orcl/foo05.dbf';
    SET NEWNAME FOR DATAFILE 10 TO '/var/Oracle/data/orcl/foo06.dbf';
    SET NEWNAME FOR DATAFILE 11 TO '/var/Oracle/data/orcl/foo07.dbf';
    SET NEWNAME FOR DATAFILE 12 TO '/var/Oracle/data/orcl/foo08.dbf';
    RESTORE DATABASE;
    SWITCH DATAFILE ALL;
    RECOVER DATABASE;
    }
    _

そのため、このプロセスは一般的にうまく機能しています。 3/9バックアップに存在するデータファイルは、新しい場所に復元されます。問題は、3/12に作成したテーブルスペースです。リカバリプロセスがその時点になると、RMANは次のように出力します。

_creating datafile file number=12 name=/opt/Oracle/oradata/orcl/foo08.dbf
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/14/2014 13:24:41
RMAN-20505: create datafile during recovery
ORA-01119: error in creating database file '/opt/Oracle/oradata/orcl/foo08.dbf'
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
_

これで、古い場所にディレクトリを作成し、RMANにそのディレクトリに復元させ、後でデータファイルを移動することで、これを回避できることがわかりました。しかし、最後のrenameコマンドが機能しない理由、またはアーカイブログを復元するときに名前を変更するために何を変更する必要があるのか​​を理解したいと思います。

1
sbutler

SET NEWNAMEはRESTOREおよびSWITCHでは機能しますが、RECOVERでは機能しません。リカバリが始まる前に、データファイルの名前が変更され、切り替えられていました。

ただし、プロセスに欠陥があり、上記の問題はその副作用です。

3/9バックアップから制御ファイルを復元します。

どうして? 3/9の状態ではなく、現在の状態にできるだけ近づけるために、ほぼ完全な回復を行います。 3/14に取得した最新のバックアップから制御ファイルを復元します。

復元された制御ファイルは3/10-3/14のバックアップピースを認識しないため、これをそれぞれ実行します

最新の制御ファイルを使用する場合、この手順は不要です。

0
Balazs Papp