达梦数据库更新统计信息脚本

 数据库中索引以及索引涉及到的列对数据库执行计划的影响比较大,所以建议定期更新。
 当然除此之外可能有一些条件列、或者表行数统计信息也比较重要,如何涉及可以单独处理。

1、创建辅助表,用以记录统计信息更新情况

CREATE TABLE  STAT_EXEC_LOG
(
SQLS VARCHAR(500),
FLAG INT,
GX_TIME DATETIME(6) DEFAULT SYSDATE) ;

2、可以直接执行,也可以放到作业中使用,语句块如下

DECLARE 
V_SQL VARCHAR(4000);
USER_NAME VARCHAR2(200);
BEGIN
USER_NAME :='SYSDBA';--这里写需要更新的用户
 FOR I IN (
SELECT DISTINCT 'STAT 100 ON '||TABLE_OWNER||'.'||TABLE_NAME||'('||COLUMN_NAME||');' SQLS
  FROM ALL_IND_COLUMNS 
 WHERE INDEX_OWNER=USER_NAME 
UNION ALL
SELECT DISTINCT 'STAT 100 ON INDEX '||TABLE_OWNER||'.'||INDEX_NAME||';' SQLS
  FROM ALL_IND_COLUMNS 
 WHERE INDEX_OWNER=USER_NAME )LOOP
   BEGIN
    V_SQL=I.SQLS;
    EXECUTE IMMEDIATE V_SQL;
    V_SQL='INSERT INTO STAT_EXEC_LOG(SQLS,FLAG) VALUES('''||I.SQLS||''',1);';
    EXECUTE IMMEDIATE V_SQL;
    COMMIT;
    EXCEPTION
           WHEN OTHERS THEN
            V_SQL='INSERT INTO STAT_EXEC_LOG(SQLS,FLAG) VALUES('''||I.SQLS||SQLERRM||''',0);';
             EXECUTE IMMEDIATE V_SQL;
             COMMIT;   
         END;  
 END LOOP;
END;
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐