반응형
오라클 데이터베이스에서 **AUTONOMOUS TRANSACTION(자율 트랜잭션)**은 현재 트랜잭션과는 독립적으로 실행되는 트랜잭션입니다. 이를 통해 메인 트랜잭션의 상태와 관계없이 별도의 작업을 수행하고 커밋(COMMIT) 또는 **롤백(ROLLBACK)**을 할 수 있습니다. 주로 로그 기록, 감사(Auditing), 에러 처리를 위해 사용됩니다.
1. AUTONOMOUS TRANSACTION의 개념
1-1. 특징
- 독립성: 메인 트랜잭션과 완전히 분리된 상태에서 실행됩니다.
- 독립적 커밋/롤백: 메인 트랜잭션과 별개로 커밋하거나 롤백할 수 있습니다.
- 사용 목적: 주요 트랜잭션의 상태에 영향을 주지 않으면서 로그 작성, 에러 로깅 등을 수행.
1-2. 동작 원리
- AUTONOMOUS TRANSACTION 블록 내에서 실행된 작업은 메인 트랜잭션의 영향을 받지 않습니다.
- 블록이 끝나기 전 명시적으로 COMMIT 또는 ROLLBACK을 호출해야 합니다.
2. AUTONOMOUS TRANSACTION 선언 방법
2-1. PRAGMA AUTONOMOUS_TRANSACTION
오라클 PL/SQL에서 자율 트랜잭션을 선언하려면 PRAGMA AUTONOMOUS_TRANSACTION을 사용합니다.
PRAGMA AUTONOMOUS_TRANSACTION;
- PRAGMA: 컴파일러 지시어로, 블록이 자율 트랜잭션으로 작동하도록 설정.
2-2. 사용 위치
- PL/SQL 블록: 프로시저, 함수, 트리거에서 사용 가능.
3. 사용법
3-1. 기본 예제: 로그 기록
CREATE OR REPLACE PROCEDURE 기록_로그(메시지 VARCHAR2) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO 로그_테이블(로그_시간, 로그_메시지)
VALUES (SYSDATE, 메시지);
COMMIT; -- 메인 트랜잭션과 독립적으로 커밋
END 기록_로그;
/
- 해석:
- 로그_테이블에 로그 메시지를 기록.
- COMMIT을 통해 현재 트랜잭션과 독립적으로 작업 완료.
호출
BEGIN
기록_로그('프로세스 시작');
-- 메인 트랜잭션 작업
END;
3-2. 트랜잭션 내 오류 로깅
CREATE OR REPLACE PROCEDURE 오류_로깅(오류_메시지 VARCHAR2) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO 오류_로그(발생시간, 메시지)
VALUES (SYSDATE, 오류_메시지);
COMMIT; -- 로그 기록 완료
END 오류_로깅;
/
- 용도: 메인 트랜잭션에서 오류가 발생해도 로그 기록은 보장됩니다.
호출
BEGIN
-- 메인 트랜잭션
INSERT INTO 데이터_테이블 VALUES (1, '데이터');
EXCEPTION
WHEN OTHERS THEN
오류_로깅(SQLERRM);
ROLLBACK; -- 메인 트랜잭션 롤백
END;
3-3. 트리거에서 AUTONOMOUS TRANSACTION 사용
CREATE OR REPLACE TRIGGER 주문_추적_트리거
AFTER INSERT ON 주문
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO 주문_로그(주문번호, 등록시간)
VALUES (:NEW.주문번호, SYSDATE);
COMMIT; -- 독립적으로 로그 작성
END 주문_추적_트리거;
/
- 해석: 주문 테이블에 새 데이터가 삽입되면, 주문 로그 테이블에 기록.
4. 주의사항
- 명시적 커밋/롤백 필요:
- AUTONOMOUS TRANSACTION 블록에서 반드시 COMMIT 또는 ROLLBACK을 호출해야 합니다.
- 호출하지 않으면 데이터베이스가 에러를 발생시킵니다.
- 독립성의 위험:
- 메인 트랜잭션이 롤백되더라도 자율 트랜잭션은 롤백되지 않으므로 데이터 불일치 가능성이 있습니다.
- 성능 주의:
- 자율 트랜잭션 사용이 잦으면 성능 저하가 발생할 수 있습니다. 꼭 필요한 경우에만 사용하세요.
- 실행 권한:
- AUTONOMOUS TRANSACTION을 사용하는 함수/프로시저/트리거는 적절한 권한이 필요합니다.
5. 실무 활용 사례
사례 1: 감사(Audit) 로그 작성
CREATE OR REPLACE PROCEDURE 감사_로그(사용자ID VARCHAR2, 작업내용 VARCHAR2) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO 감사_테이블(사용자, 작업, 작업시간)
VALUES (사용자ID, 작업내용, SYSDATE);
COMMIT;
END 감사_로그;
/
- 용도: 시스템에서 실행된 주요 작업 기록.
사례 2: 에러 기록과 재시도
CREATE OR REPLACE PROCEDURE 에러_처리(작업ID NUMBER, 오류메시지 VARCHAR2) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO 에러_로그(작업ID, 메시지, 시간)
VALUES (작업ID, 오류메시지, SYSDATE);
COMMIT;
END 에러_처리;
/
BEGIN
-- 메인 트랜잭션
UPDATE 데이터_테이블 SET 상태 = '완료' WHERE 작업ID = 1001;
EXCEPTION
WHEN OTHERS THEN
에러_처리(1001, SQLERRM);
ROLLBACK;
END;
사례 3: 세션 간 데이터 공유
AUTONOMOUS TRANSACTION을 통해 데이터를 빠르게 커밋하고 다른 세션에서 참조할 수 있도록 설정.
CREATE OR REPLACE PROCEDURE 공유_데이터_삽입(데이터 VARCHAR2) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO 공유_테이블(내용, 생성시간)
VALUES (데이터, SYSDATE);
COMMIT;
END 공유_데이터_삽입;
/
6. 결론
AUTONOMOUS TRANSACTION은 데이터베이스 관리 및 트랜잭션 제어에서 강력한 도구입니다. 메인 트랜잭션과 독립적으로 로그 작성, 오류 처리, 감사 로그를 기록하는 데 활용할 수 있으며, 데이터 일관성을 유지하면서 효율적인 작업 처리를 지원합니다. 하지만 남용하면 데이터 불일치나 성능 문제를 초래할 수 있으므로 신중하게 사용해야 합니다.
궁금한 점이나 추가적으로 도움이 필요하면 언제든지 문의해주세요! 😊
반응형
'Database' 카테고리의 다른 글
오라클 SQL*Loader로 데이터 대량 삽입하기 (0) | 2024.12.04 |
---|---|
오라클 MERGE로 데이터 병합하기 (2) | 2024.12.03 |
오라클 SQL 실행 계획 분석하기 EXPLAIN PLAN (0) | 2024.12.03 |
오라클 데이터베이스 성능 튜닝 기초: 쿼리 최적화 (0) | 2024.12.03 |
오라클 데이터베이스의 백업 및 복구 기본 (0) | 2024.12.03 |