Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

TDE 테이블스페이스 암호화를 적용한 Oracle EBS 데이터베이스 12c 업그레이드 완벽 가이드

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 /nolog
SQL> 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 a15
SQL> col aw_name format a15
SQL> 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.log
SQL> set echo on
SQL> show user
SQL> @?/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 /nolog
SQL> connect / as sysdba;
SQL> spool aucrdb1.log;
SQL> startup nomount;
SQL> @aucrdb1.sql
SQL> spool off

25. 데이터베이스 생성 후 테이블스페이스 생성 전에 암호화 키 생성

Oracle Wallet 기반의 암호화 키 관리를 사용하는 경우:

SQL> alter system set encryption key identified by "<Strong_Password>";

26. 다음 스크립트로 암호화된 테이블스페이스 생성

SQL> spool aucrdb2.log
SQL> @aucrdb2.sql << 암호화 구문이 포함되어 있는지 반드시 확인
SQL> exit;

27. 대상 데이터베이스 인스턴스 재시작

shutdown immediate
cp -pR wallet wallet.orig.date
orapki 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 sysdba
SQL> startup upgrade
cd $ORACLE_HOME/OPatch
[oracle@dbnode OPatch]$ ./datapatch –verbose
SQL> shut immediate
SQL> startup
SQL> @?/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.sql
SQL> alter system disable restricted session;
SQL> exit;

36. 대상 데이터베이스 인스턴스 백업 (선택 사항)

37. Import 파라미터 파일 생성

SQL> show user
USER 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 /nolog
SQL> 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.sql
SQL> 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_EDITION
run
==> ./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 인덱스 생성

  1. "Trading Community Manager" 책임(Responsibility)으로 Oracle Applications에 로그인합니다.
  2. Control > Request > Run을 클릭합니다.
  3. "Single Request" 옵션을 선택합니다.
  4. "DQM Staging Program" 이름을 입력합니다.
  5. 다음 파라미터를 입력합니다.
    - Number of Parallel Staging Workers: 4
    - Staging Command: CREATE_INDEXES
    - Continue Previous Execution: NO
    - Index Creation: SERIAL
  6. "Submit"을 클릭합니다.

결론

위의 모든 단계를 순서대로 수행하면 테이블스페이스 수준의 암호화(TDE)를 함께 활성화하면서 12c 데이터베이스 업그레이드를 성공적으로 완료할 수 있습니다. 특히 암호화 키 생성과 Wallet 설정은 테이블스페이스 생성 전후 타이밍이 중요하므로 각 단계의 순서를 반드시 준수해야 합니다.

궁금한 점이나 의견이 있다면 Feedback 탭을 통해 남겨 주세요. 언제든지 대화를 시작할 수 있습니다.