• ベストアンサー

データ削除の方法

オラクルのデータベース容量を減らす為に、SQL PLUSにてDELETE文を実行(テーブル別に)しました (テーブルの中身、全件削除ではなく条件に一致した不要なデータのみ削除) 条件に該当するデータは消えましたが、オラクルデータベース自体の容量が逆に増えていました 正しいデータの削除方法を教えて頂きたいのですが。宜しくお願いいたします データベース:ORACLE 9I DATABASE

質問者が選んだベストアンサー

  • ベストアンサー
  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.3

やはりディスクの空きを増やすのが目的でしたか。 一般的に再編成と呼ばれる作業となります。 まあ、だいたい、以下のような作業が必要となります。 ・dba_data_filesを参照し現状のデータファイルのサイズを確認。 ・dba_free_spaceを参照し現状の空き状況をを確認。 ・再編成対象の表領域に存在するオブジェクトを確認する。 パターン1(resize) 表領域の空きがある場合はデータファイルのサイズを変えてるだけでOK。 ・表領域のサイズを変更。 alter database datafile 'データファイル(フルパス)' resize サイズ; パターン2(再作成) ・表領域単位でテーブルをExportする。 ・対象の表領域のテーブルを削除する。 ・対象の表領域を削除する。 ・対象の表領域を再作成する。※サイズを小さくする。 ・対象の表領域にテーブルをImportする。 パターン3(move and rebuild) ・ワーク用の表領域を作成する。 ・再編成を行う表領域に存在するテーブル・索引をワーク用の表領域に移す。  表:alter table テーブル名 move tablespace ワーク表領域名;  索引:alter index 索引名1 rebuild tablespace ワーク表領域名; ・表領域のサイズを変更。 alter database datafile 'データファイル(フルパス)' resize サイズ; ・元の表領域にテーブル・索引を戻す。  表:alter table テーブル名 move tablespace 元の表領域名;  索引:alter index 索引名1 rebuild tablespace 元の表領域名; ・ワーク用の表領域を削除する。  ※表領域削除後、データファイルも削除する。 ・テンポラリーの再編成 9iだからテンプの情報はdba_temp_filesだと思います。 ・新規にテンプ領域を作成する。 ・ユーザーに割り当てられているテンプを変更する。 alter user scott temporary tablespace 新テンプ; ・旧テンプをdropする。  ※表領域削除後、データファイルも削除する。 それなりに詳しくないとできない作業なので、検証環境などで 試したから作業を行うことをお勧めします。

pencil123
質問者

お礼

ご丁寧な説明大変ありがとうございます。 アドバイスいただいた内容を調べてやってみます。 また、何かありましたらご質問いたします。m(_ _)m

その他の回答 (3)

  • lond_nag
  • ベストアンサー率57% (4/7)
回答No.4

再編成については詳細な回答がありましたがもう一つ、コアダンプやトレースファイル、アラートファイルといった 「放って置くと溜まる一方」で不要なファイルのクリーニング(削除)もそれなりに効果が見込めるかもしれません。 もし意識されていないのであれば、一度確認することをオススメします。

pencil123
質問者

お礼

ご回答どうもありがとうございます。 ファイルのクリーニングも調べてやってみます。 また、何かありましたら宜しくお願いします。m(_ _)m

  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.2

データベース容量とは何を想定して書いているのでしょうか? ・表領域に割り当てられたデータファイルのサイズ ・表領域内の割り当て済みデータブロック ・表の割り当て済みデータブロック テーブルにDelete文を発行しても表のサイズは変わりません。 表に割り当てられたエクステント内のデータブロックが開放されるだけです。表のサイズが変わらなければ表領域もデータファイルも変わりません。 具体的に何をしたいのかがわからないと対応は異なります。 以下のうちのなにをしたいのでしょうか? ・表領域内の空きを増やしたい。 ・表内の空きを増やしたい。 ・OS上のディスクの空きを増やしたい。 ※文脈からするとディスクの空きを増やしたいのかなーと予測してます。おそらくDelete文の負荷が高くて、TEMP表領域(のデータファイル)が拡張してディスクが圧迫されたのかと予測してます。

pencil123
質問者

補足

ご回答有難うございます。ご推察の通りです。 os上のディスクの空きを増やしたいです。 DELEAT文の負荷が高いとTEMP表領域データファイルが拡張すると言うことでしょうか?それを解決してディスクの空きを増やすにはどうすればいでしょうか?

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

DELETE文のあとにCOMMIT文を実行しましたか。 それなら何の問題もありません。

pencil123
質問者

お礼

COMMIT文は実行しましたが、ORACLE DB 自体の空き容量が増えないんです。(><)

関連するQ&A