OracleDatabaseの「統計情報」の手動削除方法を紹介します。
OracleDatabaseを運用して上で最も重要な要素の1つです。
この記事でOracleDatabase初心者でも分かりやすく統計情報の削除方法を紹介しています。
統計情報となにか?については以下のページでまとめてますので、
まずは下の参照ください。
OracleDBの統計情報とは?なぜ取得?取得しないことの影響は?
OracleDatabaseの「統計情報」とは何か?なぜ取得するのか? 運用方法とは?について紹介します。 OracleDatabaseを運用して上で最も重要な要素の1つです。 この記事でO...
目次
表統計の削除:DBMS_STATS.DELETE_TABLE_STATS
表統計の削除は「DBMS_STATS.DELETE_TABLE_STATS」で行えます。
BEGIN
DBMS_STATS.DELETE_TABLE_STATS (
OWNNAME => '<スキーマ名>'
,TABNAME => '<表名>'
,PARTNAME => '<パーティション名>'
);
END;
/
以下サンプルになります。
> BEGIN
2 DBMS_STATS.DELETE_TABLE_STATS (
3 OWNNAME => 'TEST001'
4 ,TABNAME => 'TAB001'
5 );
6 END;
7 /
PL/SQLプロシージャが正常に完了しました。
> col OWNER for a10
> col TABLE_NAME for a20
> col LAST_ANALYZED for a30
> select OWNER
2 ,TABLE_NAME
3 ,LAST_ANALYZED
4 from DBA_TABLES
5 where OWNER = 'TEST001';
OWNER TABLE_NAME LAST_ANALYZED
---------- -------------------- ------------------------------
TEST001 TAB001
列統計の削除:DBMS_STATS.DELETE_COLUMN_STATS
列統計の削除は「DBMS_STATS.DELETE_COLUMN_STATS」で行います。
BEGIN
DBMS_STATS.DELETE_COLUMN_STATS (
OWNNAME => '<スキーマ名>'
,TABNAME => '<表名>'
,COLNAME => '<列名>'
,PARTNAME => '<パーティション名>'
);
END;
/
以下サンプルになります。
> BEGIN
2 DBMS_STATS.DELETE_COLUMN_STATS (
3 OWNNAME => 'TEST001'
4 ,TABNAME => 'TAB001'
5 ,COLNAME => 'COL01'
6 );
7 END;
8 /
PL/SQLプロシージャが正常に完了しました。
> col TABLE_NAME for a20
> col COLUMN_NAME for a20
> col LAST_ANALYZED for a20
> select TABLE_NAME
2 ,COLUMN_NAME
3 ,LAST_ANALYZED
4 from DBA_TAB_COLUMNS
5 where TABLE_NAME = 'TAB001';
TABLE_NAME COLUMN_NAME LAST_ANALYZED
-------------------- -------------------- --------------------
TAB001 COL01
TAB001 COL02 2018-07-30 19:27:00
索引統計の削除:DBMS_STATS.DELETE_INDEX_STATS
索引統計の削除は「DBMS_STATS.DELETE_TABLE_STATS」で行います。
BEGIN
DBMS_STATS.DELETE_INDEX_STATS (
OWNNAME => '<スキーマ名>'
,INDNAME => '<索引名>'
,PARTNAME => '<パーティション名>'
);
END;
/
以下サンプルになります。
> BEGIN
2 DBMS_STATS.DELETE_INDEX_STATS (
3 OWNNAME => 'TEST001'
4 ,INDNAME => 'TAB001_IDX'
5 );
6 END;
7 /
PL/SQLプロシージャが正常に完了しました。
> col TABLE_NAME for a20
> col INDEX_NAME for a20
> col LAST_ANALYZED for a20
> select TABLE_NAME
2 ,INDEX_NAME
3 ,LAST_ANALYZED
4 from DBA_INDEXES
5 where INDEX_NAME = 'TAB001_IDX';
TABLE_NAME INDEX_NAME LAST_ANALYZED
-------------------- -------------------- --------------------
TAB001 TAB001_IDX
スキーマ全体の統計情報削除:DBMS_STATS.GATHER_SCHEMA_STATS
スキーマ全体の統計情報び削除は「DBMS_STATS.DELETE_SCHEMA_STATS 」で行えます。
BEGIN
DBMS_STATS.DELETE_SCHEMA_STATS (
OWNNAME => '<スキーマ名>'
);
END;
/
以下サンプルになります。
> BEGIN
2 DBMS_STATS.DELETE_SCHEMA_STATS (
3 OWNNAME => 'TEST001'
4 );
5 END;
6 /
PL/SQLプロシージャが正常に完了しました。
データベース統計の削除方法:DBMS_STATS.GATHER_DATABASE_STATS
データベース全体の統計情報の削除は「DBMS_STATS.DELETE_DATABASE_STATS 」で行えます。
BEGIN
DBMS_STATS.GATHER_DATABASE_STATS;
END;
/
以下サンプルになります。
> BEGIN
2 DBMS_STATS.GATHER_DATABASE_STATS;
3 END;
4 /
PL/SQLプロシージャが正常に完了しました。
システム統計の削除:DBMS_STATS.DELETE_SYSTEM_STATS
システム統計情報の削除は「DBMS_STATS.DELETE_SYSTEM_STATS 」で行えます。
BEGIN
DBMS_STATS.DELETE_SYSTEM_STATS ;
END;
/
以下サンプルになります。
> BEGIN
2 DBMS_STATS.DELETE_SYSTEM_STATS ;
3 END;
4 /
PL/SQLプロシージャが正常に完了しました。
ディクショナリ統計の削除方法:DBMS_STATS.DELETE_DICTIONARY_STATS
ディクショナリ統計の取得は「DBMS_STATS.GATHER_DICTIONARY_STATS」で行えます。
BEGIN
DBMS_STATS.DELETE_FIXED_OBJECTS_STATS ;
END;
/
以下サンプルになります。
> BEGIN
2 DBMS_STATS.DELETE_DICTIONARY_STATS;
3 END;
4 /
PL/SQLプロシージャが正常に完了しました。
固定表統計の取得方法:DBMS_STATS.DELETE_FIXED_OBJECTS_STATS
固定表統計の削除は「DBMS_STATS.DELETE_FIXED_OBJECTS_STATS」で行えます。
BEGIN
DBMS_STATS.GATHER_FIXED_OBJECTS_STATS ;
END;
/
以下サンプルになります。
> BEGIN
2 DBMS_STATS.DELETE_FIXED_OBJECTS_STATS ;
3 END;
4 /
PL/SQLプロシージャが正常に完了しました。
参考マニュアル
「DBMS_STATS」は指定できるオプション数が多いので本記事は重要な部分のみ記載しました。
必要に応じてマニュアルを確認して最適な設定を行いましょう。