[Oracle]オラクルのメンテナンス

Oracleのデータベースアクセスの速度低下でできる事

ログの削除
Traceログ等が溜まっていたら、そこにアクセスするために時間がかかります。
何年も手を入れていない物はAlertやTraceログが大量にたまり、ディスク
を使用しているだけではなく、Oracleでのアクセスも遅くなります。
カレントの物も削除するときは、lsnrctlで止めないとエラーが出ますが、
カレント以外はそのままエクスプローラから削除可能です。

データファイルの断片化
Oracleのデータベースファイルは拡張していく設定にしておくと、32GBくらいまで拡張されます。
その際に、データファイルが断片化してしまうと、データベース自体のアクセスが落ちます。
いったん、データベースをshutdownしたあと、OSコマンド等のデフラグをしましょう。

テーブルデータの断片化
下記コマンドでテーブルデータの断片化が解消できる。
行の移動を許可し、スペースを詰めなおし、移動の許可を外すSQLの組み合わせです。

ALTER TABLE テーブル名 ENABLE ROW MOVEMENT;
ALTER TABLE テーブル名 SHRINK SPACE CASCADE;
ALTER TABLE テーブル名 DISABLE ROW MOVEMENT;

インデックスの断片化
アクセスを高速化させるためにIndexがあると思います。
使用パターンのキー情報を登録しておきますが、たまにインデックスが断片化してアクセスが落ちる事があります。

ALTER INDEX [インデックス名] REBUILD;

のコマンドでインデックスを最適化してください。

データベースを削除しても、使用率が下がらない
データベースのデータを削除しても、データベースはHWM(ハイウォーターマーク)が記録され、使用率は
そこから下がりません。これは、過去にこれくらいデータが入ったのだから削除してもまたデータが
入ってくるだろう、という物です。
データベース管理ソフト等で使用率が高く、下げたい場合は[3.項]のコマンドを使います。

[テーブルデータの断片化]を実行したけど、使用率が変わらない

exp / expdpを使用してバックアップを取得した後、パージします。

PURGE RECYCLEBIN;
PURGE TABLE テーブル名

それでも使用率が変わらない場合はセグメントレベルの断片化が起きているのだと思います。
Truncateで切り捨てましょう。

TRUNCATE TABLE テーブル名

Oracle10gくらいのはBlobフィールドがあると解放に苦労しました。
切り捨てを行うと大きく使用率が下がると思います。

Truncateをするとデータは消えますのでご注意ください。