- PR -

リカバリの高速化

1
投稿者投稿内容
ひで
常連さん
会議室デビュー日: 2005/04/27
投稿数: 41
お住まい・勤務地: 神戸
投稿日時: 2007-11-21 11:22
Oracle9iを使っています。

今、tableを以下の方法でバックアップを取りました。

create table A_BAK as select * from A;

それで、一度テーブルAを空にして、A_BAKのデータを戻そうとしました。

truncate table A;
insert into A select * from A_BAK;

しかし、このinsertがなかなか終わりません。(丸一日ほど)
テーブルAには100万件以上のデータが入っています。
それでだろうと思うのですが、もっと高速にデータを復旧出来る方法はないでしょうか。

アドバイスが御座いましたら宜しくお願い致します。
こあら
大ベテラン
会議室デビュー日: 2007/06/26
投稿数: 157
投稿日時: 2007-11-21 11:40
100万件が200万件でも、丸一日かかるってのはちょっと異常かも。
インデックスとか、トリガーとか、制約とか、見直すべき点はあると思います。

で、本題ですが、バックアップをexpでとって、impでレストアすれば、
insertにかかる多くのコストを削減できます。

あるいは ALTER TABLE A_BAK RENAME TO A とか。

[追記]
RENAMEだとテーブル以外のオブジェクトを復元する必要があります。
[/追記]

[ メッセージ編集済み 編集者: こあら 編集日時 2007-11-21 11:44 ]
ひで
常連さん
会議室デビュー日: 2005/04/27
投稿数: 41
お住まい・勤務地: 神戸
投稿日時: 2007-11-21 12:45
こあら様ご返答ありがとうございます。

名前の違うテーブルに対してexport,importは出来るのでしょうか?
ひで
常連さん
会議室デビュー日: 2005/04/27
投稿数: 41
お住まい・勤務地: 神戸
投稿日時: 2007-11-21 15:26
すみません自己解決しました。
エラーが出ないので確証は持てませんが、どうもロールバックセグメントが足らなかったようで、1000件ずつcommitするプロシージャを組んで実行したら順調にinsert出来ました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)