데이터베이스 연구실.log

외부 테이블 활용

외부 테이블을 이용한 가공 결과 이행과 로그 분석, 실제 병렬 수행 여부는 확인 불가

ORACLE_DATAPUMPunload경량 이행alert 로그MINUSRECNUM

#핵심 요약

가공한 조회 결과만 파일로 내보내고 타깃 외부 테이블에서 확인한 뒤 내부 적재하는 실습 예가 있음

텍스트 로그를 줄 단위 외부 테이블로 읽어 오류 코드와 시각별로 분석하는 실습 예가 있음

#개념과 동작 원리

경량 이행 순서 데이터 가공과 적재 동작
소스 기준 확보 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에서 읽기

소스 SQL*Plus (SYSDBA → 데이터 소유 계정)객체 또는 설정을 변경함
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;
oracle 계정 셸 (소스)조회만 함
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/
타깃 SQL*Plus (SYSDBA → 데이터 소유 계정)객체 또는 설정을 변경함
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 알럿 로그 조회와 비교하는 대상으로 소개됨
리스너, 감사, 애플리케이션 파일은 각 형식에 맞는 별도 파싱이 필요함

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기