반응형
Oracle이 모든 테이블의 통계를 수동으로 업데이트
소유자와 상관없이 모든 테이블에 대한 모든 통계를 업데이트할 수 있는 방법이 있습니까?
이 스니플렛을 찾았지만, 이것이 모든 테이블을 잡을 수 있을지 확신할 수 없습니다.
BEGIN
FOR A IN ( SELECT owner FROM SYS.all_tables ) LOOP
execute immediate
EXEC dbms_stats.gather_schema_stats( 'A.owner', cascade='TRUE');
END LOOP;
END;
DBMS_STATS.GATER_DATABASE_STATS 사용:
begin
dbms_stats.gather_database_stats;
end;
/
한 번에 하나의 스키마만 수행할 수 있는 패키지는 없습니다.
아래 스크립트를 사용하여 모든 스키마의 모든 개체 유형에 대한 통계를 수집할 수 있습니다.나열한 항목에는 몇 가지 문제가 있습니다('A.owner'는 문자열이지만 개체여야 함 등).
에서 건너뛸 스키마를 추가할 수 있습니다.IN
기본 제공 스키마에 대해 이 작업을 수행하지 않으려는 경우 목록을 표시합니다(어쨌든 대부분 정적이므로 낭비가 될 수 있습니다).또한 통계를 수집하는 각 스키마에 대해 적절한 권한이 있어야 합니다(또는 DBA로 로그인해야 함).
모든 개체에 대한 통계 수집(아마도 실제로 원하는 것):
BEGIN
FOR rec IN (SELECT *
FROM all_users
WHERE username NOT IN ('SYS','SYSDBA'))
LOOP
dbms_stats.gather_schema_stats(rec.username);
END LOOP;
END;
테이블에서만 통계 수집:
BEGIN
FOR rec IN (SELECT *
FROM all_tables
WHERE owner NOT IN ('SYS','SYSDBA'))
LOOP
dbms_stats.gather_table_stats(rec.owner, rec.table_name);
END LOOP;
END;
나는 잠긴 통계와 IOT 테이블을 예외를 통과하는 것처럼 건너뛸 수 있도록 @sehrop 절차를 수정했습니다.
BEGIN
FOR rec IN (SELECT a.owner, a.table_name
FROM all_tables a, dba_tab_statistics s
WHERE a.owner NOT IN ('SYS','SYSDBA')
AND
(a.iot_type IS NULL
OR
a.iot_type != 'IOT_OVERFLOW')
and a.owner = s.owner and a.table_name = s.table_name and s.STATTYPE_LOCKED is null)
LOOP
dbms_stats.gather_table_stats(rec.owner, rec.table_name);
END LOOP;
END;
언급URL : https://stackoverflow.com/questions/16380732/oracle-manually-update-statistics-on-all-tables
반응형
'source' 카테고리의 다른 글
Django DB 설정 '잘못 구성됨' 오류 (0) | 2023.06.28 |
---|---|
CASE 문과 DECODE가 동일합니까? (0) | 2023.06.28 |
해시에서 문자열을 기호로 변환하는 가장 좋은 방법 (0) | 2023.06.28 |
돌연변이 및 동작을 통한 Vuex 빅 어레이 처리 (0) | 2023.06.28 |
MongoEngine을 사용하여 정렬하시겠습니까? (0) | 2023.06.28 |