下面例子中,都是使用SEC用戶作爲測試用戶
例子中函數只使用常用參數,部分參數未使用,可以查看oracle 在線幫助手冊
位置:
步驟一:創建儲統備份計信息的表
SQL> conn sec/sec Connected. SQL> SQL> exec dbms_stats.create_stat_table(ownname => 'sec',stattab => 'stat_backup_table') ; PL/SQL procedure successfully completed. SQL> select * from stat_backup_table; no rows selected
SQL> |
這個時候只是在SEC用戶下創建一個沒有記錄的表stat_backup_table。
步驟二:保存統計信息
SQL> exec dbms_stats.export_schema_stats(ownname => 'sec',stattab => 'stat_backup_table') ; PL/SQL procedure successfully completed. SQL> SQL> select count(*) from stat_backup_table; COUNT(*) ---------- 18 SQL> |
這個時候,就會把SEC下面所有統計信息備份到表stat_backup_table。
步驟三:查看原來的表和索引的統計信息
列的統計信息 SQL> select t.table_name,t.column_name,t.last_analyzed from dba_tab_col_statistics t 2 where t.owner='SEC' AND t.table_name in ('COLOCATED','DISORGANIZED','TESTT');
TABLE_NAME COLUMN_NAME LAST_ANAL ------------------------------ ------------------------------ --------- TESTT FLAG 30-DEC-13 TESTT ID 30-DEC-13 DISORGANIZED Y 23-DEC-13 DISORGANIZED X 23-DEC-13 COLOCATED Y 23-DEC-13 COLOCATED X 23-DEC-13
6 rows selected. |
索引的統計信息 SQL> set linesize 300 SQL> select t.index_name,table_owner,table_name,last_analyzed 2 from dba_indexes t where t.OWNER='SEC' 3 and t.table_name in ('COLOCATED','DISORGANIZED','TESTT');
INDEX_NAME TABLE_OWNER TABLE_NAME LAST_ANAL ------------------------------ ------------------------------ ------------------------------ --------- COLOCATED_PK SEC COLOCATED 23-DEC-13 DISORGANIZED_PK SEC DISORGANIZED 23-DEC-13 INX_TESTT SEC TESTT 30-DEC-13 SQL> |
表的統計信息 SQL> SQL> select t.TABLE_NAME, t.LAST_ANALYZED 2 from dba_tables t where t.OWNER = 'SEC' 3 and t.table_name in ('COLOCATED', 'DISORGANIZED', 'TESTT');
TABLE_NAME LAST_ANAL ------------------------------ --------- TESTT 30-DEC-13 DISORGANIZED 23-DEC-13 COLOCATED 23-DEC-13 SQL>
|
上面3個結果主要看LAST_ANAL這列,在下面步驟要重新生成統計信息,這樣LAST_ANAL的時候會有有變化
步驟四:重新生成統計信息,查看LAST_ANAL的變化
SQL> exec dbms_stats.gather_table_stats(ownname => 'SEC',tabname => 'COLOCATED',estimate_percent => 10,method_opt=> 'for all columns') ;
PL/SQL procedure successfully completed. SQL> SQL> exec dbms_stats.gather_table_stats(ownname => 'SEC',tabname => 'DISORGANIZED',estimate_percent => 10, method_opt=> 'for all columns') ;
PL/SQL procedure successfully completed. SQL> SQL> exec dbms_stats.gather_table_stats(ownname => 'SEC',tabname => 'TESTT',estimate_percent => 10,method_opt=> 'for all columns') ;
PL/SQL procedure successfully completed.
SQL> SQL> |
重新收集3個表的統計信息,查詢相關統計信息視圖
列的統計信息 SQL> select t.table_name,t.column_name,t.last_analyzed from dba_tab_col_statistics t 2 where t.owner='SEC' AND t.table_name in ('COLOCATED','DISORGANIZED','TESTT');
TABLE_NAME COLUMN_NAME LAST_ANAL ------------------------------ ------------------------------ --------- TESTT FLAG 17-DEC-14 TESTT ID 17-DEC-14 DISORGANIZED Y 17-DEC-14 DISORGANIZED X 17-DEC-14 COLOCATED Y 17-DEC-14 COLOCATED X 17-DEC-14
6 rows selected.
SQL> |
索引的統計信息 SQL> select t.index_name,table_owner,table_name,last_analyzed 2 from dba_indexes t where t.OWNER='SEC' 3 and t.table_name in ('COLOCATED','DISORGANIZED','TESTT');
INDEX_NAME TABLE_OWNER TABLE_NAME LAST_ANAL ------------------------------ ------------------------------ ------------------------------ --------- COLOCATED_PK SEC COLOCATED 17-DEC-14 DISORGANIZED_PK SEC DISORGANIZED 17-DEC-14 INX_TESTT SEC TESTT 17-DEC-14
SQL> |
表的統計信息
SQL> SQL> select t.TABLE_NAME, t.LAST_ANALYZED 2 from dba_tables t where t.OWNER = 'SEC' 3 and t.table_name in ('COLOCATED', 'DISORGANIZED', 'TESTT');
TABLE_NAME LAST_ANAL ------------------------------ --------- TESTT 17-DEC-14 DISORGANIZED 17-DEC-14 COLOCATED 17-DEC-14
SQL> |
可以看到相關統計信息的LAST_ANAL字段時間已經變化
步驟五:還原備份的統計信息
導入單個索引的信息 SQL> exec dbms_stats.import_index_stats(ownname => 'SEC',indname => 'COLOCATED_PK',stattab => 'stat_backup_table') ;
PL/SQL procedure successfully completed.
SQL> SQL> select t.index_name,table_owner,table_name,last_analyzed 2 from dba_indexes t where t.OWNER='SEC' 3 and t.table_name in ('COLOCATED','DISORGANIZED','TESTT');
INDEX_NAME TABLE_OWNER TABLE_NAME LAST_ANAL ------------------------------ ------------------------------ ------------------------------ --------- COLOCATED_PK SEC COLOCATED 23-DEC-13 DISORGANIZED_PK SEC DISORGANIZED 17-DEC-14 INX_TESTT SEC TESTT 17-DEC-14
SQL>
|
導入單個表的信息
SQL> SQL> exec dbms_stats.import_table_stats(ownname => 'SEC',tabname => 'COLOCATED',stattab => 'stat_backup_table') ;
PL/SQL procedure successfully completed.
SQL> SQL> select t.TABLE_NAME, t.LAST_ANALYZED 2 from dba_tables t where t.OWNER = 'SEC' 3 and t.table_name in ('COLOCATED', 'DISORGANIZED', 'TESTT');
TABLE_NAME LAST_ANAL ------------------------------ --------- TESTT 17-DEC-14 DISORGANIZED 17-DEC-14 COLOCATED 23-DEC-13 SQL>
SQL> select t.table_name,t.column_name,t.last_analyzed from dba_tab_col_statistics t 2 where t.owner='SEC' AND t.table_name in ('COLOCATED','DISORGANIZED','TESTT');
TABLE_NAME COLUMN_NAME LAST_ANAL ------------------------------ ------------------------------ --------- TESTT FLAG 17-DEC-14 TESTT ID 17-DEC-14 DISORGANIZED Y 17-DEC-14 DISORGANIZED X 17-DEC-14 COLOCATED Y 23-DEC-13 COLOCATED X 23-DEC-13
6 rows selected.
|
如果一個一個的表比較麻煩,可以導入剛纔所有的備份信息
SQL> exec dbms_stats.import_schema_stats(ownname => 'SEC',stattab => 'stat_backup_table');
PL/SQL procedure successfully completed.
SQL> select t.table_name,t.column_name,t.last_analyzed from dba_tab_col_statistics t 2 where t.owner='SEC' AND t.table_name in ('COLOCATED','DISORGANIZED','TESTT');
TABLE_NAME COLUMN_NAME LAST_ANAL ------------------------------ ------------------------------ --------- TESTT FLAG 30-DEC-13 TESTT ID 30-DEC-13 DISORGANIZED Y 23-DEC-13 DISORGANIZED X 23-DEC-13 COLOCATED Y 23-DEC-13 COLOCATED X 23-DEC-13
6 rows selected.
SQL> SQL> select t.TABLE_NAME, t.LAST_ANALYZED 2 from dba_tables t where t.OWNER = 'SEC' 3 and t.table_name in ('COLOCATED', 'DISORGANIZED', 'TESTT');
TABLE_NAME LAST_ANAL ------------------------------ --------- TESTT 30-DEC-13 DISORGANIZED 23-DEC-13 COLOCATED 23-DEC-13
SQL> SQL> select t.index_name,table_owner,table_name,last_analyzed 2 from dba_indexes t where t.OWNER='SEC' 3 and t.table_name in ('COLOCATED','DISORGANIZED','TESTT');
INDEX_NAME TABLE_OWNER TABLE_NAME LAST_ANAL ------------------------------ ------------------------------ ------------------------------ --------- COLOCATED_PK SEC COLOCATED 23-DEC-13 DISORGANIZED_PK SEC DISORGANIZED 23-DEC-13 INX_TESTT SEC TESTT 30-DEC-13
SQL> |