blob컬럼을 암호화하여 등록해야 할 일이 있어서 암호화처리하는 프로시져를 만들었습니다.
프로시져의 처리 내용은 이렇습니다.
1. 암호화테이블 1행 insert : INSERT INTO TBL_TMP_BLOB (SEQ_NO, FL_BD) VALUES (V_SEQ_NO, EMPTY_BLOB());
2. 암호화테이블 blob컬럼 select : FL_BD into V_ENC_LOB
3. 원본테이블 blob컬럼 select : FL_BD into V_SRC_LOB
4. 암호화 : DBMS_CRYPTO.ENCRYPT(V_ENC_LOB, V_SRC_LOB, DBMS_CRYPTO.AES_CBC_PKCS5, V_KEY);
5. 암호화테이블 blob컬럼을 원본테이블 blob컬럼에 update
6. 암호화테이블 1행 delete
원본테이블의 blob이 insert된 후 위 프로시져를 호출하면 원본테이블의 blob컬럼은 암호화되어 update되고
암호화테이블은 insert 후 delete 되기 때문에 평상시 select 해도 데이터건이 없습니다.
(위 작업이 단일 transaction이므로 당연히 암호화테이블은 데이터가 없을 수 밖에 없습니다.)
이렇게 운영을 하고 있는데 암호화테이블이 사용하는 tablespace의 freespace가 계속 감소하고 있어서
처음 1GB만 할당한 tablespace가 현재는 10GB까지 늘려논 상태입니다.
그리고 암호화테이블을 truncate하면 그때는 freespace가 100%가 됩니다.
평상시 하루 blob량이 대략 1GB이며 마감때는 거의 10G까지 늘어납니다.
우선은 매일 저녁에 truncate를 실행해서 freespace를 100%로 만들고 있긴한데
데이터도 없는 암호화테이블이 tablespace가 계속 차고 있는것도 이상하고
마감때 혹시 tablespace가 full이 나면 프로그램이 에러나는건 아닌지 걱정입니다.
이 상황을 어떻게 해결해야 할까요?
데이터도 없는 테이블의 freespace가 계속 줄어드는게 정상인가요?
(DB버전은 10.2.0.4입니다.) |