외부 테이블 활용
외부 테이블을 이용한 가공 결과 이행과 로그 분석, 실제 병렬 수행 여부는 확인 불가
#핵심 요약
가공한 조회 결과만 파일로 내보내고 타깃 외부 테이블에서 확인한 뒤 내부 적재하는 실습 예가 있음
텍스트 로그를 줄 단위 외부 테이블로 읽어 오류 코드와 시각별로 분석하는 실습 예가 있음
#개념과 동작 원리
| 경량 이행 순서 | 데이터 가공과 적재 동작 |
|---|---|
| 소스 기준 확보 | EMP, DEPT 조인 결과의 건수와 급여 합계 확인 |
| 가공 결과 Unload | ORACLE_DATAPUMP CTAS, 4개 파일과 PARALLEL 4 예 |
| 전송 | 소스, 타깃 파일 체크섬 비교 |
| 사전 조회 | 타깃 외부 테이블의 건수, 합계 확인 |
| 내부 적재 | 별도 타깃 테이블에 APPEND INSERT와 COMMIT |
| 사후 대조 | 건수, 합계와 양방향 MINUS, 계획 조회 |
실제 기준 건수, 합계, 체크섬과 실행계획 출력은 기재 없음
| 로그 분석 구성 | 파일 조회와 집계 동작 |
|---|---|
| 위치 확인 | 진단 정보에서 텍스트 로그 경로 확인 |
| 권한 | 진단 DIRECTORY에 READ만 부여, NOLOGFILE, NOBADFILE 사용 |
| 행 구조 | RECNUM으로 줄 번호, 텍스트 한 줄을 한 행으로 읽음 |
| 오류 추출 | 정규식으로 ORA 코드가 있는 줄과 코드별 건수 추출 |
| 시각 연결 | 별도 시각 줄을 파싱하고 LAST_VALUE IGNORE NULLS로 후속 줄에 전달 |
| 집계 | 일자별, 최근 기간별 오류 조회와 뷰 구성 |
| 비교 대상 | V$DIAG_ALERT_EXT의 시각, 메시지 조회와 비교 |
#필수 명령어 또는 SQL
#ORACLE_DATAPUMP로 내보내고 다른 DB에서 읽기
CREATE OR REPLACE DIRECTORY pump_src AS '/home/oracle/pump_src';
GRANT READ, WRITE ON DIRECTORY pump_src TO scott;
-- 데이터 소유 계정으로
CREATE TABLE emp_ext_export
ORGANIZATION EXTERNAL (
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY pump_src
LOCATION ('emp.dmp')
)
AS SELECT * FROM emp;
SELECT COUNT(*) FROM emp_ext_export;ls -l /home/oracle/pump_src/
file /home/oracle/pump_src/emp.dmp
scp /home/oracle/pump_src/emp.dmp oracle@<TARGET_HOST>:/home/oracle/pump_tgt/CREATE OR REPLACE DIRECTORY pump_tgt AS '/home/oracle/pump_tgt';
GRANT READ, WRITE ON DIRECTORY pump_tgt TO scott;
CREATE TABLE emp_ext (
empno NUMBER(4),
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2)
)
ORGANIZATION EXTERNAL (
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY pump_tgt
LOCATION ('emp.dmp')
)
REJECT LIMIT UNLIMITED;
SELECT COUNT(*) FROM emp_ext;
CREATE TABLE emp_load AS SELECT * FROM emp_ext;
SELECT COUNT(*) FROM emp_load;결과 해석:
CREATE TABLE ... ORGANIZATION EXTERNAL ... AS SELECT로 파일을 만드는 unload는 ORACLE_DATAPUMP에서만 되고 ORACLE_LOADER로는 안 됨
만들어진 emp.dmp는 텍스트가 아닌 이진 파일이라 cat으로 보면 깨져 보이며, file 명령으로 확인함
타깃 외부 테이블의 컬럼 이름과 타입은 unload 때와 똑같이 적음
외부 테이블로 먼저 건수를 확인하고 필요하면 일반 테이블로 적재하면 가벼운 이행이 끝남
텍스트 파일을 읽는 ORACLE_LOADER 방식은 외부 테이블에 있음
#사용 조건과 주의사항
실습에서는 양방향 MINUS로 누락, 중복을 증명한다고 표현하나 중복 행별 개수 비교 출력이 없음
해당 표현을 완전한 정합성 보장으로 게시하지 않음
EXPLAIN PLAN과 힌트는 병렬 수행 의도를 나타내며 실제 병렬 수행 여부는 확인 불가
NOLOGFILE, NOBADFILE과 REJECT LIMIT UNLIMITED가 있는 로그 예제에는 거부 행 확인 경로가 제시되지 않음
모든 로그 줄이 빠짐없이 읽혔다는 보장은 확인 불가
V$DIAG_ALERT_EXT는 수업 자료에서 XML 알럿 로그 조회와 비교하는 대상으로 소개됨
리스너, 감사, 애플리케이션 파일은 각 형식에 맞는 별도 파싱이 필요함