OS환경 : Oracle Linux 7.6 (64bit)
DB 환경 : Oracle Database 19.3.0.0
방법 : 오라클 19c 파티션테이블 파티션별 count 확인
오라클 19c 파티션 테이블의 파티션별 row count 확인하는 방법을 설명함
테스트
통계정보 수집이 가능하거나, 통계정보가 최신인 경우
통계정보 수집이 불가능한 경우(파티션별 개별 count)
테스트
샘플 파티션 테이블 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
SQL>
conn imsi/imsi
drop table ptable purge;
create table ptable
(
col1 varchar2(8),
col2 number
)
tablespace users
partition by range (col1)
(
partition p202101 values less than ('20210200'),
partition p202102 values less than ('20210300'),
partition p202103 values less than ('20210400'),
partition p202104 values less than ('20210500'),
partition p202105 values less than ('20210600'),
partition p202106 values less than ('20210700'),
partition p202107 values less than ('20210800'),
partition p202108 values less than ('20210900'),
partition p202109 values less than ('20211000'),
partition p202110 values less than ('20211100'),
partition p202111 values less than ('20211200'),
partition p202112 values less than ('20220100')
);
Table created.
|
파티션 테이블 샘플 데이터 삽입(원하는 만큼 실행)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
SQL>
DECLARE
TYPE tbl_ins IS TABLE OF PTABLE%ROWTYPE INDEX BY BINARY_INTEGER;
w_ins tbl_ins;
BEGIN
for j in 1..10 loop
FOR i IN 1..100000 LOOP
w_ins(i).col1 := '2021'||to_char(round(dbms_random.value(1,12)) , 'FM09')||to_char( round(dbms_random.value(1,28)), 'FM09');
w_ins(i).col2 := ceil(dbms_random.value(1, 10000000));
END LOOP;
FORALL i in 1..100000 INSERT INTO PTABLE VALUES w_ins(i);
COMMIT;
end loop;
END;
/
PL/SQL procedure successfully completed
|
통계정보 수집이 가능하거나, 통계정보가 최신인 경우
통계정보 수집
1
2
3
|
SQL> exec dbms_stats.gather_table_stats(ownname => 'IMSI', tabname => 'PTABLE');
PL/SQL procedure successfully completed.
|
dba_tab_partitions 뷰 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
SQL>
col table_name for a10
col partition_name for a20
select table_name, partition_name, num_rows from dba_tab_partitions
where table_name = 'PTABLE'
order by 1, 2;
TABLE_NAME PARTITION_NAME NUM_ROWS
---------- -------------------- ----------
PTABLE P202101 45432
PTABLE P202102 90509
PTABLE P202103 90907
PTABLE P202104 90832
PTABLE P202105 91187
PTABLE P202106 91052
PTABLE P202107 90567
PTABLE P202108 91058
PTABLE P202109 91162
PTABLE P202110 91114
PTABLE P202111 90960
PTABLE P202112 45220
12 rows selected.
|
정상적으로 파티션별 row를 확인 가능함
통계정보 수집이 불가능한 경우(파티션별 개별 count)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
SQL>
예시
set serveroutput on
DECLARE
v_count NUMBER;
v_exec_str VARCHAR2(1000);
BEGIN
FOR r IN (SELECT partition_name FROM dba_tab_partitions where table_name = '테이블명' order by 1) LOOP
v_exec_str := 'SELECT COUNT(*) FROM 테이블명 partition(' || r.partition_name || ')';
EXECUTE IMMEDIATE v_exec_str INTO v_count;
DBMS_OUTPUT.PUT_LINE(r.partition_name || ' : ' || v_count);
END LOOP;
END;
/
실행
set serveroutput on
DECLARE
v_count NUMBER;
v_exec_str VARCHAR2(1000);
BEGIN
FOR r IN (SELECT partition_name FROM dba_tab_partitions where table_name = 'PTABLE' order by 1) LOOP
v_exec_str := 'SELECT COUNT(*) FROM PTABLE partition(' || r.partition_name || ')';
EXECUTE IMMEDIATE v_exec_str INTO v_count;
DBMS_OUTPUT.PUT_LINE(r.partition_name || ' : ' || v_count);
END LOOP;
END;
/
P202101 : 45432
P202102 : 90509
P202103 : 90907
P202104 : 90832
P202105 : 91187
P202106 : 91052
P202107 : 90567
P202108 : 91058
P202109 : 91162
P202110 : 91114
P202111 : 90960
P202112 : 45220
PL/SQL procedure successfully completed.
|
정상적으로 파티션별 row를 확인 가능함
참고
특정 유저의 모든 파티션 테이블의 파티션별 row count
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
SQL>
set serveroutput on
DECLARE
v_count NUMBER;
v_exec_str VARCHAR2(1000);
BEGIN
FOR r IN (SELECT table_owner, table_name, partition_name FROM dba_tab_partitions where table_owner = 'SYS' order by 1, 2) LOOP
v_exec_str := 'SELECT COUNT(*) FROM ' || r.table_name || ' partition(' || r.partition_name || ')';
EXECUTE IMMEDIATE v_exec_str INTO v_count;
DBMS_OUTPUT.PUT_LINE(r.table_owner||'.'||r.table_name||'.'||r.partition_name || ' : ' || v_count);
END LOOP;
END;
/
.
.
SYS.WRP$_REPORTS_DETAILS.SYS_P2666 : 3
SYS.WRP$_REPORTS_DETAILS.SYS_P2642 : 13
SYS.WRP$_REPORTS_DETAILS.SYS_P2680 : 7
SYS.WRP$_REPORTS_TIME_BANDS.P0 : 0
SYS.WRP$_REPORTS_TIME_BANDS.SYS_P2645 : 13
SYS.WRP$_REPORTS_TIME_BANDS.SYS_P2696 : 2
SYS.WRP$_REPORTS_TIME_BANDS.SYS_P2714 : 2
SYS.WRP$_REPORTS_TIME_BANDS.SYS_P2705 : 2
SYS.WRP$_REPORTS_TIME_BANDS.SYS_P2678 : 2
SYS.WRP$_REPORTS_TIME_BANDS.SYS_P2669 : 3
SYS.WRP$_REPORTS_TIME_BANDS.SYS_P2625 : 4
SYS.WRP$_REPORTS_TIME_BANDS.SYS_P2683 : 7
SYS.WRR$_WORKLOAD_REPLAY_THREAD.WRR_REPLAY_THREAD_P1 : 0
PL/SQL procedure successfully completed.
|
정상적으로 유저가 가진 모든 테이블의 파티션별 row를 확인 가능함
참조 :
https://positivemh.tistory.com/999
https://positivemh.tistory.com/1050
'ORACLE > Sql' 카테고리의 다른 글
오라클 19c 유저, 백그라운드 프로세스 pga 사용량 확인 (0) | 2024.05.01 |
---|---|
DBMS_SPACE.UNUSED_SPACE 한번에 여러 세그먼트 조회 (0) | 2024.04.10 |
오라클 19c 버전 및 에디션 확인 방법 (0) | 2024.03.30 |
오라클 19c redo log 크기 자동 변경 스크립트 (0) | 2024.03.26 |
오라클 19c 힌트 목록 확인 쿼리 (0) | 2024.02.05 |