表分析

xypincle發表於2017-02-20

  1. --下面的語句既可以用於上線前的髒資料分析:上線之前將產生的垃圾資料刪除,然後執行下面的語句,收集完後再檢視 dba_tables 中 NUM_ROWS 欄位中
  2. --是否有大於0的表,根據這個欄位來分析是否還有髒資料沒有清除乾淨
  3. --也能用於上線後的資料分析

  4. SELECT 'exec dbms_stats.gather_table_stats('||''''||a.owner||''''||','||''''||a.table_name||''''||') ;' FROM dba_tables a WHERE a.owner='ZLHIS' ;

    1. SELECT 'exec dbms_stats.gather_table_stats('||''''||a.owner||''''||','||''''||a.table_name||''''||','||'cascade=>true'||') ;'
    2. FROM dba_tables a WHERE a.owner='ZLHIS' ;
  5. SELECT 'exec dbms_stats.gather_table_stats('||''''||a.owner||''''||','||''''||a.table_name||''''||') ;' FROM dba_tables a WHERE a.owner='ZLTOOLS' ;

    1. SELECT 'exec dbms_stats.gather_table_stats('||''''||a.owner||''''||','||''''||a.table_name||''''||','||'cascade=>true'||') ;'
    2. FROM dba_tables a WHERE a.owner='ZLTOOLS' ;


  6. SELECT 'exec dbms_stats.gather_index_stats('||''''||a.owner||''''||','||''''||a.index_name||''''||') ;' FROM dba_indexes a WHERE a.owner='ZLHIS' ;

  7. SELECT 'exec dbms_stats.gather_index_stats('||''''||a.owner||''''||','||''''||a.index_name||''''||') ;' FROM dba_indexes a WHERE a.owner='ZLTOOLS' ;

  8. --也可按照以下的語句直接進行分析
  9. SELECT 'ANALYZE TABLE '||A.owner||'.'||A.table_name||' COMPUTE STATISTICS ;' FROM DBA_tables a WHERE a.owner IN ('ZLHIS','ZLTOOLS') ;
  10. SELECT 'ANALYZE INDEX '||A.owner||'.'||A.INDEX_NAME||' COMPUTE STATISTICS ;' FROM DBA_INDEXES a WHERE a.owner IN ('ZLHIS','ZLTOOLS') ;
  11. --刪除統計分析的資料
  12. ANALYZE TABLE TableName DELETE STATISTICS ;
  13. ANALYZE INDEX IndexName DELETE STATISTICS ;

  14. --查詢表是否分析過
  15. SELECT A.LAST_ANALYZED, A.TABLE_NAME, A.NUM_ROWS, A.SAMPLE_SIZE
  16.   FROM DBA_TABLES A
  17.  WHERE OWNER IN ('ZLHIS','ZLTOOLS')
  18.  ORDER BY A.LAST_ANALYZED DESC ;

  19. --檢視自動收集統計資訊的任務
  20. --查詢的列值auto optimizer stats collection為enabled即代表自動收集任務
  21. SELECT CLIENT_NAME, STATUS FROM DBA_AUTOTASK_CLIENT ;
  22.  
  23. ----以下為收集表資訊、索引資訊等的語法
  24. –收集資料庫資訊
  25.  EXEC DBMS_STATS.gather_database_stats;
  26.  EXEC DBMS_STATS.gather_database_stats(estimate_percent => 15);

  27. –收集schema資訊
  28.  EXEC DBMS_STATS.gather_schema_stats(‘SCOTT’);
  29.  EXEC DBMS_STATS.gather_schema_stats(‘SCOTT’, estimate_percent => 15);

  30. –收集表資訊
  31.  EXEC DBMS_STATS.gather_table_stats(‘SCOTT’, ‘EMPLOYEES’);
  32.  EXEC DBMS_STATS.gather_table_stats(‘SCOTT’, ‘EMPLOYEES’, estimate_percent => 15);

  33. –收集index資訊
  34.  EXEC DBMS_STATS.gather_index_stats(‘SCOTT’, ‘EMPLOYEES_PK’);
  35.  EXEC DBMS_STATS.gather_index_stats(‘SCOTT’, ‘EMPLOYEES_PK’, estimate_percent => 15);

  36. –刪除收集資訊
  37.  EXEC DBMS_STATS.delete_database_stats;
  38.  EXEC DBMS_STATS.delete_schema_stats(‘SCOTT’);
  39.  EXEC DBMS_STATS.delete_table_stats(‘SCOTT’, ‘EMPLOYEES’);
  40.  EXEC DBMS_STATS.delete_index_stats(‘SCOTT’, ‘EMPLOYEES_PK’);

  41. –建立備份收集資訊表
  42.  begin
  43.  dbms_stats.create_stat_table(USER,stattab => ‘STAT_TABLE’);
  44.  end;

  45. –備份收集資訊
  46.  BEGIN
  47.  dbms_stats.export_table_stats(USER,tabname => ‘FEI_T’,stattab => ‘STAT_TABLE’);
  48.  END;

  49. –刪除收集資訊
  50.  BEGIN
  51.  DBMS_STATS.delete_table_stats(USER,tabname => ‘FEI_T’);
  52.  END;

  53. –匯入收集資訊
  54.  BEGIN
  55.  dbms_stats.IMPORT_TABLE_STATS(USER,’FEI_T’,stattab => ‘STAT_TABLE’);
  56.  END;

  57. –說明:
  58.  當前使用者可以使用user代替使用者名稱
  59.  分析表相關物件資訊cascade => true
  60.  
  61. --啟用自動收集統計資訊的任務
  62. BEGIN
  63.     DBMS_AUTO_TASK_ADMIN.ENABLE(
  64.       client_name => 'auto optimizer stats collection',
  65.       operation => NULL,
  66.      window_name => NULL);
  67.  END;

  68. --禁用自動收集統計資訊的任務
  69. BEGIN
  70.     DBMS_AUTO_TASK_ADMIN.DISABLE(
  71.       client_name => 'auto optimizer stats collection',
  72.       operation => NULL,
  73.      window_name => NULL);
  74.  END

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

相關文章