--写一个对表批量 truncate 的语句,执行后复制出来,批量执行即可 如下清空表
DECLARE
CURSOR CUR_TRUNC IS
SELECT TABLE_NAME FROM USER_TABLES;
BEGIN
FOR CUR_DEL IN CUR_TRUNC LOOP
EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || CUR_DEL.TABLE_NAME;
END LOOP;
END;
--先批量分析表
DECLARE CURSOR CUR_ANALYZE
IS SELECT TABLE_NAME FROM USER_TAB_COMMENTS;
BEGIN
FOR ANALYZE_1 IN CUR_ANALYZE LOOP
EXECUTE IMMEDIATE 'ANALYZE TABLE '||ANALYZE_1.TABLE_NAME||' COMPUTE STATISTICS';
END LOOP;
END;
CALL dbms_stats.create_stat_table(ownname=>'SCOTT',stattab=>'STAT_TABLE'); --创建备份的统计信息表
CALL dbms_stats.gather_table_stats(ownname=>'SCOTT',tabname=>'EMP'); --收集一个表的统计信息
CALL dbms_stats.export_table_stats(ownname=>'SCOTT',tabname=>'EMP',stattab=>'STAT_TABLE'); --导出统计信息
CALL dbms_stats.delete_table_stats(ownname=>'SCOTT',tabname=>'EMP'); --删除统计信息
CALL dbms_stats.import_table_stats(ownname => 'SCOTT',tabname => 'EMP',stattab => 'STAT_TABLE'); --导入备份的统计信息
CALL dbms_stats.delete_table_stats(ownname=>'SCOTT',tabname=>'EMP'); --删除统计信息
CALL dbms_stats.gather_schema_stats(ownname=>'SCOTT'); --收集一个用户下的统计信息
select 'CALL DBMS_STATS.gather_table_stats('''||owner||''','''||table_name||''');' from all_all_tables a where a.owner ='TEMPUSER'