用DBMS_STATS匯入匯出oracle統計資訊

cnaning發表於2012-04-27
今天客戶反映查詢慢,由於是生產環境,不能隨便測試,因此參考下面的blog,把統計資訊匯出到測試伺服器進行sql語句調優
 
1.建立存放統計資訊表
EXECUTE  DBMS_STATS.CREATE_STAT_TABLE ('SCOTT', 'STATTAB','SYSAUX');
 
在 SYSAUX 表空間上建立 STATTAB 用以儲存統計資訊, 所有者是 SCOTT 使用者。
 
2.匯出schema的統計資訊
EXEC dbms_stats.EXPORT_SCHEMA_STATS
(ownname=>'scott',stattab=>'stattab',STATID=>'foo_20120427');
 
這裡建議手動設定一下 STATID. STATID 命名規則建議用 物件名(SCHEMA名)+ 時間(注意粒度).
 
匯出table表的統計資訊
EXEC dbms_stats.export_table_stats
(OWNNAME=>'scott',TABNAME=>'foo',STATTAB=>'stattab',STATID=>'foo_20120427');
 
3.用expdp匯出統計資訊表
expdp system/oracle DIRECTORY=expdimp DUMPFILE=scottexp20110426.dmp SCHEMAS='scott'logfile=scottexp20120427.log EXCLUDE=TABLE:\"IN \(\''stattab'\'\)\"
 
4.把expdp匯出的檔案scottexp20110426.dmp 上傳到測試伺服器,方法很多比如scp
 
5.匯入schema的統計資訊
 
恢復該表的統計資訊(之前要匯出當前的統計資訊):
exec DBMS_STATS.IMPORT_SCHEMA_STATS(ownname=>'scott',stattab=>'stattab',STATID=>'foo_20120427');
 
匯入table表的統計資訊
EXEC dbms_stats.import_table_stats
(OWNNAME=>'scott',TABNAME=>'foo',STATTAB=>'stattab',STATID=>'foo_20120427');
 
ownname可以指定新的
 
6.刪除統計資訊表
 
exec DBMS_STATS.DROP_STAT_TABLE('scott','stattab');
 
 
 
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12457158/viewspace-722344/,如需轉載,請註明出處,否則將追究法律責任。

相關文章