TDE(Transparent Data Encryption) 테이블스페이스 암호화 기능을 사용하면 Oracle EBS(Enterprise Business Suite) 애플리케이션의 모든 데이터가 저장된 테이블스페이스를 안전하게 암호화할 수 있습니다. TDE는 애플리케이션에 투명하게 작동하기 때문에 기존 코드를 수정할 필요가 없으며, 권한이 부여된 사용자는 암호화된 데이터에도 아무 문제 없이 정상적으로 접근할 수 있습니다.
개요
TDE는 데이터파일과 백업 파일처럼 저장 상태(Data-at-Rest)에 있는 데이터에 적용됩니다. 권한이 있는 사용자라면 누구나 성능 저하나 오류 없이 암호화된 데이터에 접근할 수 있습니다.
목표
TDE 테이블스페이스 암호화 옵션을 활용하면 EBS 데이터베이스에 저장된 모든 민감한 데이터를 보호할 수 있으며, 오직 승인된 사용자만 암호화된 데이터에 접근하도록 제한할 수 있습니다.
제한 사항
SYSTEM 및 SYSAUX 테이블스페이스는 데이터베이스 생성 시점에 함께 만들어지기 때문에 암호화할 수 없습니다. 암호화 옵션은 테이블스페이스 생성 시에만 지정할 수 있습니다. UNDO와 TEMP 테이블스페이스 역시 직접 암호화는 불가능하지만, 암호화된 테이블스페이스에서 TEMP나 UNDO로 저장되는 데이터 자체는 자동으로 암호화됩니다.
구현 단계
1. 소프트웨어 버전 확인
다음 패치가 적용되어 있는지 먼저 확인합니다.
- Patch 16207672 – 12.2.2
- Patch 20745242 – R12.AD.C.Delta.7
- Patch 20784380 – R12.TXK.C.Delta.7
- Patch 19597008
- Patch 20251314 (12.2.5에 포함)
- Patch 8796558
- Patch 19343134
2. 12.1.0 DB 홈 준비
- 12.1.0 소프트웨어 설치
- 12c Examples CD에서 Oracle Database 12c 제품 설치 (필수)
- 추가 12.1.0.2 RDBMS 패치 적용
3. 최신 필수 DB ETCC/PSU 패치 적용
데이터베이스에 최신 ETCC(EBS Technology Codelevel Checker)/PSU 패치를 모두 적용합니다.
4. nls/data/9idata 디렉터리 생성
perl $ORACLE_HOME/nls/data/old/cr9idata.pl
5. 소스 관리 서버 노드에서 Patch 16541956 적용
Export/Import 유틸리티 패치를 사용하는 애플리케이션 통합 환경의 소스 관리 서버 노드에 Patch 16541956을 적용합니다. 먼저 작업 디렉터리를 생성합니다.
mkdir /u01/expimp << /u01/oracle/patches/12c_db/backup/expimp/3rditeration
7. 대상 데이터베이스 인스턴스 생성 스크립트(aucrdb.sql) 생성
Export/Import 패치에는 aucrdb.sql 스크립트를 생성해 주는 auclondb.sql 스크립트가 포함되어 있습니다. $AU_TOP/patch/115/sql/auclondb.sql 스크립트를 앱 노드에서 DB 노드로 복사한 뒤 아래와 같이 실행합니다.
$ sqlplus system/[system password] @ $AU_TOP/patch/115/sql/auclondb.sql 12
8. Advanced Queue 설정 기록
auque1.sql 스크립트를 앱 노드의 $AU_TOP/patch/115/sql 경로에서 DB 노드로 복사하여 실행합니다. 다음 명령은 auque2.sql을 생성합니다.
$ sqlplus /nologSQL> connect / as sysdba;SQL> @auque1.sql
9. 공간(Spatial) 인덱스의 REBUILD 인덱스 파라미터 제거
select * from dba_indexes where index_type='DOMAIN' and upper(parameters) like '%REBUILD%';
10. Text 인덱스 동기화
$ sqlplus '/ as sysdba'SQL> select pnd_index_owner,pnd_index_name,count(*) from ctxsys.ctx_pending group by pnd_index_owner,pnd_index_name;
위 쿼리에서 결과 행이 반환되면 아래 명령을 실행합니다.
exec ctx_ddl.sync_index('[index owner].[index name]');
11. Export 파라미터 파일 생성
$AU_TOP/patch/115/import/auexpdp.dat 파일을 앱 노드에서 복사한 후 요구 사항에 맞게 수정합니다.
수정 예시(diff 결과): filesize를 1048576000에서 5368709120으로 변경하고, PARALLEL=5와 EXCLUDE=STATISTICS 항목을 추가합니다.
필요한 디렉터리 객체를 생성합니다.
SQL> create or replace directory dmpdir as '/u01/oracle/patches/12c_db/backup/expimp/2nditeration';
12. 활성화된 패칭 사이클이 없는지 확인
adop 패칭 사이클(PREPARE, APPLY, FINALIZE, CUTOVER, CLEANUP)이 모두 COMPLETED 상태인지 확인한 후 진행합니다.
13. 애플리케이션 서버 프로세스 종료
Export 작업 전에 애플리케이션 서버 프로세스를 모두 중단합니다.
14. 소스 SYSTEM 스키마에 권한 부여
SQL> grant EXEMPT ACCESS POLICY to system;Grant succeeded.
15. MGDSYS 스키마 제거 (조건부)
$ sqlplus "/ as sysdba" @?/md/admin/catnomgdidcode.sql
16. OLAP 분석 워크스페이스 Export (선택 사항)
먼저 OLAP 워크스페이스 목록을 조회합니다.
SQL> col owner format a15SQL> col aw_name format a15SQL> select OWNER, AW_NAME, PAGESPACES from dba_aws where owner != 'SYS' order by 1,2;
디렉터리 객체를 생성합니다.
SQL> create or replace directory AW_DIR as '/u01/oracle/patches/12c_db/backup/MGR_DIR';
각 워크스페이스(APPS.ODPCODE, APPS.XWDEVKIT, APPS.XWDEVKIT_BACKUP, FPA.FPAPJP)에 대해 다음 순서로 EIF 파일을 Export합니다.
SQL> exec dbms_aw.execute('aw attach [OWNER.AW_NAME] rw');SQL> exec dbms_aw.execute('allstat');SQL> exec dbms_aw.execute('export all to eif file ''AW_DIR/[AW_NAME].eif''');SQL> exec dbms_aw.execute('aw detach [OWNER.AW_NAME]');
Export가 완료되면 각 워크스페이스를 삭제합니다.
SQL> exec dbms_aw.execute('aw delete [OWNER.AW_NAME]');
32bit 데이터베이스에서 OLAP을 제거하고 INVALID 상태의 OLAP 관련 객체를 정리합니다. 반드시 $ORACLE_HOME/olap/admin 디렉터리에서 실행해야 내부적으로 호출하는 스크립트들을 찾을 수 있습니다.
@?/olap/admin/catnoamd.sql@?/olap/admin/olapidrp.plb@?/olap/admin/catnoaps.sql@?/olap/admin/catnoxoq.sql@?/rdbms/admin/utlrp.sql
남아있는 INVALID 객체는 수동으로 drop 합니다(OLAPIBOOTSTRAP/OLAPIHANDSHAKE 함수 및 PUBLIC 동의어, PA_OLAP_PVT 패키지 본문 등).
이후 단계는 업그레이드를 수행하는 대상 12c 64bit 데이터베이스에서 진행합니다.
64bit 버전의 Oracle을 설치하고 Oracle OLAP 옵션을 포함시킨 후, '/ as sysdba'로 접속하여 다음을 실행해 OLAP을 다시 추가합니다.
SQL> spool olap_install.logSQL> set echo onSQL> show userSQL> @?/olap/admin/olap.sql SYSAUX TEMP;SQL> spool off
아래 명령으로 Export했던 각 AW를 Import합니다. 모든 따옴표는 홑따옴표(single quote)이며, EIF 파일과 OWNER.AW_NAME 조합을 올바르게 지정해야 합니다.
SQL> create or replace directory AW_DIR as '/u01/oracle/patches/12c_db/backup/MGR_DIR';
각 워크스페이스마다 다음 순서로 Import합니다.
SQL> exec dbms_aw.execute('aw create [OWNER.AW_NAME]');SQL> exec dbms_aw.execute('import all from eif file ''AW_DIR/[AW_NAME].eif'' data dfns');SQL> exec dbms_aw.execute('update');SQL> commit;SQL> exec dbms_aw.execute('aw detach [OWNER.AW_NAME]');
17. XLA 패키지 Drop (선택 사항)
$ sqlplus apps/[APPS password]SQL> select distinct('drop package '||db.owner||'.'||db.object_name||';') from dba_objects db, xla_subledgers xl where db.object_type='PACKAGE BODY' and db.object_name like 'XLA%AAD%PKG' and substr(db.object_name,1,9) = 'XLA_'||LPAD(SUBSTR(TO_CHAR(ABS(xl.application_id)),1,5),5,'0') and db.object_name NOT IN ('XLA_AAD_HDR_ACCT_ATTRS_F_PKG','XLA_AMB_AAD_PKG') order by 1;SQL> @drop_xla_package.sql
18. 애플리케이션 데이터베이스 인스턴스 Export
$ expdp "'/ as sysdba'" parfile=[export parameter file name]
19. 소스 SYSTEM 스키마에서 권한 회수
SQL> revoke EXEMPT ACCESS POLICY from system;
20. Oracle Advanced Security TDE 테이블스페이스 암호화 활성화 (Oracle Wallet 방식)
$ORACLE_HOME/network/admin/<SID>_<HOST> 디렉터리의 sqlnet_ifile.ora에 다음 항목을 추가합니다. 형식 문제를 피하려면 한 줄로 입력해야 합니다.
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/u01/oracle/dbhome1/12.1.0.2/wallet)))
21. 대상 초기화 파라미터 파일 / 작업 디렉터리 생성
22. 대상 데이터베이스 데이터파일 실제 위치에 맞게 aucrdb.sql 수정
aucrdb.sql의 각 'CREATE TABLESPACE' 명령에 다음 구문을 추가합니다.
ENCRYPTION [USING '<enc. algorithm>'] DEFAULT STORAGE (ENCRYPT)
알고리즘 선택 가능 값: 3DES168, AES128(기본값), AES192, AES256
23. 수정된 aucrdb.sql을 두 개의 .sql 파일로 분리
첫 번째 파일은 CREATE DATABASE 문을, 두 번째 파일은 CREATE TABLESPACE 문을 포함하도록 분리합니다.
24. 대상 데이터베이스 인스턴스 생성
$ sqlplus /nologSQL> connect / as sysdba;SQL> spool aucrdb1.log;SQL> startup nomount;SQL> @aucrdb1.sqlSQL> spool off
25. 데이터베이스 생성 후 테이블스페이스 생성 전에 암호화 키 생성
Oracle Wallet 기반의 암호화 키 관리를 사용하는 경우:
SQL> alter system set encryption key identified by "<Strong_Password>";
26. 다음 스크립트로 암호화된 테이블스페이스 생성
SQL> spool aucrdb2.logSQL> @aucrdb2.sql << 암호화 구문이 포함되어 있는지 반드시 확인SQL> exit;
27. 대상 데이터베이스 인스턴스 재시작
shutdown immediatecp -pR wallet wallet.orig.dateorapki wallet create -wallet /u01/oracle/dbhome1/12.1.0.2/wallet -auto_login
Wallet 자동 로그인(auto-login)을 설정합니다.
startup mount
수동(manual) Wallet을 사용하는 경우에는 아래 명령이 필요합니다.
SQL> alter system set encryption wallet open identified by "<strong_password>";alter database open;
select * from v$encryption_wallet;
28. SYS/SYSTEM 스키마 구성용 DB 준비 스크립트를 대상 Oracle Home으로 복사
29. SYS 스키마 설정
$ sqlplus "/ as sysdba" @audb1210.sql
30. SYSTEM 스키마 설정
$ sqlplus system/[system password] @ausy1210.sql
31. Java Virtual Machine(JVM) 설치
$ sqlplus system/[system password] @aujv1210.sql
32. 기타 필수 컴포넌트 설치
sqlplus system/**** @aumsc1210.sql SYSAUX TEMP
33. 패치 포스트 설치 지침 수행
SQL> conn /as sysdbaSQL> startup upgradecd $ORACLE_HOME/OPatch[oracle@dbnode OPatch]$ ./datapatch –verboseSQL> shut immediateSQL> startupSQL> @?/rdbms/admin/utlrp.sql
34. CTXSYS 파라미터 설정 (조건부)
$ sqlplus "/ as sysdba"SQL> exec ctxsys.ctx_adm.set_parameter('file_access_role', 'public');
35. 자동 통계 수집 비활성화
$ sqlplus "/ as sysdba"SQL> alter system enable restricted session;SQL> @adstats.sqlSQL> alter system disable restricted session;SQL> exit;
36. 대상 데이터베이스 인스턴스 백업 (선택 사항)
37. Import 파라미터 파일 생성
SQL> show userUSER is "SYSTEM"SQL> create or replace directory dmpdir as '/u01/oracle/patches/12c_db/backup/expimp';
소스 서버와 대상 서버가 다른 경우 덤프 파일을 대상 서버로 복사합니다.
38. 애플리케이션 데이터베이스 인스턴스 Import
$ impdp "'/ as sysdba'" parfile=auimpdp.dat
39. OLAP 분석 워크스페이스 Import (조건부)
대상(12c) 관련 단계를 여기에서 수행합니다.
40. 대상 SYSTEM 스키마에서 권한 회수
SQL> revoke EXEMPT ACCESS POLICY from system;
41. Advanced Queue 초기화
$ sqlplus /nologSQL> connect / as sysdba;SQL> @auque2.sql
42. adgrants.sql 실행
$ sqlplus "/ as sysdba" @adgrants.sql APPS
43. CTXSYS에 Create Procedure 권한 부여
$ sqlplus apps/[APPS password] @adctxprv.sql \[SYSTEM password] CTXSYS
44. 새 데이터베이스 리스너 시작 (조건부)
45. 현재 데이터베이스 서버 등록 해제(Deregister)
$ sqlplus apps/[APPS password]SQL> exec fnd_conc_clone.setup_clean;
46. AutoConfig 구현 및 실행
perl $AD_TOP/bin/admkappsutil.pl
appsutil.zip을 DB 노드의 $ORACLE_HOME으로 복사하고 압축을 해제합니다.
unzip -o appsutil.zip
$CONTEXT_FILE을 빌드합니다.
perl adbldxml.pl./adconfig.sh
DB와 리스너를 재시작하고 새 환경 파일을 소싱(source)합니다. 이후 앱 노드의 run 파일 시스템에서 AutoConfig를 실행합니다.
./adconfig.sh
앱 노드의 patch 파일 시스템에서도 AutoConfig를 실행합니다.
./adconfig.pl contextfile=$CONTEXT_FILE run=INSTE8
47. SYS 스키마 통계 수집
$ sqlplus "/ as sysdba"SQL> alter system enable restricted session;SQL> @adstats.sqlSQL> alter system disable restricted session;SQL> exit;
48. 커스텀 데이터베이스 링크 재생성 (조건부)
49. ConText 객체 생성
드라이버 파일을 사용하여 스크립트를 호출해야 객체가 생성됩니다.
$ perl $AU_TOP/patch/115/bin/dpost_imp.pl [driver file] [source database version]adop phase=apply hotpatch=yes
50. CTXSYS.DR$SQE 테이블 Populate
$ sqlplus apps/[apps password]SQL> exec icx_cat_sqe_pvt.sync_sqes_for_all_zones;
51. Invalid 객체 컴파일
52. XLA 패키지 재생성 (조건부)
소스 환경에서 XLA 패키지를 drop 했다면, $XLA_TOP/patch/115/sql/xla6128278.sql을 소스에서 대상으로 복사한 후 아래와 같이 실행합니다.
$ sqlplus apps/[APPS password]SQL> @xla6128278.sql [spool log file]
53. Run APPL_TOP에서 AutoConfig 실행
==> echo $FILE_EDITIONrun==> ./adconfig.sh
54. 업그레이드 후 WMS 패치 적용 (조건부)
12c 이전 RDBMS 버전에서 업그레이드한 경우 Patch 19007053을 적용합니다.
adop phase=apply patches=19007053 patchtop=/home/applmgr/exp_patch apply_mode=downtime workers=12
55. 애플리케이션 데이터베이스 객체 유지 관리
- AOL 테이블의 flexfield 데이터 컴파일
- APPS 스키마의 grant 및 synonym 재생성
56. 애플리케이션 서버 프로세스 시작
57. DQM 인덱스 생성
- "Trading Community Manager" 책임(Responsibility)으로 Oracle Applications에 로그인합니다.
- Control > Request > Run을 클릭합니다.
- "Single Request" 옵션을 선택합니다.
- "DQM Staging Program" 이름을 입력합니다.
- 다음 파라미터를 입력합니다.
- Number of Parallel Staging Workers: 4
- Staging Command: CREATE_INDEXES
- Continue Previous Execution: NO
- Index Creation: SERIAL - "Submit"을 클릭합니다.
결론
위의 모든 단계를 순서대로 수행하면 테이블스페이스 수준의 암호화(TDE)를 함께 활성화하면서 12c 데이터베이스 업그레이드를 성공적으로 완료할 수 있습니다. 특히 암호화 키 생성과 Wallet 설정은 테이블스페이스 생성 전후 타이밍이 중요하므로 각 단계의 순서를 반드시 준수해야 합니다.
궁금한 점이나 의견이 있다면 Feedback 탭을 통해 남겨 주세요. 언제든지 대화를 시작할 수 있습니다.