주:

Oracle Database 23ai로 Oracle True Cache Service 구현

소개

Oracle True Cache는 Oracle Database를 위한 인메모리, 일관성, 자동 관리형 SQL 및 키-값(객체 또는 JSON) 캐시입니다.

Oracle True Cache는 Oracle Database 앞의 인메모리 읽기 전용 캐시입니다. Oracle Active Data Guard와 마찬가지로 Oracle True Cache는 기본 데이터베이스의 읽기 전용 복제본으로, 대부분 디스크가 없는 복제본입니다.

모던 애플리케이션은 대개 다수의 연결과 빠르고 짧은 대기시간의 데이터 액세스를 필요로 합니다. 일반적으로 응용 프로그램은 갱신보다 많은 읽기를 수행하며 데이터베이스 성능에 영향을 주지 않고 캐시에서 읽을 수 있기 때문에 일반적으로 캐시를 데이터베이스 앞에 배치하는 것이 좋습니다. 예를 들어, 항공 예약 시스템은 사람들이 항공편을 쇼핑할 때 자주 데이터를 읽으며 데이터가 데이터베이스에 있는 데이터와 비교하여 최신 데이터가 아닌 경우 괜찮습니다. 다른 사람이 항공편을 예약할 때만 애플리케이션은 최신 데이터에 액세스하면 됩니다.

일반 캐시와 달리 Oracle True Cache는 가장 자주 액세스하는 데이터를 캐시에 자동으로 유지하고, 캐시를 기본 데이터베이스, 동일한 캐시의 다른 객체 및 기타 캐시와 일관되게 유지합니다. JSON을 포함한 모든 Oracle Database 객체 및 데이터 유형을 캐시합니다.

Oracle True Cache는 Oracle Database 보안 정책을 구현하기 때문에 캐시에 대한 액세스를 제어할 수 있습니다. 이를 통해 개인 개인 정보와 같은 중요한 데이터를 캐시에 저장하여 일반적으로 캐시하지 않을 수 있습니다.

환경 세부 정보:

목표

필요 조건

작업 1: 암호 파일 복사 및 TDE(Transparent Data Encryption) 전자 지갑(Wallet)

Password file과 선택적으로 primary database의 TDE 전자 지갑을 Oracle True Cache 노드로 복사합니다. 다음 방법 중 하나를 사용할 수 있습니다.

작업 2: Oracle True Cache 노드에서 불필요한 데이터베이스 삭제

Oracle True Cache 노드에서 데이터베이스가 존재하고 필요하지 않은 경우 Oracle True Cache 호스트의 기존 데이터베이스를 삭제합니다.

sqlplus / as sysdba
SQL> shut immediate
SQL> startup mount restrict
SQL> drop database;

작업 3: True 캐시 호스트에서 Primary Database 접속 문자열 테스트

다음 명령을 실행하여 Oracle True Cache 호스트에서 기본 데이터베이스 접속 문자열을 테스트합니다.

sqlplus sys/<sys_password>@<primary_database_hostname>:1521/<primary_database_service>  as sysdba

작업 4: Oracle True Cache 구성 및 시작

Oracle True Cache 노드에서 -createTrueCache 명령을 실행하여 Oracle True Cache 구성을 완료하고 Oracle True Cache를 시작합니다.

$ORACLE_HOME/bin/dbca -createTrueCache -gdbName true_cache_global_name -sid true_cache_sid -sourceDBConnectionString primary_db_easy_connect_string -trueCacheBlobFromSourceDB true_cache_config_blob_path -sgaTargetInMB sga_memory_size -pgaAggregateTargetInMB pga_memory_size -tdeWalletLoginType AUTO_LOGIN -listeners listener_name -silent

출력 예:

[oracle@test1 ~]$ $ORACLE_HOME/bin/dbca -createTrueCache -gdbName test1 -sid test1 -sourceDBConnectionString proddb.sub12101216100.dbnet.oraclevcn.com.:1521/DB1218_xts_iad.sub12101216100.dbnet.oraclevcn.com -trueCacheBlobFromSourceDB /home/oracle/blob_2024-12-18_12-47-36PM.tar.gz -sgaTargetInMB 25000 -pgaAggregateTargetInMB 12000 -initParams db_create_file_dest=/u02/app/oracle/oradata -listeners LISTENER -silent
Enter Remote DB SYS user password:

Enter password for the source database TDE wallet:

Session ID of the current execution is: 1
Log file location: /u01/app/oracle/cfgtoollogs/dbca/test1/trace.log_2024-12-18_01-01-33PM_61716
-----------------
Running Extract_password_file_from_blob_file job
Completed Extract_password_file_from_blob_file job
25% complete
-----------------
Running Create_static_listener job
Skipping. Job is detected as not applicable.
38% complete
-----------------
Running Register_listener job
Completed Register_listener job
50% complete
-----------------
Running Extract_tde_wallet_from_blob_file job
Completed Extract_tde_wallet_from_blob_file job
54% complete
-----------------
Running Setup_required_directories job
Skipping. Job is detected as not applicable.
57% complete
-----------------
Running Create_pfile job
Completed Create_pfile job
61% complete
-----------------
Running Start_nomount_instance job
Completed Start_nomount_instance job
64% complete
-----------------
Running Create_TDE_wallet job
Completed Create_TDE_wallet job
68% complete
-----------------
Running Create_truecache_instance job

Completed Create_truecache_instance job
71% complete
-----------------
Running Add_oratab_entry job
Completed Add_oratab_entry job
75% complete
-----------------
Running Reopen_wallet job
Completed Reopen_wallet job
100% complete
---------- PLUGIN NOTES ----------
Successfully created True Cache.
In order to complete the operation,configure the True Cache database application services from the primary database.
---------- END OF PLUGIN NOTES ----------
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/test1/test1.log" for further details.
[oracle@test1 ~]$

작업 5: Oracle True Cache용 PDB(플러그인할 수 있는 데이터베이스) 레벨 애플리케이션 서비스 생성 및 확인

Oracle True Cache 서비스와 함께 사용할 기본 데이터베이스(PDB 레벨) 애플리케이션 서비스를 생성 및 시작하고, 서비스가 실행 중인지 확인합니다.

단일 인스턴스 기본 데이터베이스의 경우 DBMS_SERVICE PL/SQL 패키지를 사용합니다. PDB와 관련된 서비스의 경우 DBMS_SERVICE를 사용하여 서비스를 시작하기 전에 특정 PDB에 접속하거나 세션에서 올바른 PDB 컨테이너를 설정하십시오.

출력 예:

alter session set container=<PDB_NAME>;
show pdbs
BEGIN
DBMS_SERVICE.CREATE_SERVICE('SALES', 'SALES');
DBMS_SERVICE.START_SERVICE('SALES');
END;
/
PL/SQL procedure successfully completed.

작업 6: Primary Database에 Oracle True Cache 구성

dbca -configureDatabase 명령을 -configureTrueCacheInstanceService 매개변수와 함께 실행하여 기본 데이터베이스에서 Oracle True Cache를 구성합니다. 이렇게 하면 기본 데이터베이스에서 Oracle True Cache 데이터베이스 애플리케이션 서비스가 구성되고 Oracle True Cache에서 Oracle True Cache 서비스가 시작됩니다.

각 Oracle True Cache 데이터베이스 애플리케이션 서비스에 대해 다음 명령을 실행합니다.

$ORACLE_HOME/bin/dbca -configureDatabase -configureTrueCacheInstanceService -sourceDB primary_db_sid_or_db_unique_name -trueCacheConnectString true_cache_easy_connect_string -trueCacheServiceName true_cache_service_name -serviceName primary_db_service_name -pdbName primary_pdb_name -silent

출력 예:

[oracle@proddb ~]$ $ORACLE_HOME/bin/dbca -configureDatabase -configureTrueCacheInstanceService -sourceDB DB1218 -trueCacheConnectString test1.sub12101216100.dbnet.oraclevcn.com:1521/test1.sub12101216100.dbnet.oraclevcn.com -trueCacheServiceName sales_tc1 -serviceName sales -pdbName DB1218_PDB1 -silent
Session ID of the current execution is: 7
Log file location: /u01/app/oracle/cfgtoollogs/dbca/DB1218/trace.log_2024-12-18_02-39-50PM_60536
-----------------
Running Initialization job
Enter SYS user password:

Completed Initialization job
33% complete
-----------------
Running Validate_true_cache_instance_connection job
Completed Validate_true_cache_instance_connection job
37% complete
-----------------
Running Validate_dataguard job
Skipping. Job is detected as not applicable.
41% complete
-----------------
Running Validate_db_version job
Completed Validate_db_version job
44% complete
-----------------
Running Validate_true_cache_instance job
Completed Validate_true_cache_instance job
48% complete
-----------------
Running Validate_archive_log_mode job
Completed Validate_archive_log_mode job
52% complete
-----------------
Running Validate_pdb job
Completed Validate_pdb job
56% complete
-----------------
Running Validate_primary_db_service job
Completed Validate_primary_db_service job
59% complete
-----------------
Running Validate_true_cache_db_service job
Completed Validate_true_cache_db_service job
63% complete
-----------------
Running Validate_true_cache_instance_open_mode job
Completed Validate_true_cache_instance_open_mode job
67% complete
-----------------
Running Create_truecache_service job
Completed Create_truecache_service job
73% complete
-----------------
Running Add_network_entry job
Completed Add_network_entry job
80% complete
-----------------
Running Modify_primary_service job
Completed Modify_primary_service job
87% complete
-----------------
Running Start_truecache_service job
Completed Start_truecache_service job
93% complete
-----------------
Running Enable_service_registration job
Completed Enable_service_registration job
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/DB1218/DB12183.log" for further details.
[oracle@proddb ~]$

작업 7: Oracle True Cache 노드에서 서비스 시작

다음 명령을 실행하여 Oracle True Cache 인스턴스 노드에서 서비스를 시작합니다.

alter session set container=<PDB_NAME>;
show pdbs
BEGIN
DBMS_SERVICE.START_SERVICE('sales_tc1');
END;
/

작업 8: Primary Database의 파라미터 갱신

  1. primary database listener.ora 파일에서 다음 파라미터를 갱신합니다.

    VALID_NODE_CHECKING_REGISTRATION_LISTENER = OFF
    REGISTRATION_INVITED_NODES_LISTENER=(<true_cache_instance_ip>)
    
  2. primary database 서버에서 리스너를 재시작하거나 재로드합니다.

작업 9: 기본 데이터베이스 리스너에서 Oracle True Cache 서비스 확인

다음 명령을 실행하여 Oracle True Cache(sales_tc) 서비스가 기본 데이터베이스 리스너 아래에서 실행 중인지 확인합니다.

SQL> select name,open_mode,database_role from gv$database;

NAME                           OPEN_MODE            DATABASE_ROLE
------------------------------ -------------------- ----------------
DB1218                         READ WRITE           PRIMARY
SQL> select * from v$true_cache;

MY_DG_ID REMOTE_DG_ID    DEST_ID TRUE_CACHE PRIMARY_NAME         STATUS     REMOTE_VERSION         CON_ID
---------- ------------ ---------- ---------- -------------------- ---------- ------------------ ----------
4079357444    576841986          2 test1      DB1218_xts_iad       HEALTHY    0.0.0.0.0                   0
4079357444   2149296628          3 test2      DB1218_xts_iad       HEALTHY    0.0.0.0.0                   0
SQL> SELECT name, true_cache_service FROM DBA_SERVICES WHERE name='sales';

NAME                           TRUE_CACHE_SERVICE
------------------------------ ------------------------------
sales                          sales_tc2

[oracle@proddb ~]$ lsnrctl status LISTENER|grep -i sales_tc1
Service "sales_tc1.sub12101216100.dbnet.oraclevcn.com" has 1 instance(s).
[oracle@proddb ~]$

작업 10: Oracle True Cache 인스턴스 노드의 True Cache 서비스 확인

다음 명령을 실행하여 Oracle True Cache(sales_tc) 서비스가 Oracle True Cache 인스턴스 노드에서 실행 중인지 확인합니다.

SQL> select name,open_mode,database_role from gv$database;

NAME      OPEN_MODE            DATABASE_ROLE
--------- -------------------- ----------------
DB1218    READ ONLY WITH APPLY TRUE CACHE
SQL> select * from v$true_cache;

MY_DG_ID REMOTE_DG_ID    DEST_ID TRUE_CACHE PRIMARY_NAME         STATUS     REMOTE_VERSION         CON_ID
---------- ------------ ---------- ---------- -------------------- ---------- ------------------ ----------
576841986   4079357444          0 test1      DB1218_xts_iad       HEALTHY    23.0.0.0.0                  0

[oracle@test1 ~]$ lsnrctl status LISTENER|grep sales_tc
Service "sales_tc1.sub12101216100.dbnet.oraclevcn.com" has 1 instance(s).
[oracle@test1 ~]$

작업 11: Oracle True Cache 서비스 테스트

다음 TNS(Transparent Network Substrate) 항목을 응용 프로그램에 추가합니다.

TEST_TC =
(DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = test1.sub12101216100.dbnet.oraclevcn.com)(PORT = 1521))
   (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = sales_tc1.sub12101216100.dbnet.oraclevcn.com)
   )
   )

sqlplus sys/<sys_password>@TEST_TC as sysdba
select name,open_mode,database_role from v$database;
show pdbs

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.