- ベストアンサー
あるデータベースの表を全部消すDOSコマンド
まったく同じテーブル構造のデータベースを2つ用意してまして、 A:WEB画面表示用 B:更新用 とし、更新作業はBに対して行い、更新が一通りすんでから、Bの内容をAにコピーする、というやり方をしています。 そのコピーをするとき、 1.Bをエクスポートする 2.Aの表をすべて消す 3.BをAにインポートする というやり方をとっており、1と3はDOSのコマンドラインで行うことができるんですが、2はDOSコマンドでできないものでしょうか? この1~3の作業をまとめて行えるバッチファイルを作りたいのです。 それが無理なら、ほかにたとえばJSPなどの言語で1~3をまとめてWEB上でボタンをクリックすれば一気にやってくれるものを作ろうと思っております。 やり方をご存知の方がいましたら教えていただけないでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
答えは既にでているので纏めますと・・ DOSコマンドで、とあるので#3の > sqlplus -L user/pass @deleteA.sql 事前に deleteA.sql などのSQLを書いたファイルを用意する。 > A:WEB画面表示用 > B:更新用 > 更新作業はBに対して行い、更新が一通りすんでから、Bの内容をAにコピーする、というやり方をしています。 #1さんの truncate table tableA; insert into tableA select * from tableB; テーブルを削除するのには、 truncate, drop, delete がありますが truncate が早く処理できたと思います。 delete は行数が増えると処理時間が掛かるはすですが 行数が少ないと どのコマンドを使っても大差はなかった記憶があります( 少なくとも万単位の行数 )。
その他の回答 (4)
- nakanaka1q
- ベストアンサー率0% (0/3)
全件削除するのであれば、truncateを使用して下さい。 deleteだとエクステントを開放しないため、HWMが下がりません。 また、データの件数が多ければインデックスにも注意が必要ですね。 1.drop index 2.truncate table A 3.insert into A select * from B 4.create index 5.dbms_stats.gather_table_stats(A) とこんな感じになるのでは。 構文は適度にはしょってますので、マニュアルを参照してください。 以上。
- ham_kamo
- ベストアンサー率55% (659/1197)
Aの表を全て消すSQLを書いたファイル(仮にdeleteA.sqlとします)を作っておいて、 sqlplus -L user/pass @deleteA.sql とすればよいのではないでしょうか。
- ryuujiok2205
- ベストアンサー率21% (233/1098)
一般的には限りなく「空」に近いものを作っておき、それで上書きするのがもっとも効率的です。 # まあ常識ですよね。(^^;;
- X-trail_00
- ベストアンサー率30% (438/1430)
truncate table tableA; insert into tableA select * from tableB; 上記2文をwebでoo4o経由で実行するだけでいいと思いますが? わざわざエクスポートする意味は何かあるのでしょうか?
お礼
5回答にまとめてお礼を言わせていただきます。 AとBはテーブルではなく、同じE-R図というか、テーブル構成をもったデータベースですので、insert into A select * from Bというのは使えなかったと思います。 つまり、AとBは複数のテーブルをもったデータベースなわけで、すべてのテーブルをまとめてBからAにうつすということなのです。 ですので、2のかわりにsqlplusで消すというのをバッチファイルの中に入れればよさそうです。ありがとうございました。