개요
Oracle To Tibero 이관 또는 Tibero 6에서 Tibero 7으로 업그레이드 한 후, 대상 테이블의 row 수가 이관 전후로 정확히 일치하는지 검증해야 할 경우가 많습니다.
Row count 검증 방법중 GLOBAL TEMPORARY TABLE(GTT)을 활용하여 테이블 별 row count를 수집 및 비교하는 방법에 대해 안내합니다.
참고
UNION ALL 방식의 Count 조회 시에는 메모리를 과사용하는 사용 부담을 개별로 수행하는 PL/SQL 문법으로 수행합니다.
방법
1. GLOBAL TEMP TABLE 생성
CREATE GLOBAL TEMPORARY TABLE MIG_TAB_COUNT (
owner VARCHAR(40),
table_name VARCHAR(128),
row_count NUMBER
) ON COMMIT PRESERVE ROWS;
-- 세션 단위 보존. 세션 종료 시 자동 초기화 ( On commit preserve rows )
SQL
복사
2. Row Count 수집 (로컬 테이블 대상)
DECLARE
v_sql VARCHAR2(1000);
BEGIN
FOR i IN (SELECT owner, table_name FROM DBA_TABLES
WHERE 1=1
-- AND owner IN ('TIBERO1','TIBERO2')
) LOOP
v_sql := 'INSERT INTO MIG_TAB_COUNT (owner, table_name, row_count) ' ||
'SELECT ''' || i.owner || ''', ''' || i.table_name || ''', COUNT(*) FROM ' || i.owner || '.' || i.table_name;
EXECUTE IMMEDIATE v_sql;
END LOOP;
END;
/
SQL
복사
3. 결과 확인
결과는 엑셀로 복사하여 이관 전 데이터와 비교합니다. ( As-is 와 To-be 에서 각각 수행 )
SELECT * FROM MIG_TAB_COUNT;
SQL
복사
4. DBLINK를 이용한 row count 수집방법 (선택사항)
DECLARE
v_sql VARCHAR2(1000);
BEGIN
FOR i IN (SELECT owner, table_name FROM ALL_TABLES
WHERE 1=1
-- AND owner IN ('TIBERO1','TIBERO2')
) LOOP
v_sql := 'INSERT INTO MIG_TAB_COUNT (owner, table_name, row_count) ' ||
'SELECT ''' || i.owner || ''', ''' || i.table_name || ''', COUNT(*) FROM ' || i.owner || '.' || i.table_name || '@olink';
EXECUTE IMMEDIATE v_sql;
END LOOP;
END;
SQL
복사
검증에 사용한 MIG_TAB_COUNT 은 drop 합니다.
DROP TABLE MIG_TAB_COUNT PURGE;
SQL
복사
참고
•
이관대상 스키마를 owner In 에 추가하며, DBLINK명은 사용 환경에 맞게 수정해 사용합니다.
•
COUNT를 조회하는 구문에 PARALLEL 을 추가하면 더욱 빠른 성능을 기대할 수 있습니다.
•
DBLINK를 통해 remote side에서 count를 수행할 경우, 성능이 좋지 않을 수 있습니다.