- - PR -
大量データについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-08-03 09:55
どうも初めましてもんが〜です。
お時間のある時にでもご助言頂けると嬉しいです。 【状況】 ・テーブルA ( 997万件 )に対し、項目を追加したい ・普通にAlter Tableすると、UNDO領域不足で落ちる ・UNDO領域は拡張不可(サーバが一杯なので) 【やってみた&みてること】 ・テーブルAのバックアップテーブル(bk_テーブルA)を作る ・テーブルAをTruncate ・テーブルAをAlter ----- で、bk_テーブルAからテーブルAにデータを戻したいん ですけれども。。。。 ----- ・Insert into SELECT では落ちる(UNDO領域不足) (条件を絞り込んでやろうにも、回数に多くなり過ぎて埒が明かない) ・Export ⇒ dmpファイル ⇒ Import では、テーブル定義が 不一致なのでエラーになる ----- ということで、しょうがないので一旦CSVファイルに吐き出して SQL*Loaderで取り込もうと思ってるのですが。。。 試算だとCSVファイルが1.9Gくらいになりそうな勢いなんですよね。 (そして、作成にも数時間かかってるという。。。) これでホントにLoadできるのか? とか もっと良い案があるのでは? とか 色々迷ってます。 どうか助けてください! |
|
投稿日時: 2005-08-03 13:22
データベースはOracleですよね。
OracleではDML文(INSERT、UPDATE、DELETE)発行時にトランザクションを無効にする設定はないので・・・ Insert into SELECT を(プログラム等組んで)分割して発行するくらいしか思いうかびませんが。 |
|
投稿日時: 2005-08-03 13:48
・bk_テーブルAを作成
・テーブルAにカラム追加を行った状態のテーブルA´をNOLOGGING指定で作成 ・INSERT INTO SELECT〜でbk_テーブルAからテーブルA´へデータ移行 ・テーブルAをTRUNCATE&ALTER ・テーブルA´をEXPしてテーブルAにIMP 全くの思いつきですが。 |
|
投稿日時: 2005-08-03 15:50
Desmosediciさん
い〜たさん 返信どうもありがとうございます。 いろいろ試したのですが、やっぱりダメでした。 ですが、何とか解決することができました。 解決方法を参考のため下記の通り報告します。 SQL文一発でなく、PL/SQLでバルクフェッチ&バルクインサートすると ばっさりインサートできるうえに、一定件数ごとにコミットできて UNDO表領域の呪縛から解かれました。 本当にどうもありがとうございましたm(__)m |
1