Oracle10g フラッシュバック アゲインの巻 その8
<Oracle10g フラッシュバック アゲイン の巻 その8 最終回>
ペンネーム:びー・うぃりー
フラッシュバック アゲイン と題しOracle9i~Oracle10gをまたがって、
フラッシュバック関連機能の基本的な動作確認をしてきました。この内容を確
実に理解していれば、後は応用するだけです。実運用業務ではなかなか利用す
る機会がなく試せない事も事実ですが是非TRYしてみてください。
(まずテスト系で・・・!!)
最終回の今週は、ちょっとしたTipsを紹介した後、いままでの内容を「フラッ
シュバック」します。そしてまとめます。
■環境
Microsoft Windows XP Pro
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 – Production
With the Partitioning, OLAP and Data Mining options
■Tips
また下位バージョンの SQL*Plusから上位バージョンのデータベースよりサポ
ートされたコマンドが実行できない場合がある!
10g から追加されている FLASHBACK関連のコマンドを Oracle9i Database の
SQL*Plusから接続し実行した場合は正常なコマンドとして認識されずに実行す
ることができません。(SQL*Plus 自身にも構文チェックの機能があります。)
SQL*Plus: Release 9.2.0.5.0 から Oracle Database 10g Enterprise Edition
Release 10.1.0.2.0 へ接続して10gからの機能を実行してみます。
$ sqlplus /nolog SQL*Plus: Release 9.2.0.5.0 - Production on 金 Mar 4 15:40:36 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> conn oraora/oraora@xxxxx 接続されました。 SQL> select * from V$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Prod PL/SQL Release 10.1.0.2.0 - Production CORE 10.1.0.2.0 Production TNS for 32-bit Windows: Version 10.1.0.2.0 - Production NLSRTL Version 10.1.0.2.0 - Production SQL> select table_name from user_tables; TABLE_NAME ------------------------------ FLASHBACK_TEST 1行が選択されました。 SQL> select * from flashback_test; COL1 COL2 TIME_STMP ---------- ---------- ------------------------------------------------ 1 QWERTY 05-03-04 14:57:08.000000 2 ASDFGH 05-03-04 14:57:16.000000 3 ZXCVBN 05-03-04 14:57:23.000000 4 POIUYT 05-03-04 14:57:30.000000 5 LKJHGF 05-03-04 14:57:38.000000 6 MNBVCX 05-03-04 14:57:47.000000 7 123456 05-03-04 14:57:54.000000 8 098767 05-03-04 14:58:02.000000 9 QPWOEI 05-03-04 14:58:09.000000 10 ALSKDJ 05-03-04 14:58:16.000000 10行が選択されました。 SQL> drop table FLASHBACK_TEST; 表が削除されました。 SQL> select object_name,object_type from user_objects; OBJECT_NAME OBJECT_TYPE ---------------------------------------------------------- -------------- BIN$8XgHoZYI9gngMKjAgwADJg==$0 TABLE 1行が選択されました。
ここから「flashback table」を実行します。
SQL> flashback table FLASHBACK_TEST to before drop; SP2-0734: "flashbac..."で開始するコマンドが不明です - 残りの行は無視さ れました。
「コマンドが不明」のエラーとなりました。
どうしても実行する必要がある場合は回避策としては、動的SQLを使用しSQLコ
マンドに対するSQL*Plus の構文チェックを行わせないこと、となります。
SQL> declare 2 cur integer; 3 ret integer; 4 begin 5 cur := dbms_sql.open_cursor; 6 dbms_sql.parse(cur,'flashback table "BIN$8XgHoZYI9gngMKjAgwADJg==$0" to before drop',dbms_sql.native); 7 ret :=dbms_sql.execute(cur); 8 end; 9 / PL/SQLプロシージャが正常に完了しました。 SQL> select table_name from user_tables; TABLE_NAME ------------------------------ FLASHBACK_TEST 1行が選択されました。 SQL> select * from FLASHBACK_TEST; COL1 COL2 TIME_STMP ---------- ---------- ------------------------------------------------ 1 QWERTY 05-03-04 14:57:08.000000 2 ASDFGH 05-03-04 14:57:16.000000 3 ZXCVBN 05-03-04 14:57:23.000000 4 POIUYT 05-03-04 14:57:30.000000 5 LKJHGF 05-03-04 14:57:38.000000 6 MNBVCX 05-03-04 14:57:47.000000 7 123456 05-03-04 14:57:54.000000 8 098767 05-03-04 14:58:02.000000 9 QPWOEI 05-03-04 14:58:09.000000 10 ALSKDJ 05-03-04 14:58:16.000000 10行が選択されました。
以上の様に、flashback table が可能となりました。
下位バージョンのSQL*Plus から上位バージョンのデータベースにコマンドを
発行する必要がある場合は有効です。
■まとめ
参照系、更新系のフラッシュバックは、非常に使い勝手が良くしかも簡単に使
えるこが理解できたと思います。ただ、フラッシュバックはあくまでもリカバ
リ機能である事を忘れないでください。またリカバリが必要な場合であっても、
それを適用するかどうかは十分な検証が必要です。従来に比べ高速にデータ復
旧する方法のひとつとして認識する事が、大事だと思います。
フラッシュバック機能は、基本的にヒューマンエラー発生時の対処に使われま
す。昨今超多忙なDBA担当者は、夜中の緊急対応で寝ぼけていた・・・、新人
に任せたら・・・、テスト系用スクリプトを本番系で実行してしまった・・・、
などなど、想像しただけで「ブルーな気分になる」日々を送っている方が多い
のでは。
ヒューマンエラーを起こさない工夫も大事です。
(1)運用作業用Oracleユーザーを作成し権限を作業に必要な最低限のものだけを
付与しておく。SELECT検索するだけなのにCONNECT/ AS SYSDBA をする方を
たくさん見かけます。 (きっと指が覚えているのでしょう・・・油断大敵!!)
(2)DBA権限USERのPASSWORDを定期的に変更する。
デフォルト値のままのサイトが非常に多いです。
セキュリティの面でも有効です。
(3)drop/truncate抑止トリガーを作成しておく
これは超便利です。機会があれば別途紹介します。
今週はここまで。
夜風が気持ちいい、茅ヶ崎より