Oracle Database Connect 2016(JPOUG) でDRCPについてLTしました
JPOUGで2回目のLTしました。
さすがに1回目より緊張しないかなーと思たけど、
500人以上の会場の規模にさすがにビビった。。。
Oracle常駐接続プーリングについて話させていただきました。
スライドの最後にも書いてますが、
12cからの新機能である専用サーバプロセスのマルチスレッド化が気になるので
これをDRCPと通常の専用サーバ接続とで比較したい。
最後にLTでの答えられなかった質問
質問:エチオピアの首都はどこですか?
回答:エチオピアの首都はアディスアベバ!!
↑の流れ
@yoku0825 LTにて、
— kentarokitagawa (@keny_lala) 2016年5月13日
得意技は?
世界の国の首都どこで答えられますっ!(キリッ
じゃー、エチオピアは?
わかりません。。。って流れですww
ORACLEでテーブルごとのDML回数を取得する
テーブルごとの1時間あたりのDML(INSERT,UPDATE,DELETE)の平均を取得するために考えた方法。
確認手段としてDBA_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のインストールをする
↓を基にインストールまで行う。
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を持った複製データベースを作成したのでメモ。
複製先サーバ側の設定
以下ファイルを複製元から複製先へコピー、配置する。
- 初期化パラメータ(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つの処理でリカバリ可能となっている。