시간적 유효성 지원(Temporal Validity Support)이란?
오라클 데이터베이스에서 시간적 유효성 지원은 데이터의 유효 기간을 명시적으로 관리할 수 있도록 해주는 기능입니다. 이는 특정 시점의 데이터 상태를 조회하거나, 데이터 변경 이력을 추적하고 감사하는 데 유용합니다. 예를 들어, 인사 시스템에서 직원의 고용 시작일과 종료일을 관리하거나, 제품 가격의 변경 이력을 관리하는 데 사용할 수 있습니다.
시간적 유효성 지원의 주요 개념
- 유효 기간 열 (Validity Period Columns): 데이터의 유효 기간을 나타내는 시작 날짜와 종료 날짜를 저장하는 열입니다.
- AS OF 절 (AS OF Clause): 특정 시점의 데이터 상태를 조회하는 데 사용되는 SQL 절입니다.
- 버전 쿼리 (Version Query): 특정 기간 동안의 데이터 변경 이력을 조회하는 쿼리입니다.
- 플래시백 아카이브 (Flashback Archive): 데이터의 장기적인 변경 이력을 저장하고 관리하는 데 사용되는 저장소입니다.
시간적 유효성 지원을 활용한 예시
다음은 인사 시스템에서 직원의 고용 시작일과 종료일을 관리하는 예시입니다.
- 테이블 생성: 직원 테이블에
hire_date
와termination_date
열을 추가하여 고용 기간을 관리합니다.CREATE TABLE employees ( employee_id NUMBER PRIMARY KEY, employee_name VARCHAR2(100), hire_date DATE, termination_date DATE );
- 데이터 삽입: 직원의 고용 시작일을
hire_date
열에 저장합니다. 현재 재직 중인 직원의 경우termination_date
는NULL
로 설정합니다.INSERT INTO employees (employee_id, employee_name, hire_date, termination_date) VALUES (1, '홍길동', DATE '2020-01-01', NULL);
- 퇴사 처리: 직원이 퇴사하는 경우
termination_date
열을 퇴사일로 업데이트합니다.UPDATE employees SET termination_date = DATE '2023-12-31' WHERE employee_id = 1;
- 특정 시점의 데이터 조회 (AS OF): 2022년 1월 1일 당시의 직원 목록을 조회하려면
AS OF
절을 사용합니다.SELECT employee_id, employee_name FROM employees AS OF TIMESTAMP DATE '2022-01-01 00:00:00' WHERE termination_date IS NULL;
- 특정 기간의 데이터 조회 (Version Query): 2020년 이후 퇴사한 직원들의 목록과 퇴사일을 조회합니다.
SELECT employee_id, employee_name, hire_date, termination_date FROM employees WHERE termination_date BETWEEN DATE '2020-01-01' AND SYSDATE;
- 플래시백 아카이브 설정 (Flashback Archive): 장기적인 데이터 보존을 위해 플래시백 아카이브를 설정합니다. 먼저 테이블스페이스를 생성합니다.
그 후 플래시백 아카이브를 생성합니다.CREATE TABLESPACE flashback_ts DATAFILE 'flashback_ts.dbf' SIZE 100M AUTOEXTEND ON;
마지막으로, 플래시백 아카이브를 해당 테이블에 적용합니다.CREATE FLASHBACK ARCHIVE fla_archive TABLESPACE flashback_ts RETENTION 10 YEAR;
ALTER TABLE employees ADD FLASHBACK ARCHIVE fla_archive;
더욱 심화된 예시
제품 가격 변경 이력 관리:
CREATE TABLE product_prices (
product_id NUMBER,
price NUMBER,
valid_from DATE,
valid_to DATE
);
INSERT INTO product_prices (product_id, price, valid_from, valid_to)
VALUES (100, 99.99, DATE '2023-01-01', DATE '2023-06-30');
INSERT INTO product_prices (product_id, price, valid_from, valid_to)
VALUES (100, 109.99, DATE '2023-07-01', DATE '9999-12-31');
SELECT product_id, price
FROM product_prices
WHERE product_id = 100
AND DATE '2023-05-15' BETWEEN valid_from AND valid_to;
시간적 유효성 지원 활용 시 주의사항
- 유효 기간 열의 데이터 타입은
DATE
또는TIMESTAMP
를 사용하는 것이 좋습니다. AS OF
절을 사용할 때는 성능에 영향을 미칠 수 있으므로, 인덱스를 적절히 활용하는 것이 중요합니다.- 플래시백 아카이브를 설정할 때는 충분한 저장 공간을 확보해야 합니다.
결론
시간적 유효성 지원은 데이터의 과거 상태를 보존하고, 변경 이력을 추적하는 데 매우 유용한 기능입니다. 이 기능을 통해 감사, 보고, 복구 등 다양한 시나리오에서 활용 가능하며, 데이터 관리의 효율성을 높일 수 있습니다.