2.3.3 True Cacheデータベース・アプリケーション・サービスの手動構成

JDBC ThinドライバでTrue Cacheを使用するには、キャッシュするプライマリ・データベース・アプリケーション・サービスごとに、対応するTrue Cacheデータベース・アプリケーション・サービスを作成します。

これにより、アプリケーションで、JDBC接続URLを変更することなく、既存のJDBC接続をプライマリ・データベースからTrue Cacheに切り替えることが容易になります。これを行うには、23ai JDBC Thinドライバを使用して、接続のReadOnlyパラメータをTRUEまたはFALSEに設定します。

2.3.3.1 プライマリ・データベースでのデータベース・アプリケーション・サービスの作成

1つのプライマリ・データベース・サービスを1つのTrue Cacheサービスに関連付けることができます。

プライマリ・データベースから、次のいずれかの方法を使用して、True Cacheサービスおよびプライマリ・データベース・サービスを作成または変更します。

True Cacheと単一インスタンス・プライマリ・データベース

True Cacheおよび単一インスタンスのプライマリ・データベースの場合、DBMS_SERVICE PL/SQLパッケージを使用します。プラガブル・データベース(PDB)に固有のサービスの場合、DBMS_SERVICEを使用してサービスを開始する前に、特定のPDBに接続するか、セッションで正しいPDBコンテナを設定します。

単一インスタンスのプライマリ・データベースのDBMS_SERVICEパッケージを使用して、次の2つのサービスを作成する例を次に示します:

DECLARE
    db_params dbms_service.svc_parameter_array;
BEGIN
   -- create a database application service for True Cache called SALES_TC using SALES_TC tnsname
   DBMS_SERVICE.CREATE_SERVICE('SALES_TC', 'SALES_TC', db_params);

   -- create a database application service SALES for primary database using SALES tnsname and associate it to the SALES_TC service name using TRUE_CACHE_SERVICE attribute
   db_params('true_cache_service') := 'SALES_TC';
   DBMS_SERVICE.CREATE_SERVICE('SALES', 'SALES', db_params);

   -- or, modify an already existing primary database application service called SALES to associate it to the SALES_TC service name using the TRUE_CACHE_SERVICE attribute
   db_params('true_cache_service') := 'SALES_TC';
   DBMS_SERVICE.MODIFY_SERVICE('SALES', db_params);

END;

Oracle RACプライマリ・データベース

Oracle RACプライマリ・データベースの場合は、srvctlコマンドライン・ユーティリティを使用してサービスを追加します。プライマリ・インスタンスでそのサービスを起動します。Oracle Clusterware管理のインスタンスの場合のみ、srvctlを使用します。

True Cacheサービスとプライマリ・データベース・サービスの両方を作成するには:

srvctl add service -db primary_db_unique_name -service true_cache_service_name -preferred primary_db_instance_list -pdb primary_pdb_name
srvctl add service -db primary_db_unique_name -service primary_db_service_name -preferred primary_db_instance_list -pdb primary_pdb_name -true_cache_service true_cache_service_name

例:

srvctl add service -db primdb1i -service sales_tc -preferred primdb1i1,primdb1i2 -pdb sales_pdb
srvctl add service -db primdb1i -service sales -preferred primdb1i1,primdb1i2 -pdb sales_pdb -true_cache_service sales_tc

既存のプライマリ・データベース・サービス(db_service_name)に対してTrue Cacheサービスを作成するには:

srvctl add service -db primary_db_unique_name -service true_cache_service_name -preferred primary_db_instance_list -pdb primary_pdb_name
srvctl modify service -db primary_db_unique_name -service primary_db_service_name -true_cache_service true_cache_service_name

例:

srvctl add service -db primdb1i -service sales_tc -preferred primdb1i1,primdb1i2 -pdb sales_pdb
srvctl modify service -db primdb1i -service sales -true_cache_service sales_tc

ノート:

また、プライマリ・データベース・サービスの停止時や再起動時にエラーが発生しないように、True Cacheサービスをその追加先のクラスタで無効にします。例:

srvctl start service -d primdb1i -s sales_tc
srvctl stop service -d primdb1i -s sales_tc
srvctl disable service -d primdb1i -s sales_tc

これによってスタンバイ・データベースやTrue Cacheが影響を受けることはありません。これは、True Cacheサービスが無効になっているクラスタの外部でそれらが実行されるためです。無効ステータスは、プライマリ・ディクショナリおよびDBA_SERVICESには格納されず、Cluster Ready Services (CRS)にのみ格納され、True Cacheサービスが追加されているクラスタにのみ格納されます。クラスタ外部のその他のデータベースは、DBMS_SERVICE.START_SERVICEを使用してそのサービスを開始でき、この設定による影響を受けません。

2.3.3.2 データベース・アプリケーション・サービスが作成されたことの確認

プライマリ・データベースでサービスを作成すると、True Cacheはそれらの定義を自動的に継承します。SQL*Plusを使用して、プライマリ・データベースとTrue Cacheの両方で同じ結果が表示されることを確認します。

例:

connect / as SYSDBA
SELECT name, true_cache_service FROM DBA_SERVICES WHERE name='SALES' or name='SALES_TC';

NAME        TRUE_CACHE_SERVICE
--------    ------------------
SALES_TC
SALES       SALES_TC

2.3.3.3 データベース・アプリケーション・サービスの起動

SQL*Plusを使用して、プライマリ・データベースとTrue Cacheの両方でデータベース・アプリケーション・サービスを起動します。

例2-1 True Cache

connect / as SYSDBA
SELECT database_role FROM v$database;

DATABASE_ROLE
-------------
TRUE CACHE
EXEC DBMS_SERVICE.START_SERVICE('SALES_TC');
SELECT service_id, name FROM v$active_services WHERE name='SALES_TC';

SERVICE_ID  NAME
----------  ---------
        28  SALES_TC

例2-2 プライマリ・データベース

connect / as SYSDBA
SELECT database_role FROM v$database;

DATABASE_ROLE
-------------
PRIMARY
EXEC DBMS_SERVICE.START_SERVICE('SALES');
SELECT service_id, name, true_cache_service FROM v$active_services WHERE name='SALES';

SERVICE_ID   NAME    TRUE_CACHE_SERVICE
----------   ------  ----------------
        29   SALES   SALES_TC