일단 오라클을 사용중입니다.
시스템을 운영하면서 데이터의 이력을 남기는 경우
이력을 남기기 위해서 valid 컬럼을 변경하고, 시간을 변경합니다.
이때, 만약 나중에 테이블 구조가 변경된다면, 기존에 만들어 놓은 쿼리를 모두 수정해야해서
혹시 이를 위해서 지원하는 기능이 있는지 궁금해서 질문남깁니다.
예)
테이블 구조 :
create table abc
(
data1 varchar(2000)
date varchar(8)
time varchar(8)
valid varchar(1)
)
이력 저장 sql :
insert into abc (data1, date, time, valid)
select data1, date, time, valid from abc
테이블 구조 변경 :
create table abc
(
data1 varchar(2000)
date varchar(8)
time varchar(8)
valid varchar(1)
data2 varchar(2000)
data3 varchar(2000)
)
기존의 이력 저장 sql 사용시 data2, data3이 비어 있음으로 문제가 발생합니다.
다른 방법으로 이력을 저장하는 기능이 있을까요..?
감사합니다.
데이터 이력을 테이블 구조변경 없이 남기기 위해서, 보통의 아래의 방법들 중에 선택합니다.
1. 해당 테이블에 Audit 를 위한 다수 컬럼 추가 ex> 최초입력자ID, 최초입력일시, 최종변경자ID, 최종변경일시 + 프로그램ID + 접속주소 etc....
2. 해당 테이블에 DML Type 컬럼을 추가하고, 모든 데이터는 Insert 만 허용합니다. ex> Update 는 추가 컬럼에 Update 를 표기하고 PK 컬럼 및 변경된 컬럼에 변경된 Data 입력, Delete 는 추가 컬럼에 Delete 입력하고 PK 컬럼에 데이터 입력 ==> ODS 용 테이블로 설계 때 사용하는 방법
이력 저장 sql :
insert into abc (data1, date, time, valid)
select data1, date, time, valid from abc
이력저장 SQL이라고 하신 쿼리가 같은 테이블 데이터를 같은 테이블에 넣는데 테이블명이 잘못 된거죠?
보통은 원본 테이블이 있고 이력테이블이 따로 존재 할텐데...
원본 테이블에 컬럼을 추가 하면 당연히 이력테이블에도 컬럼을 추가 하는 DBA의 작업이 이루어지겠죠.
원본 테이블에 컬럼을 추가 했다면 업무 요건이 바뀌었을테고 그럼 프로그램 수정이 발생하면 이력저장하는 부분도 함께 프로그램 변경이 이러나는게 정상입니다.
테이블 구조가 바뀌는걸 자동으로 감지하고 자동으로 이력테이블 구조도 바꾸고 이력도 자동으로 넣어주는 기능은 없는게 당연할겁니다.
뭐 꼭 필요하다면 테이블 구조가 바뀌는지 감시하는 프로시저를 만들어 주기적으로 실행하고, 바뀌었을 경우 이력테이블의 구조를 변경하고 트리거를 만들어서 자동으로 데이터를 백업하도록 배치작업을 만들면 가능도 하겠지만... 위험부담도 크고 DDL을 직접 프로시저로 만들어 쓰는것도 비추지만 만든다고 하면 만들수는 있을듯 합니다.