RMANでアーカイブファイルを削除するコマンドとシェルスクリプト

oracle-plane2-100


RMANでアーカイブファイルを削除する手順

アーカイブファイルはRMANコマンドで削除する方がいいです。OSコマンドで削除すると制御ファイル内の情報と実在するアーカイブファイルの総合性がとれなくなり、crosscheckなどの追加作業が必要になります。

ここでは、RMANコマンドで以下の削除パターンを検証しました。

  • 日数指定削除
  • シーケンス指定削除
  • シーケンスとスレッド指定削除
  • 「YES/NO」応答を求めない削除
  • 全削除

また、アーカイブ削除コマンドをスクリプトで実行する2つの方法もお伝えします。

  • RMANコマンドファイルをRMANコマンドに読ませて削除する方法
  • RMANコマンドをシェルスクリプトに記述して削除する方法

 それでは、アーカイブファイルを削除するRMANコマンドの使い方からいきます。



 

RMANコマンド

まずはRMANコマンドでアーカイブファイルを削除するパターンを検証します。oracleユーザーでRMANコマンドラインを起動します。

[oracle@server01:/home/oracle] rman target /

Recovery Manager: Release 11.2.0.4.0 - Production on 水 11月 13 13:58:06 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

ターゲット・データベース: DB01 (データベースID=1931198081)に接続されました

RMAN>

 

日数指定削除

日数指定のアーカイブファイルを削除します。削除対象のアーカイブファイルは、日数 * 24時間 以前のアーカイブファイルになります。

RMAN> delete archivelog until time ‘sysdate-日数’;

5日以前のアーカイブファイルは存在しないのですが、5日以前で指定するとこのようになります。

RMAN> delete archivelog until time 'sysdate-5';

チャネル: ORA_DISK_1がリリースされました
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=593 インスタンス=db011 デバイス・タイプ=DISK
指定がリポジトリ内のどのアーカイブ・ログとも一致しません

RMAN>

 

では、アーカイブファイルが存在する4日以前の削除を行います。

RMAN> delete archivelog until time 'sysdate-4';

チャネル: ORA_DISK_1がリリースされました
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=593 インスタンス=db011 デバイス・タイプ=DISK
データベースdb_unique_name DB01のアーカイブ・ログ・コピーのリスト
=====================================================================

Key     Thrd Seq     S Low時間
------- ---- ------- - --------
805     1    296     A 13-11-08
        名前: +DATA/db01/archive2/1_296_829070404.dbf

809     1    297     A 13-11-08
        名前: +DATA/db01/archive2/1_297_829070404.dbf

810     1    298     A 13-11-08
        名前: +DATA/db01/archive1/1_298_829070404.dbf

(途中省略)

1010    2    148     A 13-11-09
        名前: +DATA/db01/archive1/2_148_829070404.dbf

1011    2    148     A 13-11-09
        名前: +DATA/db01/archive2/2_148_829070404.dbf


このオブジェクトを削除しますか(YESまたはNOを入力してください)。

 

削除対象のアーカイブファイルがリストされ、削除するかの応答を求められます。「YES」を入力して削除します。

このオブジェクトを削除しますか(YESまたはNOを入力してください)。 YES
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/1_296_829070404.dbf レコードID=805 スタンプ=830980199
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/1_297_829070404.dbf レコードID=809 スタンプ=830980208

(途中省略)

アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive1/2_148_829070404.dbf レコードID=1010 スタンプ=831298298
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/2_148_829070404.dbf レコードID=1011 スタンプ=831298298
201オブジェクトを削除しました


RMAN>

 

シーケンスを指定した削除

次に、シーケンス番号を指定した削除です。指定したシーケンス番号より以前のアーカイブファイルが削除されます。

RMAN> delete archivelog until sequence シーケンス番号;

シーケンス番号「375」を指定して削除します。

RMAN> delete archivelog until sequence 375;

チャネル: ORA_DISK_1がリリースされました
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=593 インスタンス=db011 デバイス・タイプ=DISK
データベースdb_unique_name DB01のアーカイブ・ログ・コピーのリスト
=====================================================================

Key     Thrd Seq     S Low時間
------- ---- ------- - --------
1008    1    373     A 13-11-11
        名前: +DATA/db01/archive1/1_373_829070404.dbf

1009    1    373     A 13-11-11
        名前: +DATA/db01/archive2/1_373_829070404.dbf

1014    1    374     A 13-11-12
        名前: +DATA/db01/archive1/1_374_829070404.dbf

1015    1    374     A 13-11-12
        名前: +DATA/db01/archive2/1_374_829070404.dbf

1016    1    375     A 13-11-12
        名前: +DATA/db01/archive1/1_375_829070404.dbf

1017    1    375     A 13-11-12
        名前: +DATA/db01/archive2/1_375_829070404.dbf


このオブジェクトを削除しますか(YESまたはNOを入力してください)。

 

シーケンス番号375を含むそれ以前のファイルが削除対象としてリストされました。削除の応答を求められるので「YES」で削除します。

このオブジェクトを削除しますか(YESまたはNOを入力してください)。 YES
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive1/1_373_829070404.dbf レコードID=1008 スタンプ=831298296
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/1_373_829070404.dbf レコードID=1009 スタンプ=831298296
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive1/1_374_829070404.dbf レコードID=1014 スタンプ=831317614
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/1_374_829070404.dbf レコードID=1015 スタンプ=831317614
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive1/1_375_829070404.dbf レコードID=1016 スタンプ=831233237
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/1_375_829070404.dbf レコードID=1017 スタンプ=831233237
6オブジェクトを削除しました


RMAN>

 

シーケンス番号とスレッド番号を指定した削除

指定したスレッド番号のアーカイブファイルで、指定したシーケンス番号以前のアーカイブファイルを削除します。

RMAN> delete archivelog until sequence シーケンス番号 thread スレッド番号;

シーケンス番号「150」、スレッド番号「2」を指定して削除します。

RMAN> delete archivelog until sequence 150 thread 2;

チャネル: ORA_DISK_1がリリースされました
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=593 インスタンス=db011 デバイス・タイプ=DISK
データベースdb_unique_name DB01のアーカイブ・ログ・コピーのリスト
=====================================================================

Key     Thrd Seq     S Low時間
------- ---- ------- - --------
1012    2    149     A 13-11-12
        名前: +DATA/db01/archive1/2_149_829070404.dbf

1013    2    149     A 13-11-12
        名前: +DATA/db01/archive2/2_149_829070404.dbf

1018    2    150     A 13-11-12
        名前: +DATA/db01/archive1/2_150_829070404.dbf

1019    2    150     A 13-11-12
        名前: +DATA/db01/archive2/2_150_829070404.dbf


このオブジェクトを削除しますか(YESまたはNOを入力してください)。

 

スレッド番号が「2」で、シーケンス番号「150」を含むそれ以前のアーカイブファイルが削除対象としてリストされました。削除の応答を求められるので「YES」で削除します。

このオブジェクトを削除しますか(YESまたはNOを入力してください)。 YES
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive1/2_149_829070404.dbf レコードID=1012 スタンプ=831317613
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/2_149_829070404.dbf レコードID=1013 スタンプ=831317613
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive1/2_150_829070404.dbf レコードID=1018 スタンプ=831233265
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/2_150_829070404.dbf レコードID=1019 スタンプ=831233265
4オブジェクトを削除しました


RMAN>

 

削除応答を求めない削除

deleteコマンドを実行すると、対象アーカイブファイルの削除について「YES/NO」の応答を求められてましたが、「NOPROMPT」でこの応答を省略した削除も可能です。

RMAN> delete noprompt archivelog ~

それでは NOPROMPT で削除してみます。

RMAN> delete noprompt archivelog until sequence 372 thread 1;

チャネル: ORA_DISK_1がリリースされました
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=593 インスタンス=db011 デバイス・タイプ=DISK
データベースdb_unique_name DB01のアーカイブ・ログ・コピーのリスト
=====================================================================

Key     Thrd Seq     S Low時間
------- ---- ------- - --------
1007    1    372     A 13-11-09
        名前: +DATA/db01/archive2/1_372_829070404.dbf

1006    1    372     A 13-11-09
        名前: +DATA/db01/archive1/1_372_829070404.dbf

アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/1_372_829070404.dbf レコードID=1007 スタンプ=831179930
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive1/1_372_829070404.dbf レコードID=1006 スタンプ=831179930
2オブジェクトを削除しました


RMAN>

 

応答を求められずに削除されました。

 

全アーカイブファイル削除

全てのアーカイブファイルを削除するコマンドはこうです。

RMAN> delete archivelog all;

 

 

スクリプトにして削除する方法

RMANコマンドをスクリプトに記述してバッチ形式で削除することができます。パターンとしては2つあります。

  1. RMANコマンドを記述したファイルを作成し、RMANコマンドで削除する方法
  2. シェルスクリプトにRMANコマンドを記述して削除する方法

この2つの方法をそれぞれ試してみます。

 

RMANコマンドファイルを作成してRMANコマンドで削除

RMANコマンドを記述したファイル「del_archive.rman」を作成します。RUN{ } の中にRMANコマンドを記述します。

$ cat del_archive.rman
RUN
{
  delete archivelog until sequence 377;
}
$

RMANコマンドにこのファイルを読み込ませて、アーカイブファイルを削除します。ファイル名は「@」の後に指定します。

[oracle@server01:/home/oracle] rman target / @del_archive.rman

Recovery Manager: Release 11.2.0.4.0 - Production on 水 11月 13 14:30:43 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

ターゲット・データベース: DB01 (データベースID=1931198081)に接続されました

RMAN> RUN
2> {
3>   delete archivelog until sequence 377;
4> }
5>
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=102 インスタンス=db011 デバイス・タイプ=DISK
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive1/1_376_829070404.dbf レコードID=1022 スタンプ=831236030
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/1_376_829070404.dbf レコードID=1023 スタンプ=831236030
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive1/1_377_829070404.dbf レコードID=1024 スタンプ=831236004
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/1_377_829070404.dbf レコードID=1025 スタンプ=831236004
4オブジェクトを削除しました


Recovery Managerが完了しました。
[oracle@server01:/home/oracle]

 

削除の応答を求められずに削除できました。

 

シェルスクリプトにRMANコマンドを記述して削除

RMANコマンドを記述したシェル「rman_del_archive.sh」を以下の内容で作成します。

$ cat rman_del_archive.sh
rman target / << EOF
  delete archivelog until sequence 379;
EOF
$

RMANコマンドに、「EOF」までに記述されたRMANコマンドを実行する書き方です。
ちなみに、このシェルは削除に失敗します。

[oracle@server01:/home/oracle] rman_del_archive.sh

Recovery Manager: Release 11.2.0.4.0 - Production on 水 11月 13 14:35:01 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

ターゲット・データベース: DB01 (データベースID=1931198081)に接続されました

RMAN>
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=102 インスタンス=db011 デバイス・タイプ=DISK
データベースdb_unique_name DB01のアーカイブ・ログ・コピーのリスト
=====================================================================

Key     Thrd Seq     S Low時間
------- ---- ------- - --------
1026    1    378     A 13-11-11
        名前: +DATA/db01/archive1/1_378_829070404.dbf

1027    1    378     A 13-11-11
        名前: +DATA/db01/archive2/1_378_829070404.dbf

1028    1    379     A 13-11-12
        名前: +DATA/db01/archive1/1_379_829070404.dbf

1029    1    379     A 13-11-12
        名前: +DATA/db01/archive2/1_379_829070404.dbf


このオブジェクトを削除しますか(YESまたはNOを入力してください)。
レスポンス取得中にエラーが発生しました - レスポンスなしとします

RMAN>

Recovery Managerが完了しました。
[oracle@server01:/home/oracle]

 

削除の応答「YES/NO」がなかった為に失敗していることがわかります。削除応答を省略するために、シェル内のRMANコマンドに NOPROMPT を追加します。

$ cat rman_del_archive.sh
rman target / << EOF
  delete noprompt archivelog until sequence 379;
EOF
$

 

それではシェルをリランします。

[oracle@server01:/home/oracle] rman_del_archive.sh

Recovery Manager: Release 11.2.0.4.0 - Production on 水 11月 13 14:37:08 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

ターゲット・データベース: DB01 (データベースID=1931198081)に接続されました

RMAN>
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=6 インスタンス=db011 デバイス・タイプ=DISK
データベースdb_unique_name DB01のアーカイブ・ログ・コピーのリスト
=====================================================================

Key     Thrd Seq     S Low時間
------- ---- ------- - --------
1026    1    378     A 13-11-11
        名前: +DATA/db01/archive1/1_378_829070404.dbf

1027    1    378     A 13-11-11
        名前: +DATA/db01/archive2/1_378_829070404.dbf

1028    1    379     A 13-11-12
        名前: +DATA/db01/archive1/1_379_829070404.dbf

1029    1    379     A 13-11-12
        名前: +DATA/db01/archive2/1_379_829070404.dbf

アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive1/1_378_829070404.dbf レコードID=1026 スタンプ=831315792
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/1_378_829070404.dbf レコードID=1027 スタンプ=831315792
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive1/1_379_829070404.dbf レコードID=1028 スタンプ=831315793
アーカイブ・ログを削除しました
アーカイブ・ログ・ファイル名=+DATA/db01/archive2/1_379_829070404.dbf レコードID=1029 スタンプ=831315793
4オブジェクトを削除しました


RMAN>

 

今度は削除することができました。

 

RMANコマンドファイルを読ませる場合は、削除応答がなく、
シェル内にRMANコマンドを記述する場合は、削除応答があるので NOPROMPT が必要、
ということが分かりました。

 

 



 

 


サブコンテンツ

このページの先頭へ