RMAN⑤ リカバリ・アドバイザ

DBが起動しなくなった時に、Oracle自身にリカバリ方法のアドバイス&実行させる方法となります。全損などの障害には対応できませんが、調査の一環としても利用できるかと思います。

※12c R2 時点では、RAC環境ではリカバリアドバイザは利用できません。
RMAN-05533: Command LIST FAILURE is not supported on RAC database

主な流れとしては、以下となります。
・障害発覚
・RMAN起動
・list failure コマンドでOracleが認識している障害を表示
・advise failure コマンドで修復方法を表示。(手動と自動が表示される)
・自動修復可能な場合は、repair failure コマンドで修復。自動修復出来ない場合は、手動で修復

簡単な例:

1.rmanでバックアップしておく

backup database plus archivelog delete all input;

2.障害準備

DBを停止し、データファイル(USERS01.DBF)を削除

3.DBを起動し、障害を認識させる

SQL> startup
ORACLEインスタンスが起動しました。

Total System Global Area 2533359616 bytes
Fixed Size 8750016 bytes
Variable Size 687868992 bytes
Database Buffers 1828716544 bytes
Redo Buffers 8024064 bytes
データベースがマウントされました。
ORA-01157: データファイル4を識別/ロックできません –
DBWRトレース・ファイルを参照してください
ORA-01110: データファイル4: ‘C:\APP\ORACLE\ORADATA\ORCL\USERS01.DBF’

4.rman 起動

5.障害一覧表示(list failure)
RMAN> list failure;

リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
データベース・ロール: PRIMARY

データベース障害のリスト
=========================

障害ID 優先度ステータス 検出時間 サマリー
—— ——– ——— ——– ——-
374 HIGH OPEN 17-09-01 SYSTEM以外のデータファイルの1つ以上でメディア・リカバリが必要です
202 HIGH OPEN 17-09-01 SYSTEM以外のデータファイルが1つ以上見つかりません

6. 修復方法を表示(advise failure)

RMAN> advise failure;

データベース・ロール: PRIMARY

データベース障害のリスト
=========================

障害ID 優先度ステータス 検出時間 サマリー
—— ——– ——— ——– ——-
374 HIGH OPEN 17-09-01 SYSTEM以外のデータファイルの1つ以上でメディア・リカバリが必要です
202 HIGH OPEN 17-09-01 SYSTEM以外のデータファイルが1つ以上見つかりません

自動修復オプションを分析中です。これには少し時間がかかる場合があります
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=11 デバイス・タイプ=DISK
自動修復オプションの分析が完了しました

必須の手動アクション
========================
使用可能な手動アクションがありません

オプションの手動アクション
=======================
1. 適切でないバージョンのデータファイルC:\APP\ORACLE\ORADATA\ORCL\USERS01.DBFをリストアした場合、適切なバージョンに置き換えます
2. 意図せずにファイルC:\APP\ORACLE\ORADATA\ORCL\USERS01.DBFの名前の変更または移動が行われていた場合リストアします

自動修復オプション
========================
オプション 修復 説明
—— ——————
1 データファイル4をリストアおよびリカバリします
計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます
修復スクリプト: C:\APP\ORACLE\diag\rdbms\orcl\orcl\hm\reco_3471312696.hm

7. 自動修復実行(repair failure)

RMAN> repair failure;

計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます
修復スクリプト: C:\APP\ORACLE\diag\rdbms\orcl\orcl\hm\reco_3471312696.hm

修復スクリプトの内容:
# restore and recover datafile
restore ( datafile 4 );
recover datafile 4;
sql ‘alter database datafile 4 online’;

この修復を実行しますか(YESまたはNOを入力してください)。 yes
修復スクリプトを実行しています

restoreを18-06-26で開始しています
チャネルORA_DISK_1の使用

チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_DISK_1: データファイル00004をC:\APP\ORACLE\ORADATA\ORCL\USERS01.DBFにリストアしています
チャネルORA_DISK_1: バックアップ・ピースC:\APP\ORACLE\ORADATA\ORCL\BACK\ORCL_3KT6DP3E_1_1から読取り中です
チャネルORA_DISK_1: ピース・ハンドル=C:\APP\ORACLE\ORADATA\ORCL\BACK\ORCL_3KT6DP3E_1_1 タグ=TAG20180626T124118
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:01
restoreを18-06-26で終了しました

recoverを18-06-26で開始しています
チャネルORA_DISK_1の使用

メディア・リカバリを開始しています
メディア・リカバリが完了しました。経過時間: 00:00:00

recoverを18-06-26で終了しました

SQL文: alter database datafile 4 online
障害の修復が完了しました

データベースをオープンしますか(YESまたはNOを入力してください)。 yes
データベースがオープンしました。

以上となります。

RMAN④ リストアリカバリ(障害発生時点まで)

今回はRMANのリストア・リカバリ方法のうち、障害発生時点まで復旧させる方法を記載させて頂きます。

障害発生時点まで復旧させる前提としては、以下となります。

・OSに障害が無いこと
・DBデータファイル以外の、制御ファイル、REDOログファイル、アーカイブREDOログファイルに破損が無いこと
・バックアップが成功しており、バックアップファイルが存在すること

リストア・リカバリコマンドと実行例は以下の通りです。

1.DBデータのリストア
RMANでDBファイルをリストアする場合、mountモードで起動している必要があります。

コマンド:

su – oracle
sqlplus / as sysdba
startup mount;

実行例:————————————————————————-
# su – oracle
$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on

Copyright (c) 1982, 2014, Oracle. All rights reserved.

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 – 64bit Production
With the Partitioning, OLAP, Advanced Analytics, Real Application Testing
and Unified Auditing options
に接続されました。

SQL> startup mount
ORACLEインスタンスが起動しました。

Total System Global Area 4.1540E+10 bytes
Fixed Size 4371656 bytes
Variable Size 5979324152 bytes
Database Buffers 3.4426E+10 bytes
Redo Buffers 128843776 bytes
データベースがマウントされました。

———————————————————————————-

 

2.RMAN起動
リストア・リカバリを実行するために、RMANを起動します。

コマンド:

export NLS_DATE_FORMAT=’yyyy/mm/dd hh24:mi:ss’
rman target /

実行例:————————————————————————-
$ export NLS_DATE_FORMAT=’yyyy/mm/dd hh24:mi:ss’
$ rman target /

Recovery Manager: Release 12.1.0.2.0 – Production on

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

ターゲット・データベース: ORCL(DBID=1234245419、未オープン)に接続されました
———————————————————————————-

 

3.DBのリストア・リカバリを実行
以下のRMANコマンドを実行することで、リストアをリカバリを同時に実行します。また、実行例を見て頂くと、まずデータファイルをリストアし、REDOログファイルからリカバリしていることが分かると思います。

コマンド:

run {
restore database;
recover database;
}

実行例:————————————————————————-

RMAN> run {
restore database;
recover database;
}

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

restoreが開始されました(開始時間: 2018-03-21 10:47:18)

チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_DISK_1: データファイル00001を/oracle/data/orcl/system01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00002を/oracle/data/orcl/sysaux01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00003を/oracle/data/orcl/undotbs01.dbfにリストアしています
チャネルORA_DISK_1: データファイル00004を/oracle/data/orcl/users01.dbfにリストアしています
チャネルORA_DISK_1: バックアップ・ピースORCL_0sqf1zed_1_1から読取り中です
チャネルORA_DISK_1: ピース・ハンドル=/backup/ORCL_0sqf1zed_1_1 タグ=TAG20170922T101540
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:21:45
restoreが完了しました(完了時間: 2018-03-21 11:29:29)

recoverが開始されました(開始時間: 2018-03-21 11:29:29)

メディア・リカバリを開始しています
メディア・リカバリが完了しました。経過時間: 00:00:03

recoverが完了しました(完了時間: 2018-03-21 11:29:32)
チャネル: ORA_DISK_1がリリースされました

———————————————————————————-

4. DBをオープンする

コマンド:
alter database open;

実行例:————————————————————————-

RMAN> alter database open;
alter database open;
文が処理されました

———————————————————————————-

以上で完了です。

次回以降、時間指定リカバリと、全損時想定のリカバリ方法を記載したいと思います。

RMAN③ リスト

今回はRMAN(Recovery Manager)のバックアップリストの見方です。

バックアップしたファイルの管理や、リストア・リカバリをする際に重要な情報が記載されています。

尚、RMAN起動前に以下のように環境変数を設定しておくと、バックアップファイルの日時まで表示されるようになります(デフォルトは日にちのみ)。

Linux系
export NLS_DATE_FORMAT=’yyyy/mm/dd hh24:mi:ss’

Windows
set NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS

コマンドは、以下となります。

list backup;

以下は、検証用シングルDBでのリスト出力結果です。
RAC環境になると、ノード毎にスレッドが異なって表示されますが、大差はないです。

 

バックアップファイルは主に3種類あります。
・データファイル
・アーカイブログファイル
・制御ファイルとSPファイル

バックアップした順に表示されており、SCN、時間などを確認すると、どのバックアップにどの時間帯がバックアップされているかが分かります。

また、実行中のRMAN処理の状況は、以下SQLで確認することが出来ます。

set line 200

SELECT OPERATION,OBJECT_TYPE,STATUS,
TO_CHAR(START_TIME,’yyyy/mm/dd hh24:mi:ss’) “START_TIME”
FROM V$RMAN_STATUS WHERE STATUS=’RUNNING’
ORDER BY START_TIME;

OPERATION とOBJECT_TYPE を確認すると、何のファイルを処理中か判別できます。

BACKUP 、ARCHIVELOG → アーカイブログバックアップ中
BACKUP 、DB FULL → フルバックアップ中
CONTROL FILE AND SPFILE AUTOBACK → 制御ファイルの自動バックアップ中
DELETE → バックアップファイルの削除中

 

RMAN② バックアップ

今回はRMAN(Recovery Manager)のバックアップとなります。

Oracleのバックアップには、オンラインバックアップ、オフラインバックアップ。差分、増分などあります。
オンラインバックアップからリストア・リカバリする場合は、バックアップ中のアーカイブログも必要になります (無いとリカバリできません)。

RMANを起動し、以下のコマンドを実行することで様々なバックアップをすることができます。
バックアップ先ディレクトリや、制御ファイルの自動バックアップは前回の「設定」により指定することができます。

・フルバックアップ
backup database;

・フルバックアップとアーカイブログのバックアップ。アーカイブログはバックアップ後に削除
backup database plus archivelog delete all input;

※上述の通り、オンラインバックアップの場合は、アーカイブログがリストア・リカバリに必要になります。このコマンドはバックアップとアーカイブログを同時に取得するので便利かと思います。

・バックアップ先を指定してバックアップ
backup database format ‘/backup/oracle/%U’;

・特定表領域のバックアップ
backup tablespace 表領域名;

・特定データファイルのバックアップ
backup datafile ファイル番号;
backup datafile ‘ファイル名’;

・タグを付けてバックアップ
backup database tag ‘for_versionup’;

・増分バックアップ
レベル0 (初回・・イメージコピーで取得)
backup as copy incremental level 0 database;
レベル1 (差分・・バックアップセットで取得)
backup incremental level 1 [cumulative] database;
※ cumulative・・累積増分

———–

・アーカイブログバックアップ
すべてのアーカイブログをバックアップ
backup archivelog all;

アーカイブログ取得後、削除(バックアップしたファイルのみ削除)
backup archivelog all delete input;

アーカイブログ取得後、削除(バックアップ対象のすべての削除)
backup archivelog all delete all input;

バックアップされていないアーカイブログのみバックアップする
backup archivelog all not backed up 1 times;

特定のシステムチェンジナンバー(SCN)以降のバックアップ(データ移行時など、全てのアーカイブログが必要ではないときなどに)
backup archivelog from scn ?????;

※システムチェンジナンバー(SCN)
トランザクションごとに順番に割り振られる番号。
リカバリを行う際などに利用。データファイル、制御ファイル、REDOログファイルなどに割り振られる。

上記はバックアップコマンドの一部になります。運用設計や、移行設計により様々なコマンドを利用して実装していきます。

RMAN① バックアップ設定

前回はコールドバックアップについて記載しましたが、今回から数回はOracle標準のバックアップツールであるRMAN(Recovery Manager)についてとなります。

個人的に気に入っているRMANを使うメリットです。

1. バックアップ管理が容易 ・・ バックアップ対象ファイルをOracleが自動で取得する。世代管理も自動。

2.未使用領域の圧縮・・データファイルのうち、使用していない領域は圧縮の対象になる。

3.破損バックアップの検出・・バックアップ取得時に破損ブロックを検出する。OSコマンドやストレージ機能を使用したバックアップでは、破損ブロックが含まれた状態のバックアップになってしまう可能性もある。

———————————————————————–

バックアップコマンド自体は、

backup database;  フルバックアップ

backup database plus archivelog delete all input;  フルバックアップとアーカイブログのバックアップ。アーカイブログはバックアップ後に削除

などがありますが、事前に運用設計にあわせ、バックアップ設定をしておくことがおすすめです。(バックアップのコマンド詳細は次回以降)

———————————————————————–

現在の設定を表示:

show all;

保存設定(世代管理:例は3世代):

CONFIGURE RETENTION POLICY TO REDUNDANCY 3;

保存設定(日数管理:例は5日前までに復旧できる):

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 5 DAYS;

バックアップファイルの保存先(DBとアーカイブログの保存先):

CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT ‘/backup/%U’;

%Uは必須(重複しないファイル名を自動生成してくれる)。その他、%dでDB名、%IはDBID(SPファイルのリストア時に必要)を入れると、バックアップファイルを管理しやすいかな、と思います。

制御ファイル、SPファイルの自動バックアップ有効:

CONFIGURE CONTROLFILE AUTOBACKUP ON;

制御ファイルには、バックアップ時の情報が記録されているので、リストア・リカバリを容易にするためには必須かと思っています。

制御ファイル、SPファイルのバックアップ保存先:

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/backup/%F’;

 

設定を元に戻す場合は、値の代わりにCLEARオプションを指定して戻る方法や、sql*plus からEXECUTE DBMS_BACKUP_RESTORE.RESETCONFIG を実行すると全てのパラメータをデフォルトに戻せます。

コールドバックアップ

私は、アプリ開発技術者時代に初めてデータベース(SQLServer)に触れ、その後、Oracle専任技術者となり、お客様に最適なシステムの提案、構築、問題解決などをしています。このページでは、Oracleを学んできた上で役立ちそうな情報を記載していこうと思っています。

データベース環境は、11gR2、12cR1、12cR2です。基本はStandard Editionでも出来る内容を考えています。

まずバックアップの基本であるコールドバックアップとなります。

コールドバックアップに必要なDB構成ファイルは以下のコマンドで表示されます。

DB構成ファイル
————————
set line 200
col name for a100
col member for a100

select name from v$controlfile
union
select name from v$datafile
union
select name from v$tempfile
union
select member from v$logfile ;
————————

※一時表領域は再作成可能ですが、リストア時に古いファイルが残っている場合、他のファイルと整合性が合わないなど、おかしな動作をする懸念があるので、含めています。

上記で表示されたファイルをDB正常停止後にバックアップすればOKです。

shutdown immediate (shutdown abort、異常終了時は不可)

その他、パラメータファイルや、ネットワーク関連ファイル、パスワードファイルもあれば良いかと思います。

パラメータファイル
ORACLE_HOME/dbs (Windowsの場合は、%ORACLE_HOME%\database)
・システムパラメータファイルの場合
spfile<SID>.ora
・ 初期化パラメータファイルの場合
init<SID>.ora

※SPファイルがASM内に格納されている場合は、以下コマンドなどで作成できます。
create pfile = ‘/tmp/initxx.ora’ from spfile’;

各構成パラメータファイル
$ORACLE_HOME/network/admin ディレクトリ
tnsnames.ora
listener.ora
sqlnet.ora

パスワードファイル
$ORACLE_HOME/dbs (Windowsの場合は、%ORACLE_HOME%\database)
orapw<SID>

Windowsの場合、PWD<SID>.ora