kenken0807_DBメモ

つば九郎が好きなDBAです。Oracle Standard Editionでの運用やツールとかとかの備忘録。特に記載がない場合はoracle11gR2です。時々MySQL

Oracle Database Connect 2016(JPOUG) でDRCPについてLTしました

JPOUGで2回目のLTしました。
さすがに1回目より緊張しないかなーと思たけど、
500人以上の会場の規模にさすがにビビった。。。

Oracle常駐接続プーリングについて話させていただきました。

スライドの最後にも書いてますが、
12cからの新機能である専用サーバプロセスのマルチスレッド化が気になるので
これをDRCPと通常の専用サーバ接続とで比較したい。

最後にLTでの答えられなかった質問

質問:エチオピアの首都はどこですか?
回答:エチオピアの首都はアディスアベバ!!

↑の流れ

ORACLEでテーブルごとのDML回数を取得する

テーブルごとの1時間あたりのDML(INSERT,UPDATE,DELETE)の平均を取得するために考えた方法。
確認手段としてDBA_TAB_MODIFICATIONSを使用する。

ALL_TAB_MODIFICATIONS

以下のように確認できる。

SELECT
   table_name,inserts,updates,deletes,to_char(timestamp,'YYYY-MM-DD HH24:MI:SS') as timestamp
FROM
   dba_tab_modifications
WHERE
   TABLE_OWNER in ('USER') 
   and TABLE_NAME not like 'BIN$%';

TABLE_N    INSERTS    UPDATES    DELETES TIMESTAMP
------- ---------- ---------- ---------- -------------------
TABLE00        868       2446       1974 2016-04-26 18:00:01
TABLE01        445          0         10 2016-04-26 17:15:28
TABLE02          1          1          0 2016-02-22 18:06:50
TABLE03      16635          0      16635 2016-04-26 18:00:01
TABLE04          6          0          4 2016-04-26 15:54:26
TABLE05          0        124          0 2016-04-26 18:00:01
TABLE06        335       3071          0 2016-04-26 18:00:01
TABLE07         12          0          0 2016-04-06 17:29:01
TABLE08      58694          0      40023 2016-04-26 18:00:01
TABLE09     131440          0     102863 2016-04-26 18:00:01

マニュアルによると、

前回、表の統計情報を収集した時点から変更されている

とあるので、統計情報を取得したタイミングで更新される模様。

これを定期的に更新してあげるには↓を実行する。

begin DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO; end;

そうすると実行したタイミングで更新がある場合はTIMESTAMPが書き換えられ、更新回数が累積される。
前回との差分を比較することでDML回数がわかる。
1時間置き実行して結果をfluentdで送ったり、グラフ化することができる。

うちでは
1. 1時間置きにFLUSH_DATABASE_MONITORING_INFOを実行
2. SELECT FROM dba_tab_modificationsを実行しMySQLに格納
3. Muninでグラフ化
みたいにしている。

直接グラフでもいいけど、MySQLに入れておけばSQLでいろいろ拡張やら調査が可能なので。

注意としては統計情報を取得したタイミングで更新情報がリセットされるのでその時は差分を取得するのではなくその値を初期値にする。 MySQLで取得しているデータはこんな感じ↓

カラム名 説明
TABLE_NAME テーブル名
INSERTS 前回との差分insert回数
SUM_INSERTS 累積insert回数
UPDATES 前回との差分update回数
SUM_UPDATES 累積update回数
DELETES 前回との差分delete回数
SUM_DELETES 累積delete回数
TIMESTAMP Oracle側の更新時間
+-----------+---------+-------------+---------+-------------+---------+-------------+---------------------+
| TABLE_NAME| INSERTS | SUM_INSERTS | UPDATES | SUM_UPDATES | DELETES | SUM_DELETES | TIMESTAMP           |
+-----------+---------+-------------+---------+-------------+---------+-------------+---------------------+
| TABLE00   |      14 |       88710 |      64 |      118695 |       0 |           0 | 2016-03-31 13:53:11 |↑
| TABLE00   |       5 |       88715 |      24 |      118719 |       0 |           0 | 2016-03-31 15:00:02 |
| TABLE00   |      17 |       88732 |      57 |      118776 |       0 |           0 | 2016-03-31 15:57:26 |
| TABLE00   |      18 |       88750 |     228 |      119004 |       0 |           0 | 2016-03-31 17:00:02 |
| TABLE00   |     726 |       89476 |     325 |      119329 |       0 |           0 | 2016-03-31 18:00:01 |累積値
| TABLE00   |     483 |       89959 |     299 |      119628 |       0 |           0 | 2016-03-31 19:00:01 |
| TABLE00   |      49 |       90008 |      11 |      119639 |       0 |           0 | 2016-03-31 20:00:01 |
| TABLE00   |       8 |       90016 |      31 |      119670 |       0 |           0 | 2016-03-31 20:58:26 |
| TABLE00   |      16 |       90032 |      22 |      119692 |       0 |           0 | 2016-03-31 22:00:01 |↓
| TABLE00   |      19 |          19 |      13 |          13 |       0 |           0 | 2016-03-31 23:00:01 |←統計情報が取得されたのでリセットされた
| TABLE00   |      28 |          47 |      17 |          30 |       0 |           0 | 2016-03-31 23:59:41 |↑
| TABLE00   |       8 |          55 |      10 |          40 |       0 |           0 | 2016-04-01 01:00:01 |
| TABLE00   |       7 |          62 |       5 |          45 |       0 |           0 | 2016-04-01 01:51:06 |
| TABLE00   |       4 |          66 |       2 |          47 |       0 |           0 | 2016-04-01 02:42:32 |
| TABLE00   |       2 |          68 |       2 |          49 |       0 |           0 | 2016-04-01 03:46:31 |
| TABLE00   |       1 |          69 |       1 |          50 |       0 |           0 | 2016-04-01 04:25:24 |累積値
| TABLE00   |       4 |          73 |       4 |          54 |       0 |           0 | 2016-04-01 06:00:01 |
| TABLE00   |       4 |          77 |       2 |          56 |       0 |           0 | 2016-04-01 06:36:07 |
| TABLE00   |       8 |          85 |       2 |          58 |       0 |           0 | 2016-04-01 07:56:18 |
| TABLE00   |       3 |          88 |       1 |          59 |       0 |           0 | 2016-04-01 08:46:48 |↓

OracleSERAC+ASMのRMANバックアップから非ASMのシングル環境へリストア

OracleSERAC+ASMのRMANバックアップから非ASM(ファイルシステム)のシングル環境へリストアしたのでメモ。

環境

  • Oracle11.2.0.4
  • DB_NAME:orcl

前提

  • RMANバックアップは毎日0時にフルバックアップを取得(backupset plus archivelog)
  • delete noprompt obsolete;で削除している。
  • RMANバックアップセットはファイルシステムに出力している。
  • リカバリカタログは使用しない。制御ファイルで管理。

リストア手順

  • 4/11の13:00までの不完全リカバリを行う。

別サーバを用意しOracleのインストールをする

↓を基にインストールまで行う。

kenken0807.hatenablog.com

PSUや個別パッチを適用している場合はRAC環境と同等にしておく。

初期化ファイル作成

vim $ORACLE_HOME/dbs/initorcl.ora

db_name='orcl'
processes = 300
audit_file_dest='/opt/app/oracle/admin/orcl/adump'
audit_trail ='none'
db_block_size=8192
db_domain=''
db_recovery_file_dest='/opt/app/oracle/flash_recovery_area'
db_recovery_file_dest_size=700G
log_archive_dest_1='LOCATION=/opt/app/oracle/archivelog'
diagnostic_dest='/opt/app/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
control_files = '/opt/app/oracle/control01.ctl'
compatible='11.2.0.4.0'
sga_target=5G
pga_aggregate_target=1G

RMANから戻す

使用するもの

  • 4/11 0:00に取得したフルバックアップ
  • 4/11 0:00~4/11 13:00のアーカイブログ(すでにバックアップ済みであればアーカイブログのバックアップセット)

4/11 0:00に取得したバックアップを使用するので、4/11 0:00時点の制御ファイルしかない。
その制御ファイルをリストアすると4/11 0:00~4/11 13:00までのアーカイブ情報を保持していないことになる。
よって、4/11 0:00~4/11 13:00までのアーカイブをカタログ追加し、
RAC環境のlist backupで確認した必要なアーカイブログをリストアしてあげる必要あり。

                 4/13 0:00                                        4/13 13:00
時系列--------------|--------------------------------------------------|--------------------
              フルバックアップ                                     ここに戻す
                   取得
                      ←         この間のアーカイブログが必要         →

どのアーカイブログのバックアップが必要か順序番号を確認する

確認すると2016/04/12に取得したanr2qu6c_1_1このバックアップが必要だということがわかる。

RMAN>list backup;
・
・
BSキー  サイズ       デバイス・タイプ経過時間終了時間
------- ---------- ----------- ------------ -------------------
3407    11.79G     DISK        00:01:06     2016/04/12 00:01:37
        BPキー: 3407   ステータス: AVAILABLE  圧縮: NO  タグ: TAG20160412T060030
        ピース名: /backup/anr2qu6c_1_1

  バックアップ・セット3407のアーカイブ・ログのリスト
  Thrd Seq     Low SCN    Low時間             Next SCN   Next Time
  ---- ------- ---------- ------------------- ---------- ---------
  1    46255   34194183819 2016/04/11 00:00:00 34194503257 2016/04/11 07:23:50
  1    46256   34194503257 2016/04/11 07:23:50 34194522990 2016/04/11 10:24:11
  1    46257   34194522990 2016/04/11 10:24:11 34194542840 2016/04/11 15:24:32
  ・
  ・
  2    17526   34194183858 2016/04/11 00:00:02 34194543930 2016/04/11 07:24:33
  2    17527   34194543930 2016/04/11 07:24:33 34194632204 2016/04/11 12:30:12
  2    17528   34194632204 2016/04/11 12:30:12 34195546508 2016/04/11 13:24:32
  ・
  ・
・
・

RAC環境に出力しているバックアップファイルを同じディレクトリを作成してにコピーし、配置する

mkdir -p /backup
chown -R oracle. /backup
mv (4/11のフルバックアップ) (4/12に取得したアーカイブログ[anr2qu6c_1_1]) /backup

初期化パラメータで指定したアーカイブログの出力先作成

mkdir -p /opt/app/oracle/archivelog

インスタンス起動

startup nomount;

制御ファイルリストア

 RESTORE CONTROLFILE FROM '/backup/c-2096898227-20160411-00';

→4/11 0:00時点の制御ファイル

データベースマウント

 ALTER DATABASE MOUNT;

制御ファイルで認識されていないアーカイブログのバックアップセットをカタログ追加

 CATALOG BACKUPPIECE '/backup/anr2qu6c_1_1';

→4/11 0:00~4/11 13:00までのアーカイブログ

アーカイブログのリストア

run {                                                          
  set archivelog destination to '/opt/app/oracle/archivelog';           
  restore archivelog sequence between 46255 and 46257 thread 1;
  restore archivelog sequence between 17526 and 17528 thread 2;
} 

→4/11 0:00~4/11 13:00までのアーカイブを初期化ファイルのlog_archive_dest_1にリストアする。じゃないとリカバリできないみたい 。

リストア

  • 本番でディスクグループ確認
SELECT FILE# AS "File/Grp#", NAME FROM   V$DATAFILE;
  
         1 +DATA/orcl/datafile/system.264.861799709
         2 +DATA/orcl/datafile/sysaux.260.861799709
         3 +DATA/orcl/datafile/undotbs1.261.861799709
         4 +DATA/orcl/datafile/data.257.861799709
         5 +DATA/orcl/datafile/idx.258.861799709
         6 +DATA/orcl/datafile/undotbs2.262.861799709
         7 +DATA/orcl/datafile/users.265.861799723
         8 +DATA/orcl/datafile/perfstat.259.861799709
run {
  set newname for datafile  1 to '/opt/app/oracle/oradata/system1.dbf'; 
  set newname for datafile  2 to '/opt/app/oracle/oradata/sysaux1.dbf'; 
  set newname for datafile  3 to '/opt/app/oracle/oradata/undotbs1.dbf';
  set newname for datafile  4 to '/opt/app/oracle/oradata/data1.dbf';
  set newname for datafile  5 to '/opt/app/oracle/oradata/idx1.dbf';
  set newname for datafile  6 to '/opt/app/oracle/oradata/undotbs2.dbf';
  set newname for datafile  7 to '/opt/app/oracle/oradata/users1.dbf';
  set newname for datafile  8 to '/opt/app/oracle/oradata/perfstat.dbf';
  restore database;                                                    
  switch datafile all;
}

リカバリ

run {
  SET UNTIL TIME "TO_DATE('2016-04-11 13:00:00','YYYY-MM-DD HH24:MI:SS')";
  RECOVER DATABASE ;                                                
}   

オンラインREDOログをリネームする

  • RAC環境を確認
GROUP# THREAD# MEMBERS MEMBER                                             BYTES  SEQUENCE# STATUS
------ ------- ------- --------------------------------------------- ---------- ---------- ----------
     1       1       2 +DATA/onlinelog/group_1.257.861799869     524288000      46586 ACTIVE
     1       1       2 +DATA/onlinelog/group_1.257.861799869     524288000      46586 ACTIVE
     2       1       2 +DATA/onlinelog/group_2.258.861799869     524288000      46587 CURRENT
     2       1       2 +DATA/onlinelog/group_2.258.861799871     524288000      46587 CURRENT
     3       2       2 +DATA/onlinelog/group_3.259.861799873     524288000      17651 ACTIVE
     3       2       2 +DATA/onlinelog/group_3.259.861799875     524288000      17651 ACTIVE
     4       2       2 +DATA/onlinelog/group_4.260.861799875     524288000      17652 CURRENT
     4       2       2 +DATA/onlinelog/group_4.260.861799875     524288000      17652 CURRENT
  • オンラインREDO用のディレクトリ作成
mkdir -p /opt/app/oracle/redo 
  • リネームする
alter database rename file '+DATA/onlinelog/group_1.257.861799869' to '/opt/app/oracle/redo/redo01.log';    
alter database rename file '+DATA/onlinelog/group_1.257.861799869' to '/opt/app/oracle/redo/redo11.log';  
alter database rename file '+DATA/onlinelog/group_2.258.861799869' to '/opt/app/oracle/redo/redo02.log';  
alter database rename file '+DATA/onlinelog/group_2.258.861799871' to '/opt/app/oracle/redo/redo12.log';  
alter database rename file '+DATA/onlinelog/group_3.259.861799873' to '/opt/app/oracle/redo/redo03.log';  
alter database rename file '+DATA/onlinelog/group_3.259.861799875' to '/opt/app/oracle/redo/redo13.log';  
alter database rename file '+DATA/onlinelog/group_4.260.861799875' to '/opt/app/oracle/redo/redo04.log';  
alter database rename file '+DATA/onlinelog/group_4.260.861799875' to '/opt/app/oracle/redo/redo14.log';     

データベースオープン

ALTER DATABASE OPEN resetlogs;

この時点でデータベースにアクセス可能。。

一時表領域再作成

create temporary tablespace temp1 tempfile '/opt/app/oracle/oradata/temp11.dbf' size 10M;
alter database default temporary tablespace temp1; 
drop tablespace temp;
create temporary tablespace temp tempfile '/opt/app/oracle/oradata/temp02.dbf' size 5000M;
alter database default temporary tablespace temp; 
drop tablespace temp1;

thread2のredolog消す

ALTER DATABASE DISABLE THREAD 2;
alter database drop logfile group 6;
alter database drop logfile group 7;
alter database drop logfile group 8;
alter database drop logfile group 9;
alter database drop logfile group 10;

これで完了。おしまい。

ORACLE RMANで複製データベースの作成

RMANでアクティブなデータベースから同じSIDを持った複製データベースを作成したのでメモ。

複製先サーバ側の設定

  • 複製先サーバでOracleインスタンスが起動できる状態にしておく

    • 同じバージョンORACLEソフトウェアのインストールをしておく
    • 環境変数も設定する
    • データファイルや高速リカバリエリアなどのフォルダ構成を同様にしておく
  • 以下ファイルを複製元から複製先へコピー、配置する。

    • 初期化パラメータ(initSID.ora)
    • パスワードファイル(orapwSID)
    • リスナー構成ファイル(listener.ora)
  • 静的リスナーを設定

$ vim $ORACLE_HOME/network/admin/listener.ora

 LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 複製先サーバIP)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (SID_NAME=orcl)
      (ORACLE_HOME=/opt/app/oracle/product/11.2.0/dbhome_1)
    )
  )
  • リスナー起動
$ lsnrctl start

複製元サーバでの作業

$ sqlplus sys/oraora@複製先IP:1521/orcl as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on 木 4月 7 14:03:52 2016

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

アイドル・インスタンスに接続しました。

sql>startup nomount

RMANからデータベースの複製を行う。

  • RMAN接続
$ rman target /

Recovery Manager: Release 11.2.0.4.0 - Production on 金 4月 8 15:28:01 2016

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

ターゲット・データベース: ORCL (データベースID=3408942822)に接続されました
  • RMANから複製先へ接続
RMAN>  connect auxiliary sys/oraora@複製先IP:1521/orcl 

補助データベース: ORCLに接続されました(マウントされていません)
  • 複製データベース作成する
RMAN>  duplicate target database to orcl
       from active database 
       spfile
       NOFILENAMECHECK;

これで完了。

標準出力からわかるざっくりな流れとして、
1. SPFILEのコピー
2. 制御ファイルのコピー
3. データファイルのリストア
4. アーカイブログを使用したリカバリ
5. resetlogしてデータベースOPEN

  • どの時点のデータまで複製されるのか。
    アクティブなデータベースから作成しているので、どの時点のデータまでが複製されるのか気になった。

複製元データベースで↓実施しながら複製開始。

$ watch -n 1 "echo \"insert into duplicate_test values (1,sysdate);\" | sqlplus orcl/orcl"

複製が完了した時点でのデータ

        ID D
---------- -------------------
         1 2016/04/08 18:33:43
         1 2016/04/08 18:33:44
         1 2016/04/08 18:33:45
         1 2016/04/08 18:33:46
         1 2016/04/08 18:33:47
         1 2016/04/08 18:33:48 ←ここまで反映

duplicateコマンドのログ情報

チャネルORA_DISK_1: データファイルのコピーを開始しています
入力データファイル・ファイル番号=00004 名前=/opt/app/oracle/oradata/orcl/users01.dbf
出力ファイル名=/opt/app/oracle/oradata/orcl/users01.dbf タグ=TAG20160408T181846
チャネルORA_DISK_1: データファイルのコピーが終了しました。経過時間: 00:00:01
backupが完了しました(完了時間: 2016-04-08 18:33:48)    ←リストア完了時刻

SQL文: alter system archive log current    ←ログスイッチ実行

メモリー・スクリプトの内容:
{
   backup as copy reuse
   archivelog like  "/opt/app/oracle/fast_recovery_area/ORCL/archivelog/2016_04_08/o1_mf_1_12114_cjgyknf3_.arc" auxiliary format
 "/opt/app/oracle/fast_recovery_area/ORCL/archivelog/2016_04_08/o1_mf_1_12114_%u_.arc"   archivelog like
 "/opt/app/oracle/fast_recovery_area/ORCL/archivelog/2016_04_08/o1_mf_1_12115_cjgyqwxc_.arc" auxiliary format
 "/opt/app/oracle/fast_recovery_area/ORCL/archivelog/2016_04_08/o1_mf_1_12115_%u_.arc"   ;
   catalog clone recovery area;
   switch clone datafile all;
}
メモリー・スクリプトを実行しています

backupが開始されました(開始時間: 2016-04-08 18:33:49)
・
・
・
Duplicate Dbが完了しました(完了時間: 2016-04-08 18:34:33)    ←Duplicateコマンド完了時刻

というようにデータ登録時刻とリストア完了の時刻はほぼ一緒で、
リストア完了後にログのスイッチが行われている。
そこで生成されたアーカイブログまで適用されているよう。

SQL文: alter system archive log current

複製されたデータベースで一時表領域がエラー

一時表領域のデータファイルを確認しようするとエラーが発生。

SQL> select * from dba_temp_files;
select * from dba_temp_files
*
行1でエラーが発生しました。:
ORA-01187:
ファイルが検査を通過しなかったため、このファイルから読み込むことができません。
ORA-01110: データファイル201: '/opt/app/oracle/oradata/orcl/temp01.dbf'

ステータスはオンライン

SQL> select tablespace_name, status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
TEMP                           ONLINE

ファイルはちゃんと複製されていたので一時表領域から一度dropしてaddしてあげることで直った。

SQL> alter database tempfile '/opt/app/oracle/oradata/orcl/temp01.dbf' drop;

データベースが変更されました。

SQL> alter tablespace TEMP add tempfile '/opt/app/oracle/oradata/orcl/temp01.dbf' REUSE;

表領域が変更されました。

SQL> select * from dba_temp_files;

FILE_NAME
--------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS
---------- ------------------------------ ---------- ---------- -------
RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
------------ --- ---------- ---------- ------------ ---------- -----------
/opt/app/oracle/oradata/orcl/temp01.dbf
         1 TEMP                           3.4359E+10    4194176 ONLINE
           1 NO           0          0            0 3.4358E+10     4194048

データリカバリアドバイザを使用したRMANリカバリ方法(ユーザ表領域)

データリカバリアドバイザを使用してリカバリを行うと楽に復旧可能だったのでメモ。
Oracle RACでは対応してないみたい、シングルインスタンスのみ対応。
環境はOracle database 11.2.0.4 SEone。

以下条件で実施している。
1. 高速リカバリ領域の有効化(バックアップセットとアーカイブログを含む)
2. 自動診断レポジトリ(ADR)の有効化
3. 事前にフルバックアップを取得済み

表領域障害からの完全リカバリ

準備

  • 確認用データの追加
SQL> insert into rmant values (1,sysdate,'first');
SQL> commit;
SQL> alter system switch logfile; 
SQL> alter system checkpoint; 
SQL> insert into rmant values (2,sysdate,'onlineredo');
SQL> commit;
SQL> select * from rmant;

ID INS_TIME            TX
-- ------------------- -----------
 1 2015/06/24 17:36:41 first         ←このデータはアーカイブログ化されている
 2 2015/06/24 17:37:59 onlineredo    ←このデータはデータファイルに書き込まれていない状態
  • 表領域を強制的に壊す
# dd if=/dev/zero of=/opt/app/oracle/oradata/orcl/data/data05.dbf bs=500M count=1
  • Oracleに表領域が壊れたことを気づかせてあげる
 RMAN> VALIDATE DATABASE;

validateが開始されました(開始時間: 2015/06/24 17:38:55)
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=1640 デバイス・タイプ=DISK
RMAN-06169: データファイル9のファイル・ヘッダーを読み込めません。エラー理由: 7
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: validateコマンドが06/24/2015 17:38:56で失敗しました
RMAN-06056: データファイル9にアクセスできませんでした


SQL> alter system checkpoint;
alter system checkpoint
*
行1でエラーが発生しました。:
ORA-03113: 通信チャネルでend-of-fileが検出されました プロセスID:
29124
セッションID: 1136、シリアル番号: 247

データリカバリアドバイザを使用して復旧

  • 障害情報確認(list failure)
RMAN> list failure;

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

障害ID 優先度ステータス    検出時間            サマリー
------ -------- --------- ------------------- -------
314    HIGH     OPEN      2015/06/24 17:46:37 SYSTEM以外のデータファイルが1つ以上破損しています

データファイルが壊れていることが 表示される。

  • 対応方法確認(advise failure)
RMAN> advise failure;

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

障害ID 優先度ステータス    検出時間            サマリー
------ -------- --------- ------------------- -------
314    HIGH     OPEN      2015/06/24 17:46:37 SYSTEM以外のデータファイルが1つ以上破損しています

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

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

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

自動修復オプション
========================
オプション 修復 説明
------ ------------------
1      データファイル9をリストアおよびリカバリします
  計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます
  修復スクリプト: /opt/oracle/diag/rdbms/orcl/ORCL/hm/reco_877293002.hm
  • 自動作成された修復方法の確認(repair failure preview) これは実行してもしなくてもどちらでも良い。
RMAN> repair failure preview;

計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます
修復スクリプト: /opt/oracle/diag/rdbms/ptdb/PTDB/hm/reco_877293002.hm

修復スクリプトの内容:
   # restore and recover datafile
   restore datafile 9;
   recover datafile 9;
   sql 'alter database datafile 9 online';

実行する最善の手段をを作成してくれる。

  • 修復実施(repair failure)
RMAN> repair failure ;

計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます
修復スクリプト: /opt/oracle/diag/rdbms/orcl/ORCL/hm/reco_877293002.hm

修復スクリプトの内容:
   # restore and recover datafile
   restore datafile 9;
   recover datafile 9;
   sql 'alter database datafile 9 online';

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

restoreが開始されました(開始時間: 2015/06/24 17:51:41)
チャネルORA_DISK_1の使用

チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_DISK_1: データファイル00009を/opt/app/oracle/oradata/orcl/data/data05.dbfにリストアしています
チャネルORA_DISK_1: バックアップ・ピース/opt/oracle/fast_recovery_area/ORCL/backupset/2015_06_24/o1_mf_nnndf_TAG20150624T115106_brn6rtp4_.bkpから読取り中です
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:27:05
restoreが完了しました(完了時間: 2015/06/24 18:18:46)

recoverが開始されました(開始時間: 2015/06/24 18:18:46)
チャネルORA_DISK_1の使用

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

recoverが完了しました(完了時間: 2015/06/24 18:18:47)

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

データベースをオープンしますか(YESまたはNOを入力してください)。 YES
データベースがオープンしました。
  • データの確認 完全リカバリされている。
SQL> select * from rmant;

ID INS_TIME            TX
-- ------------------- -----------
 1 2015/06/24 17:36:41 first         
 2 2015/06/24 17:37:59 onlineredo    

以上で完了となる。
1. list failure;
2. advise failure;
3. repair failure;

単純な障害であればたった3つの処理でリカバリ可能となっている。