ORACLE GoldenGate 11g on TDE Tablespace v1.0
1. ORACLE, OGG and TDE
ORACLE 11g R2 이상
OGG 11.2 이상
2. Installation outline
TDE 사용을 위한 WALLET, MASTER KEY 생성 부분은 생략한다.
여기서는 이후 TDE Tablespace 생성부터 OGG Replicat 구성까지를 포함한다.
흐름을 간략히 이야기 하면 기존 OGG 설치구성과 차별되는 점은 다음과 같다.
l ENCRYPTED TABLE 추출을 위한 추가작업
(스크립트 수행 및 OGG 계정에 권한 할당)
l DECRYPT 하기 위한 셋팅 ( EXTRACT 측 )
(OGG EXTRACT 파라미터 셋팅)
3. Environment on ORACLE
CREATE TABLESPACE TSD_TDETBS DATAFILE '+DATA' SIZE 30G ENCRYPTION USING 'AES256' DEFAULT STORAGE (ENCRYPT);
SELECT * FROM V$ENCRYPTED_TABLESPACES;
TS# ENCRYPTIONALG ENCRYPTED ENCRYTPEDKEY MASTERKEYID BLOCKS_ENCRYPTED BLOCKS_DECRYPTED ---------- --------------------- --------- ---------------------------------------------------------------- -------------------------------- ---------------- ---------------- 8 AES256 YES AF7DE90167B682A7080EB2B3E96099C771BF0DA1A3CF06D8DAFC87DA8AB2AC60 5F7FD828C4914F85BF39368D50609AB1 2942355 57958
SELECT * FROM V$TABLESPACE WHERE TS# = 8;
TS# NAME INCLUDED_ BIGFILE FLASHBACK ENCRYPT_I ---------- ------------------------------------------------------------------------------------------ --------- --------- --------- --------- 8 TSD_TDETBS YES NO YES |
8 번 테이블 스페이스 TSD_TDETBS 가 암호화 되어 있다.
TSD_TDETBS Tablespace 에는 system.test 테이블이 있고 다음과 같은 구조를 가진다.
CREATE TABLE SYSTEM.TEST ( ID NUMBER, EMAIL VARCHAR2(15), ADDR VARCHAR2(25), TLPN VARCHAR2(13) );
CREATE UNIQUE INDEX SYSTEM.PK_TEST ON SYSTEM.TEST(ID);
ALTER TABLE SYSTEM.TEST ADD CONSTRAINT PK_TEST PRIMARY KEY (ID); |
동기화 테스트를 위해 SYSTEM.TEST 에 5초 간격으로 INSERT 가 일어난다.
(초기 데이터 있는 상태임)
INTERVAL WHAT -------------------- ------------------------------------------------------------ SYSDATE + 5/24/60/60 INSERT INTO SYSTEM.TEST SELECT (SELECT MAX(ID) FROM SYSTEM.T EST) + 1, EMAIL, ADDR, TLPN FROM SYSTEM.TEST WHERE ROWNUM < 2; COMMIT; |
4. OGG Installation
OGG Version 은 11.2.1.0.25 를 사용하였다.
Binary 파일에 대한 압축 해제 및 오라클 프로파일 셋팅은 생략한다.
MGR, 및 기타셋팅
GGSCI > view param mgr
port 7809 PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPhours 10
DOWNCRITICAL DOWNREPORTMINUTES 30
LAGREPORTMINUTES 5 LAGINFOMINUTES 10 LAGCRITICALMINUTES 60 SYSLOG NONE
GGSCI > view param ./GLOBALS
GGSCHEMA ggsc; |
DECRYPTPASSWORD 생성
GGSCI > ENCRYPT PASSWORD (마스터키 생성시 사용했던 패스워드) BLOWFISH ENCRYPTKEY DEFAULT
Using default key...
Encrypted password: AACAAAAAAAAAAAOAMFAJNEIFQHDIYDXARGEHEGNBLIMCNBNG Algorithm used: BLOWFISH |
암호화 된 password 를 Extractor 의 “DBOPTIONS DECRYPTPASSWORD” 로 사용한다.
Encrypted 테이블 데이터 추출을 위한 추가셋팅
-- OGG 홈 디렉토리에서
@prvtclkm.plb
grant execute on dbms_internal_clkm to ggsc; |
Extract, Pump 셋팅
GGSCI > view param 01_ext
extract 01_ext userid ggsc, password *******
DBOPTIONS DECRYPTPASSWORD AACAAAAAAAAAAAOAMFAJNEIFQHDIYDXARGEHEGNBLIMCNBNG encryptkey default
exttrail ./dirdat/s1 EOFDELAYCSECS 30 FLUSHCSECS 30 FETCHOPTIONS NOUSESNAPSHOT REPORTCOUNT EVERY 10 MINUTES, RATE report at 23:59 reportrollover at 00:00 statoptions, reportfetch, reportdetail, resetreportstats sqlexec "alter session set recyclebin=off" THREADOPTIONS MAXCOMMITPROPAGATIONDELAY 60000 IOLATENCY 60000 TRANLOGOPTIONS EXCLUDEUSER GGSC, EXCLUDEUSERID 229
TRANLOGOPTIONS BUFSIZE 4194304 TRANLOGOPTIONS DBLOGREADER TRANLOGOPTIONS DBLOGREADERBUFSIZE 4194304
DDL INCLUDE MAPPED, OBJTYPE 'TABLE' DDLOPTIONS REPORT TRANLOGOPTIONS RAWDEVICEOFFSET 0 TRANLOGOPTIONS LOGRETENTION DISABLED BR BROFF
TABLE SYSTEM.TEST ;
GGSCI > view param 01_pump
EXTRACT 01_pump PASSTHRU RMTHOST ***.***.***.*** , MGRPORT 7809 report at 23:59 reportrollover at 00:00 statoptions, reportfetch, reportdetail, resetreportstats FLUSHCSECS 30 EOFDELAYCSECS 30 RMTTRAIL ./dirdat/t1 REPORTCOUNT EVERY 10 MINUTES, RATE
TABLE SYSTEM.TEST; |
Source 측 프로세스 추가 및 기동
add extract 01_ext, tranlog, THREADS 2, begin now add exttrail ./dirdat/s1, extract 01_ext, megabytes 100
add ext 01_pump, exttrailsource ./dirdat/s1, begin now add rmttrail ./dirdat/t1, ext 01_pump, megabytes 100
GGSCI > start 01_ext
GGSCI > start 01_pump |
Target 측 Replicat 셋팅
REPLICAT 01_rep USERID ggt, PASSWORD ******* DISCARDFILE ./dirrpt/01_rep.dsc, append, megabytes 500 DISCARDROLLOVER at 00:00 report at 23:59 reportrollover at 00:00 statoptions, reportfetch, reportdetail, resetreportstats REPORTCOUNT EVERY 10 MINUTES, RATE ASSUMETARGETDEFS sqlexec "alter session set recyclebin=off" DDL INCLUDE MAPPED, OBJTYPE 'TABLE' & EXCLUDE OPTYPE DROP & EXCLUDE INSTRWORDS 'ALTER TABLE TRUNCATE PARTITION' & EXCLUDE INSTRWORDS 'ALTER TABLE DROP PARTITION' & EXCLUDE OPTYPE TRUNCATE
DDLERROR DEFAULT ABEND DDLOPTIONS UPDATEMETADATA ALLOWNOOPUPDATES BATCHSQL BATCHESPERQUEUE 1000, BATCHTRANSOPS 10000, OPSPERBATCH 10000, OPSPERQUEUE 100000 MAXTRANSOPS 10000 GROUPTRANSOPS 10000 reperror 1403, discard reperror 1, discard reperror 600, discard
MAP SYSTEM.TEST, TARGET SYSTEM.TEST; |
Target 측 프로세스 추가 및 기동
add replicat 01_rep, exttrail ./dirdat/t1, begin now, checkpointtable ggsc.ggschkpt
GGSCI > 01_rep |
5. Encrypted Data
TDE 는 물리적 저장공간에 데이터가 암호화 되어 저장되어 있다.
반대로 메모리에 적재 된 데이터는 복호화 된 상태로 이는 데이터 파일에 내려 쓰여지기 전까지 암호화 하지 않는다.
OGG 에 의해 추출 된 데이터는 Trail file 로 내려 쓰여지는데, 이는 암호화 되어 있지 않다.
Logdump 4 >n ___________________________________________________________________ Hdr-Ind : E (x45) Partition : . (x04) UndoFlag : . (x00) BeforeAfter: A (x41) RecLength : 93 (x005d) IO Time : 2015/04/16 13:55:26.965.563 IOType : 5 (x05) OrigNode : 255 (xff) TransInd : . (x03) FormatType : R (x52) SyskeyLen : 0 (x00) Incomplete : . (x00) AuditRBA : 546 AuditPos : 697703032 Continued : N (x00) RecCount : 1 (x01)
2015/04/16 13:55:26.965.563 Insert Len 93 RBA 1045 Name: SYSTEM.TEST After Image: Partition 4 G s 0000 000c 0000 0008 3530 3536 3830 3432 0001 0013 | ........50568042.... 0000 000f 6c64 6474 6140 667a 6f69 732e 636f 6d00 | ....lddta@fzois.com. 0200 1d00 0000 1977 7769 7465 6574 7570 6368 7462 | .......wwiteetupchtb 6974 7067 7465 796a 6e66 7670 0003 0011 0000 000d | itpgteyjnfvp........ 3031 302d 3438 3535 2d31 3634 38 | 010-4855-**** |
전부 더미 데이터 이지만 실제 번호가 있는 경우를 고려해 끝의 4자리는 * 처리 하였음
Trail file 의 암호화는 OGG 기능을 사용하여 적용 가능하며, 이 문서에서는 다루지 않았다.
6. Conclusion
OGG with TDE 는 복호화 부분을 위해 키 셋팅이 필요하다.
Trail file 은 암호화 되어 있지 않으며, 결과적으로 TDE 사용으로 영향 받는 부분은 소스의 Extract 뿐이다.
Target 측은 TDE 사용이 필요 없다.