統計信息備份

下面例子中,都是使用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> 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章