この付録では、Kubernetes環境でTimesTen Cacheを使用するための実際の例を示します。この例は、本番目的には使用しないでください。これは、テスト環境を想定したものです。Oracle Databaseは、目的の環境に固有の設定でカスタマイズする必要があります。
トピック:
次の各項では、Oracle Databaseで実行する必要があるタスクについて説明します。
TimesTen Cacheを使用するには、まず、次のユーザーをOracle Databaseで作成しておく必要があります。
キャッシュ管理ユーザー。このユーザーは、キャッシュ環境に関する情報を格納するOracle Databaseオブジェクトを作成およびメンテナンスします。このユーザーは、キャッシュ・グループ・タイプの事前定義済動作も実施します。
TimesTenデータベースにキャッシュされるOracle Database表を所有する1人または複数のスキーマ・ユーザー。
詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のOracle Databaseユーザーの作成に関する項を参照してください。
この例では、Oracle Databaseにcacheuser2キャッシュ管理ユーザーとorattスキーマ・ユーザーを作成します。
Oracle Databaseにアクセスできるシェルを作成し、SQL*Plusを使用してsysユーザーとしてOracle Databaseに接続します。その次に、TimesTen Cache管理オブジェクトを格納するデフォルトの表領域を作成します。詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のOracle Databaseユーザーの作成に関する項を参照してください。
この例では、cachetablespace2表領域を作成します。
% sqlplus sys/syspwd@oracache as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Fri Oct 23 22:10:20 2020 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> CREATE TABLESPACE cachetablespace2 DATAFILE 'datatt2.dbf' SIZE 100M; Tablespace created.
SQL*Plusを使用してスキーマ・ユーザーを作成します。このスキーマ・ユーザーには、TimesTenデータベースにキャッシュされるOracle Databaseの表を作成するために必要な最小限の権限セットを付与します。
この例では、orattスキーマ・ユーザーを作成します。
SQL> CREATE USER oratt IDENTIFIED BY oraclepwd; User created. SQL> GRANT CREATE SESSION, RESOURCE TO oratt; Grant succeeded.
SQL*Plusを使用してキャッシュ管理ユーザーを作成します。このユーザーにcachetablespace2表領域を割り当てます。このOracleキャッシュ管理ユーザーと同じ名前をcacheUserメタデータ・ファイルで使用することになります。cacheUserメタデータ・ファイルの詳細は、「cacheUser」および「メタデータ・ファイルとKubernetes機能の作成」を参照してください。
この例では、cacheuser2ユーザーを作成します。
SQL> CREATE USER cacheuser2 IDENTIFIED BY oraclepwd 
       DEFAULT TABLESPACE cachetablespace2 
       QUOTA UNLIMITED ON cachetablespace2;
 
User created.
SQL> commit;
 
Commit complete.
SQL> exit
キャッシュ管理ユーザーには、TimesTenデータベースに作成するキャッシュ・グループ・タイプと、それらのキャッシュ・グループに対して実行される操作に応じて、特定の権限セットを付与する必要があります。TimesTenには、Oracle Databaseで実行できるgrantCacheAdminPrivileges.sql SQL*Plusスクリプトが用意されています。これを使用すると、キャッシュ操作の実行に必要な最小限の権限をキャッシュ管理ユーザーに付与できます。こうした権限の詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のOracleデータベース・ユーザーへの権限の付与に関する項およびキャッシュ管理ユーザーおよびキャッシュ・マネージャ・ユーザーに必要な権限に関する項を参照してください。
次のステップに従って、grantCacheAdminPrivileges.sqlスクリプトを実行します。
Oracle Databaseにアクセスできるシェルを作成して、任意のディレクトリから空のサブディレクトリを作成します。この例では、oraclescriptsサブディレクトリを作成します。
% mkdir -p oraclescripts
Linux開発ホストからkubectl cpコマンドを使用して、Linux開発ホストのinstallation_dir/oraclescriptsディレクトリにあるgrantCacheAdminPrivileges.sqlスクリプトを前の手順で作成したoraclescriptsディレクトリにコピーします。installation_dirディレクトリは、TimesTenディストリビューションの解凍時に作成されたものです。TimesTenディストリビューションの解凍手順の詳細は、「TimesTenおよびTimesTenオペレータのダウンロード」を参照してください。
% cp /installation_dir/oraclescripts/grantCacheAdminPrivileges.sql 
database-oracle:oraclescripts/grantCacheAdminPrivileges.sql
シェルから、このスクリプトがoraclescriptsディレクトリに配置されていることを確認します。
% ls oraclescripts grantCacheAdminPrivileges.sql
SQL*Plusを使用して、sysユーザーとしてOracle Databaseに接続します。その次に、oraclescripts/grantCacheAdminPrivileges.sqlスクリプトを実行します。このスクリプトでは、cacheuser2キャッシュ管理ユーザーにキャッシュ・グループの操作を実行するために必要な最小限の権限を付与します。詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のOracle Databaseユーザーへの権限の付与に関する項を参照してください。
% sqlplus sys/syspwd@oracache as sysdba
 
SQL*Plus: Release 12.1.0.2.0 Production on Fri Oct 23 22:10:20 2020
 
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing 
options
SQL> @grantCacheAdminPrivileges "cacheuser2";
 
Please enter the administrator user id
The value chosen for administrator user id is cacheuser2
 
TT_CACHE_ADMIN_ROLE role already exists
***************** Initialization for cache admin begins ******************
0. Granting the CREATE SESSION privilege to CACHEUSER2
1. Granting the TT_CACHE_ADMIN_ROLE to CACHEUSER2
2. Granting the DBMS_LOCK package privilege to CACHEUSER2
3. Granting the DBMS_DDL package privilege to CACHEUSER2
4. Granting the DBMS_FLASHBACK package privilege to CACHEUSER2
5. Granting the CREATE SEQUENCE privilege to CACHEUSER2
6. Granting the CREATE CLUSTER privilege to CACHEUSER2
7. Granting the CREATE OPERATOR privilege to CACHEUSER2
8. Granting the CREATE INDEXTYPE privilege to CACHEUSER2
9. Granting the CREATE TABLE privilege to CACHEUSER2
10. Granting the CREATE PROCEDURE  privilege to CACHEUSER2
11. Granting the CREATE ANY TRIGGER  privilege to CACHEUSER2
12. Granting the GRANT UNLIMITED TABLESPACE privilege to CACHEUSER2
13. Granting the DBMS_LOB package privilege to CACHEUSER2
14. Granting the SELECT on SYS.ALL_OBJECTS privilege to CACHEUSER2
15. Granting the SELECT on SYS.ALL_SYNONYMS privilege to CACHEUSER2
16. Checking if the cache administrator user has permissions on the 
    default tablespace
    Permission exists
18. Granting the CREATE TYPE privilege to CACHEUSER2
19. Granting the SELECT on SYS.GV$LOCK privilege to CACHEUSER2
20. Granting the SELECT on SYS.GV$SESSION privilege  to CACHEUSER2
21. Granting the SELECT on SYS.DBA_DATA_FILES privilege  to CACHEUSER2
22. Granting the SELECT on SYS.USER_USERS privilege  to CACHEUSER2
23. Granting the SELECT on SYS.USER_FREE_SPACE privilege  to CACHEUSER2
24. Granting the SELECT on SYS.USER_TS_QUOTAS privilege  to CACHEUSER2
25. Granting the SELECT on SYS.USER_SYS_PRIVS privilege  to CACHEUSER2
26. Granting the SELECT on SYS.V$DATABASE privilege  to CACHEUSER2 (optional)
27. Granting the SELECT ANY TRANSACTION privilege to CACHEUSER2
********* Initialization for cache admin user done successfully *********
grantCacheAdminPrivileges.sqlスクリプトをOracle Databaseで正常に実行しました。
この例では、orattユーザー・スキーマに2つの表を作成します。このユーザーの詳細は、「Oracle Databaseユーザーの作成」を参照してください。
readtab: この表は、読取り専用キャッシュ・グループにキャッシュされることになります。
writetab: この表は、AWTキャッシュ・グループにキャッシュされることになります。
Oracle Databaseにアクセスできるシェルを作成し、SQL*Plusを使用してsysユーザーとしてOracle Databaseに接続します。その次に、oratt.readtab表とoratt.writetab表を作成します。
% sqlplus sys/syspwd@oracache as sysdba
 
SQL*Plus: Release 12.1.0.2.0 Production on Fri Oct 23 22:10:20 2020
 
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing 
options
SQL> CREATE TABLE oratt.readtab (keyval NUMBER NOT NULL PRIMARY KEY, 
       str VARCHAR2(32));
 
Table created.
SQL> CREATE TABLE oratt.writetab (pk NUMBER NOT NULL PRIMARY KEY, 
       attr VARCHAR2(40));
 
Table created.
SQL*Plusを使用して、oratt.readtab表とoratt.writetab表に行を挿入します。その次に、行が挿入されていることを確認します。
SQL> INSERT INTO oratt.readtab VALUES (1,'Hello'); 1 row created. SQL> INSERT INTO oratt.readtab VALUES (2,'World'); 1 row created. SQL> INSERT INTO oratt.writetab VALUES (100, 'TimesTen'); 1 row created. SQL> INSERT INTO oratt.writetab VALUES (101, 'Cache'); 1 row created. SQL> commit; Commit complete.
行が表に挿入されていることを確認します。
SQL> SELECT * FROM oratt.readtab;
 
    KEYVAL STR
---------- --------------------------------
         1 Hello
         2 World
 
SQL>  SELECT * FROM oratt.writetab;
 
        PK ATTR
---------- ----------------------------------------
       100 TimesTen
       101 Cache
SQL*Plusを使用して、oratt.readtab表に対するSELECT権限と、oratt.writetab表に対するSELECT、INSERT、UPDATEおよびDELETEの各権限をキャッシュ管理ユーザー(この例ではcacheuser2)に付与します。
SQL> GRANT SELECT ON oratt.readtab TO cacheuser2; Grant succeeded. SQL> GRANT SELECT ON oratt.writetab TO cacheuser2; Grant succeeded. SQL> GRANT INSERT ON oratt.writetab TO cacheuser2; Grant succeeded. SQL> GRANT UPDATE ON oratt.writetab TO cacheuser2; Grant succeeded. SQL> GRANT DELETE ON oratt.writetab TO cacheuser2; Grant succeeded.
SQL*Plusを使用して、nls_database_parametersシステム・ビューを問い合せて、Oracle Databaseのデータベース文字セットを確認します。Oracle Databaseのデータベース文字セットは、TimesTenのデータベース文字セットと一致している必要があります。(TimesTenのデータベース文字セットは、この後で設定します。詳細は、「メタデータ・ファイルとKubernetes機能の作成」を参照してください)。
この例では、問合せによってAL32UTF8データベース文字セットが返されます。
SQL> SELECT value FROM nls_database_parameters WHERE 
       parameter='NLS_CHARACTERSET';
 
VALUE
------------------------------------------------------------------------------
AL32UTF8
TimesTenキャッシュ・グループ表にキャッシュされるOracle Databaseの表が正常に作成されました。
TimesTen Cacheの使用に固有のメタデータ・ファイルがあります。
cacheUser: このファイルは必須です。このファイルのユーザーは、TimesTenデータベースで作成されたもので、キャッシュ・マネージャとしての役割を果たします。このユーザーの名前は、Oracle Databaseで作成したキャッシュ管理ユーザーの名前と一致する必要があります。Oracle Databaseのキャッシュ管理ユーザーの詳細は、「Oracle Databaseユーザーの作成」を参照してください。また、cacheUserメタデータ・ファイルの詳細は、「cacheUser」を参照してください。
cachegroups.sql: このファイルは必須です。このファイルの内容は、CREATE CACHE GROUPの定義です。このファイルには、LOAD CACHE GROUP文と、キャッシュ・グループ表(ttOptEstimateStatsやttOptUpdateStatsなど)の統計を更新する組込みプロシージャを含めることもできます。このファイルの詳細は、「cachegroups.sql」を参照してください。
tnsnames.ora: このファイルは必須です。アプリケーションが接続するOracle Net Servicesを定義します。TimesTen Cacheの場合は、このファイルでTimesTenとOracle Database (データのキャッシュ元)の間の接続を構成します。このコンテキストでは、TimesTenがOracle Databaseに接続するアプリケーションです。このファイルの詳細は、「tnsnames.oraファイル」を参照してください。
sqlnet.ora: このファイルは場合応じて必須になります。Oracle Databaseの構成に応じて必要になることがあります。このファイルでは、クライアント・アプリケーションがOracle Databaseと通信する方法のオプションを定義します。このコンテキストでは、TimesTenがアプリケーションです。tnsnames.oraとsqlnet.oraの両方のファイルで、アプリケーションがOracle Databaseと通信する方法を定義します。このファイルの詳細は、「sqlnet.oraファイル」を参照してください。
db.ini: TimesTen Cacheを使用する場合、このファイルは必須です。このファイルの内容には、TimesTenデータベースのTimesTen接続属性が含まれます。その内容は、TimesTenのsys.odbc.iniファイルに含めることになります。TimesTen Cacheについては、接続属性のOracleNetServiceNameとDatabaseCharacterSetを指定する必要があります。DatabaseCharacterSet接続属性は、Oracleデータベース文字セットと一致する必要があります。このファイルの詳細は、「db.iniファイル」を参照してください。
schema.sql: このファイルの内容には、表、順序、ユーザーなどのデータベース・オブジェクトが含まれます。インスタンス管理者は、ttIsqlユーティリティを使用して、このファイルをデータベースの作成直後に実行します。このファイルはオペレータがTimesTen Cacheまたはレプリケーションを構成する前に実行されるため、このファイルにキャッシュ定義が含まれていないことを確認してください。
TimesTen Cacheでは、1人または複数のキャッシュ表ユーザーがキャッシュ表を所有します。このキャッシュ表ユーザーがキャッシュ・マネージャ・ユーザーでない場合は、schema.sqlファイルを指定する必要があります。さらに、このファイルにスキーマ・ユーザーを含めて、そのスキーマ・ユーザーに適切な権限を割り当てることも必要です。たとえば、Oracle Databaseでorattスキーマ・ユーザーが作成されていたときに、このユーザーがTimesTenキャッシュ・マネージャ・ユーザーでない場合は、このファイルにTimesTen orattユーザーを作成する必要があります。Oracle Databaseのスキーマ・ユーザーの詳細は、「Oracle Databaseユーザーの作成」を参照してください。また、schema.sqlファイルの詳細は、「schema.sqlファイル」を参照してください。
さらに、サポートされている次のメタデータ・ファイルも使用できます。
adminUser: このファイル内のユーザーは、TimesTenデータベースに作成されて、ADMIN権限を付与されます。このファイルの詳細は、「adminUserファイル」を参照してください。
epilog.sql: このファイルの内容には、オペレータがレプリケーションを構成した後に実行する必要がある操作が含まれます。たとえば、XLAを使用する場合は、このファイルでXLA用のレプリケートされたブックマークを作成できます。このファイルは、キャッシュとレプリケーションの構成後に実行されます。このファイルの詳細は、「epilog.sql」を参照してください。
これらのメタデータ・ファイルは、Kubernetesの1つ以上の機能(たとえば、Kubernetes Secret、ConfigMapまたは初期化コンテナ)に含めることができます。これにより、メタデータ・ファイルがTimesTenコンテナの/ttconfigディレクトリに確実に移入されます。この/ttconfigディレクトリにメタデータ・ファイルを配置する方法についての要件はありません。詳細は、「/ttconfigディレクトリの移入」を参照してください。
この例では、ConfigMap機能を使用して、TimesTenコンテナに/ttconfigディレクトリを移入します。この例では、メタデータ・ファイルのadminUser、db.ini、schema.sql、cacheUser、cachegroups.sql、tnsnames.oraおよびsqlnet.oraを使用します。
Linux開発ホストで、次のことを実行します。
選択したディレクトリから、メタデータ・ファイル用に空のサブディレクトリを作成します。この例では、cm_cachetestサブディレクトリを作成します。(今後、この例では、このディレクトリを表す場合にcm_cachetestディレクトリを使用します)。
% mkdir -p cm_cachetest
ConfigMapディレクトリに移動します。
% cd cm_cachetest
このConfigMapディレクトリ(この例ではcm_cachetest)にadminUserファイルを作成します。このadminUserファイルで、tigerパスワードを使用してscottユーザーを作成します。
vi adminUser
scott/tiger
このConfigMapディレクトリ(この例ではcm_cachetest)にdb.iniファイルを作成します。このdb.iniファイルでは、接続属性のPermSize、DatabaseCharacterSetおよびOracleNetServiceNameを定義します。DatabaseCharacterSet値は、Oracle Databaseのデータベース文字セット値と一致している必要があります。nls_database_parametersシステム・ビューを問い合せてOracle Databaseのデータベース文字セットを確認する方法の詳細は、「キャッシュされるOracle Database表の作成」を参照してください。この例では、値はAL32UTF8です。
vi db.ini
PermSize=200 DatabaseCharacterSet=AL32UTF8 OracleNetServiceName=Oracache
このConfigMapディレクトリ(この例ではcm_cachetest)にschema.sqlファイルを作成します。この例では、orattユーザーを作成します。このユーザーは以前にOracle Databaseで作成されたものです。Oracle Databaseのorattユーザーの詳細は、「Oracle Databaseユーザーの作成」を参照してください。
vi schema.sql create user oratt identified by ttpwd; grant admin to oratt;
このConfigMapディレクトリ(この例ではcm_cachetest)にcacheUserメタデータ・ファイルを作成します。cacheUserファイルには、cacheuser/ttpassword/orapasswordという形式の1つの行を含める必要があります。cacheuserは、TimesTenデータベースでキャッシュ・マネージャとして指定するユーザーです。ttpasswordは、このユーザーに割り当てるTimesTenパスワードです。また、orapasswordは、すでにOracle Databaseキャッシュ管理ユーザーに割り当てられているOracle Databaseパスワードです。このファイル内のcacheUser名は、前に作成したOracle Databaseキャッシュ管理ユーザーと一致している必要がある点に注意してください。Oracle Databaseキャッシュ管理ユーザーの詳細は、「Oracle Databaseユーザーの作成」を参照してください。
この例では、パスワードがoraclepwdのcacheuser2ユーザーが、すでにOracle Databaseに作成されています。そのため、TimesTenキャッシュ・マネージャ・ユーザーとしてcacheuser2を指定します。このTimesTenキャッシュ・マネージャ・ユーザーには、任意のTimesTenパスワードを割り当てることができます。この例では、ttpwdを割り当てます。
vi cacheuser cacheuser2/ttpwd/oraclepwd
このConfigMapディレクトリ(この例ではcm_cachetest)にcachegroups.sqlメタデータ・ファイルを作成します。cachegroups.sqlファイルには、キャッシュ・グループ定義が含まれています。この例では、動的AWTキャッシュ・グループと読取り専用キャッシュ・グループが作成されます。また、LOAD CACHE GROUP文も含まれています。この文は、Oracle Databaseのoratt.readtabキャッシュ表からTimesTenデータベースのoratt.readtabキャッシュ表に行をロードするためのものです。
vi cachegroups.sql CREATE DYNAMIC ASYNCHRONOUS WRITETHROUGH CACHE GROUP writecache FROM oratt.writetab ( pk NUMBER NOT NULL PRIMARY KEY, attr VARCHAR2(40) ); CREATE READONLY CACHE GROUP readcache AUTOREFRESH INTERVAL 5 SECONDS FROM oratt.readtab ( keyval NUMBER NOT NULL PRIMARY KEY, str VARCHAR2(32) ); LOAD CACHE GROUP readcache COMMIT EVERY 256 ROWS;
このConfigMapディレクトリ(この例ではcm_cachetest)にtnsnames.oraメタデータ・ファイルを作成します。
vi tnsnames.ora
OraTest =   
 (DESCRIPTION = 
   (ADDRESS = (PROTOCOL = TCP)(HOST = database.myhost.svc.cluster.local)
     (PORT = 1521))     
   (CONNECT_DATA =       
     (SERVER = DEDICATED)       
     (SERVICE_NAME = OraTest.my.domain.com)))
OraCache =  
 (DESCRIPTION =   
   (ADDRESS = (PROTOCOL = TCP)(HOST = database.myhost.svc.cluster.local)
     (PORT = 1521))     
   (CONNECT_DATA =       
     (SERVER = DEDICATED)       
     (SERVICE_NAME = OraCache.my.domain.com)))
このConfigMapディレクトリ(この例ではcm_cachetest)にsqlnet.oraメタデータ・ファイルを作成します。
vi sqlnet.ora
NAME.DIRECTORY_PATH= {TNSNAMES, EZCONNECT, HOSTNAME}
SQLNET.EXPIRE_TIME = 10
SSL_VERSION = 1.2
Linuxのlsコマンドを使用して、メタデータ・ファイルがConfigMapディレクトリ(この例ではcm_cachetest)内にあることを確認します。
% ls adminUser cacheUser schema.sql tnsnames.ora cachegroups.sql db.ini sqlnet.ora
ConfigMapを作成します。cm_cachetestディレクトリ内のファイルは、ConfigMapに含めておくことで、TimesTenコンテナで使用できるようにします。
この例では次のとおりです。
ConfigMapの名前はcachetestです。cachetestは適宜の名前に置き換えます(この例では、cachetestを太字で表示しています)。
この例では、ConfigMapにコピーするファイルが存在しているディレクトリとしてcm_cachetestを使用しています。別のディレクトリを使用する場合、cm_cachetestは目的のディレクトリの名前に置き換えます(この例では、cm_cachetestを太字で表示しています)。
kubectl createコマンドを使用して、ConfigMapを作成します。
% kubectl create configmap cachetest --from-file=cm_cachetest configmap/cachetest created
kubectl describeコマンドを使用して、ConfigMap (この例ではcachetest)の内容を確認します。メタデータ・ファイルは太字で表示しています。
% kubectl describe configmap cachetest; Name: cachetest Namespace: mynamespace Labels: <none> Annotations: <none> Data ==== tnsnames.ora: ---- OraTest = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = database.myhost.svc.cluster.local) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = OraTest.my.domain.com))) OraCache = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = database.myhost.svc.cluster.local) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = OraCache.my.domain.com))) adminUser: ---- scott/tiger cacheUser: ---- cacheuser2/ttpwd/oraclepwd cachegroups.sql: ---- CREATE DYNAMIC ASYNCHRONOUS WRITETHROUGH CACHE GROUP writecache FROM oratt.writetab ( pk NUMBER NOT NULL PRIMARY KEY, attr VARCHAR2(40) ); CREATE READONLY CACHE GROUP readcache AUTOREFRESH INTERVAL 5 SECONDS FROM oratt.readtab ( keyval NUMBER NOT NULL PRIMARY KEY, str VARCHAR2(32) ); LOAD CACHE GROUP readcache COMMIT EVERY 256 ROWS; db.ini: ---- permSize=200 databaseCharacterSet=AL32UTF8 oracleNetServiceName=Oracache schema.sql: ---- create user oratt identified by ttpwd; grant admin to oratt; sqlnet.ora: ---- NAME.DIRECTORY_PATH= {TNSNAMES, EZCONNECT, HOSTNAME} SQLNET.EXPIRE_TIME = 10 SSL_VERSION = 1.2 Events: <none>
cachetest ConfigMapの作成とデプロイが完了しました。
この項では、TimesTenClassicオブジェクトを作成します。TimesTenClassicオブジェクトの詳細は、TimesTenClassicオブジェクトの定義および作成およびTimesTenClassicオブジェクト・タイプを参照してください。
次のステップを実行します。
空のYAMLファイルを作成します。任意の名前を選択できますが、TimesTenClassicオブジェクトに使用した名前と同じ名前を使用することもできます。(この例では、cachetest)。YAMLファイルには、TimesTenClassicオブジェクトの定義が格納されています。このYAMLファイルで指定する必要があるフィールド、およびオプションのフィールドの詳細は、TimesTenClassicSpecSpecを参照してください。
この例では、次のフィールドに注目してください。
name: cachetestはTimesTenClassicオブジェクト(太字で表示)の名前に置き換えます。
storageClassName: ociを、TimesTenを保持するためのPersistentVolumesの割当てに使用される記憶域クラスの名前に置き換えます。
storageSize: 250Gを、各ポッドがTimesTenを保持するために要求する必要がある記憶域の量に置き換えます。ノート: この例では、本番環境を想定していることから、storageSizeには250Gの値を使用しています。デモ用の場合は、50Gの値で対応できます。
image: phx.ocir.io/youraccount/tt1814110:3は、イメージ・レジストリの場所(phx.ocir.io/youraccount)とTimesTenが含まれているイメージ(tt1814110:3)に置き換えます。
imagePullSecret: sekretを、KubernetesがTimesTenイメージをフェッチするために使用するイメージ・プル・シークレットに置き換えます。
dbConfigMap: この例では、メタデータ・ファイル(太字で表示)に1つのConfigMap (cachetest)を使用しています。
% vi cachetest.yaml apiVersion: timesten.oracle.com/v1 kind: TimesTenClassic metadata: name: cachetest spec: ttspec: storageClassName: oci storageSize: 250G image: phx.ocir.io/youraccount/tt1814110:3 imagePullSecret: sekret imagePullPolicy: Always dbConfigMap: - cachetest
kubectl createコマンドを使用して、YAMLファイル(この例ではcachetest.yaml)の内容からTimesTenClassicオブジェクトを作成します。これにより、KubernetesクラスタにあるTimesTenデータベースのアクティブ・スタンバイ・ペアをデプロイするプロセスが開始されます。
% kubectl create -f cachetest.yaml timestenclassic.timesten.oracle.com/cachetest created
KubernetesクラスタにTimesTenClassicオブジェクトを正常に作成しました。TimesTenデータベースをデプロイするプロセスが開始されますが、まだ完了していません。
kubectl getコマンドとkubectl describeコマンドを使用して、プロビジョニング時にアクティブ・スタンバイ・ペアの進捗状況を監視します。
kubectl getコマンドを使用して、STATEフィールドを確認します。値がInitializingであることを確認します。アクティブ・スタンバイ・ペアのプロビジョニングが開始しましたが、まだ完了していません。
% kubectl get ttc cachetest NAME STATE ACTIVE AGE cachetest Initializing None 41s
kubectl getコマンドを再度使用して、STATEフィールドの値が変更されているかどうかを確認します。この例では、この値はNormalで、データベースのアクティブ・スタンバイ・ペアがプロビジョニングされ、プロセスが完了したことを示しています。
% kubectl get ttc cachetest NAME STATE ACTIVE AGE cachetest Normal cachetest-0 3m58s
kubectl describeコマンドを使用して、アクティブ・スタンバイ・ペアのプロビジョニングを詳細に表示します。
次の点に注目してください。
cachetest Configmapは、dbConfigMapフィールドで正しく参照されています(太字で表示)。
キャッシュ・エージェントはアクティブ・ポッドとスタンバイ・ポッド(太字で表示)で実行されています。
キャッシュ管理ユーザーのUIDとパスワードは、アクティブ・ポッドとスタンバイ・ポッド(太字で表示)で設定されています。
アクティブ・ポッドとスタンバイ・ポッド(太字で表示)に2つのキャッシュ・グループが作成されています。
レプリケーション・エージェントは、アクティブ・ポッドとスタンバイ・ポッド(太字で表示)で実行されています。
% kubectl describe ttc cachetest
Name:         cachetest
Namespace:    mynamespace
Labels:       <none>
Annotations:  <none>
API Version:  timesten.oracle.com/v1
Kind:         TimesTenClassic
Metadata:
  Creation Timestamp:  2020-10-24T03:29:48Z
  Generation:          1
  Resource Version:    78390500
  Self Link:           /apis/timesten.oracle.com/v1/namespaces/mynamespace/timestenclassics/cachetest
  UID:                 2b18d81d-15a9-11eb-b999-be712d29a81e
Spec:
  Ttspec:
    Db Config Map:
      cachetest
    Image:               phx.ocir.io/youraccount/tt1814110:3
    Image Pull Policy:   Always
    Image Pull Secret:   sekret
    Storage Class Name:  oci
    Storage Size:        250G
Status:
  Active Pods:       cachetest-0
  High Level State:  Normal
  Last Event:        28
  Pod Status:
    Cache Status:
      Cache Agent:        Running
      Cache UID Pwd Set:  true
      N Cache Groups:     2
    Db Status:
      Db:            Loaded
      Db Id:         30
      Db Updatable:  Yes
    Initialized:     true
    Pod Status:
      Agent:                Up
      Last Time Reachable:  1603510527
      Pod IP:               10.244.7.92
      Pod Phase:            Running
    Replication Status:
      Last Time Rep State Changed:  0
      Rep Agent:                    Running
      Rep Peer P State:             start
      Rep Scheme:                   Exists
      Rep State:                    ACTIVE
    Times Ten Status:
      Daemon:          Up
      Instance:        Exists
      Release:         18.1.4.11.0
    Admin User File:   true
    Cache User File:   true
    Cg File:           true
    High Level State:  Healthy
    Intended State:    Active
    Name:              cachetest-0
    Schema File:       true
    Cache Status:
      Cache Agent:        Running
      Cache UID Pwd Set:  true
      N Cache Groups:     2
    Db Status:
      Db:            Loaded
      Db Id:         30
      Db Updatable:  No
    Initialized:     true
    Pod Status:
      Agent:                Up
      Last Time Reachable:  1603510527
      Pod IP:               10.244.8.170
      Pod Phase:            Running
    Replication Status:
      Last Time Rep State Changed:  1603510411
      Rep Agent:                    Running
      Rep Peer P State:             start
      Rep Scheme:                   Exists
      Rep State:                    STANDBY
    Times Ten Status:
      Daemon:            Up
      Instance:          Exists
      Release:           18.1.4.11.0
    Admin User File:     true
    Cache User File:     true
    Cg File:             true
    High Level State:    Healthy
    Intended State:      Standby
    Name:                cachetest-1
    Schema File:         true
  Rep Create Statement:  create active standby pair "cachetest" on 
  "cachetest-0.cachetest.mynamespace.svc.cluster.local", "cachetest" on 
  "cachetest-1.cachetest.mynamespace.svc.cluster.local" NO RETURN store 
  "cachetest" on "cachetest-0.cachetest.mynamespace.svc.cluster.local" 
  PORT 4444 FAILTHRESHOLD 0 store "cachetest" on 
 "cachetest-1.cachetest.mynamespace.svc.cluster.local" PORT 4444 
 FAILTHRESHOLD 0
  Rep Port:              4444
  Status Version:        1.0
Events:
  Type  Reason       Age    From       Message
  ----  ------       ----   ----       -------
  -     Create       5m40s  ttclassic  Secret 
tt2b18d81d-15a9-11eb-b999-be712d29a81e created
  -     Create       5m40s  ttclassic  Service cachetest created
  -     Create       5m40s  ttclassic  StatefulSet cachetest created
  -     StateChange  4m28s  ttclassic  Pod cachetest-0 Agent Up
  -     StateChange  4m28s  ttclassic  Pod cachetest-0 Release 18.1.4.11.0
  -     StateChange  4m28s  ttclassic  Pod cachetest-0 Daemon Up
  -     StateChange  3m18s  ttclassic  Pod cachetest-0 RepScheme None
  -     StateChange  3m18s  ttclassic  Pod cachetest-0 RepAgent Not Running
  -     StateChange  3m18s  ttclassic  Pod cachetest-0 RepState IDLE
  -     StateChange  3m18s  ttclassic  Pod cachetest-0 Database Loaded
  -     StateChange  3m18s  ttclassic  Pod cachetest-0 Database Updatable
  -     StateChange  3m18s  ttclassic  Pod cachetest-0 CacheAgent Not Running
  -     StateChange  2m57s  ttclassic  Pod cachetest-0 CacheAgent Running
  -     StateChange  2m47s  ttclassic  Pod cachetest-1 Agent Up
  -     StateChange  2m47s  ttclassic  Pod cachetest-1 Release 18.1.4.11.0
  -     StateChange  2m46s  ttclassic  Pod cachetest-0 RepAgent Running
  -     StateChange  2m46s  ttclassic  Pod cachetest-0 RepScheme Exists
  -     StateChange  2m46s  ttclassic  Pod cachetest-0 RepState ACTIVE
  -     StateChange  2m46s  ttclassic  Pod cachetest-1 Daemon Up
  -     StateChange  2m9s   ttclassic  Pod cachetest-1 CacheAgent Running
  -     StateChange  2m9s   ttclassic  Pod cachetest-1 Database Not Updatable
  -     StateChange  2m9s   ttclassic  Pod cachetest-1 Database Loaded
  -     StateChange  2m9s   ttclassic  Pod cachetest-1 RepAgent Not Running
  -     StateChange  2m9s   ttclassic  Pod cachetest-1 RepScheme Exists
  -     StateChange  2m9s   ttclassic  Pod cachetest-1 RepState IDLE
  -     StateChange  2m3s   ttclassic  Pod cachetest-1 RepAgent Running
  -     StateChange  118s   ttclassic  Pod cachetest-1 RepState STANDBY
  -     StateChange  118s   ttclassic  TimesTenClassic was Initializing, now 
Normal
TimesTenデータベースのアクティブ・スタンバイ・ペアが(Normalで示されているように)正常にデプロイされました。TimesTen Cacheが正しく構成されていて、適切に動作していることを確認する準備が整いました。
TimesTen Cacheが正しく構成されていて、適切に機能していることを確認するには、次のステップを実行します。
アクティブ・ポッド(この例ではcachetest-0)とスタンバイ・ポッド(この例ではcachetest-1)を確認します。
% kubectl get pods NAME READY STATUS RESTARTS AGE cachetest-0 2/2 Running 0 8m16s cachetest-1 2/2 Running 0 8m15s timestenclassic-operator-f84766548-tch7s 1/1 Running 0 36d
kubectl exec -itコマンドを使用して、アクティブ・ポッド(この例ではcachetest-0)のシェルを呼び出します。
% kubectl exec -it cachetest-0 -c tt -- /usr/bin/su - oracle
ttIsqlを使用して、cachetestデータベースに接続します。TimesTenの接続属性が正しいことを確認します。特に、OracleNetServiceName接続属性がOracache (太字で表示)に正しく設定されていることを確認してください。
% ttIsql cachetest;
 
Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.
 
 
 
connect "DSN=cachetest";
Connection successful: DSN=cachetest;UID=oracle;DataStore=/tt/home/oracle/datastore/cachetest;
DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;AutoCreate=0;
PermSize=200;OracleNetServiceName=Oracache;DDLReplicationLevel=3;
ForceDisconnectEnabled=1;
(Default setting AutoCommit=1)
ttIsql cachegroupsを使用して、キャッシュ・グループcacheuser2.readcacheおよびcacheuser2.writecacheの定義を表示します。
Command> cachegroups; Cache Group CACHEUSER2.READCACHE: Cache Group Type: Read Only Autorefresh: Yes Autorefresh Mode: Incremental Autorefresh State: On Autorefresh Interval: 5 Seconds Autorefresh Status: ok Aging: No aging defined Root Table: ORATT.READTAB Table Type: Read Only Cache Group CACHEUSER2.WRITECACHE: Cache Group Type: Asynchronous Writethrough (Dynamic) Autorefresh: No Aging: LRU on Root Table: ORATT.WRITETAB Table Type: Propagate 2 cache groups found.
ttIsqlを使用して、oratt.readtabキャッシュ表を問い合せます。Oracle Databaseにキャッシュされたoratt.readtab表のデータが、TimesTenデータベースのoratt.readcacheキャッシュ表に正しくロードされていることを確認します。cachegroups.sqlメタデータ・ファイルには、前述の手順でLOAD CACHE GROUP文を指定しました。このcachegroups.sqlメタデータ・ファイルの詳細は、「メタデータ・ファイルとKubernetes機能の作成」を参照してください。
Command> SELECT * FROM oratt.readtab; < 1, Hello > < 2, World > 2 rows found.
キャッシュ・グループが作成されたことと、データが正しくoratt.readtab表にロードされたことを確認しました。
この項の例では、oratt.readtab表とoratt.writetab表に対する操作を実行して、TimesTen Cacheが正しく機能していることを確認します。
この項では、oratt.readtab表に対する操作を実行します。
Oracle Databaseにアクセスできるシェルを作成し、SQL*Plusを使用して、スキーマ・ユーザー(この例ではoratt)としてOracle Databaseに接続します。その次に、Oracle Databaseのoratt.readtab表で、新しい行の挿入、既存の行の削除および既存の行の更新を実行して、その変更をコミットします。
% sqlplus oratt/oraclepwd@oracache; SQL*Plus: Release 12.1.0.2.0 Production on Fri Oct 23 21:57:42 2020 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> INSERT INTO oratt.readtab VALUES (3,'Welcome'); 1 row created. SQL> DELETE FROM oratt.readtab WHERE keyval=2; 1 row deleted. SQL> UPDATE oratt.readtab SET str='Hi' WHERE keyval=1; 1 row updated. SQL> COMMIT; Commit complete.
読取り専用キャッシュ・グループが5秒間隔の自動リフレッシュを指定して作成されていたため、readcacheキャッシュ・グループのTimesTen oratt.readtabキャッシュ表は、キャッシュされているOracle Databaseのoratt.readtab表のコミットされた更新内容で5秒後に自動的にリフレッシュされます。次のステップでは、データがOracle DatabaseからTimesTenデータベースに正しく伝播されたことをテストします。
kubectl exec -itコマンドを使用して、TimesTenアクティブ・データベース(この例ではcachetest-0)を実行しているポッドのコンテナのシェルを起動します。
% kubectl exec -it cachetest-0 -c tt -- /usr/bin/su - oracle
TimesTenのttIsqlユーティリティを使用して、cachetestデータベースに接続します。TimesTen oratt.readtab表を問い合せて、Oracle Databaseのコミットされた更新内容で表が更新されたことを確認します。
% ttIsql cachetest; Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "DSN=cachetest"; Connection successful: DSN=cachetest;UID=oracle;DataStore=/tt/home/oracle/datastore/cachetest; DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;AutoCreate=0; PermSize=200;OracleNetServiceName=Oracache;DDLReplicationLevel=3; ForceDisconnectEnabled=1; (Default setting AutoCommit=1) Command> SELECT * FROM oratt.readtab; < 1, Hi > < 3, Welcome > 2 rows found.
TimesTen Cacheがoratt.readtab表とreadcacheキャッシュ・グループに対して正しく動作していることを確認しました。
この例では、oratt.writetab表に対する操作を実行します。
kubectl exec -itコマンドを使用して、TimesTenアクティブ・データベース(この例ではcachetest-0)を実行しているポッドのコンテナのシェルを起動します。
% kubectl exec -it cachetest-0 -c tt -- /usr/bin/su - oracle
TimesTenのttIsqlユーティリティを使用して、キャッシュ・マネージャ・ユーザー(この例ではcacheuser2)としてcachetestデータベースに接続します。TimesTenのoratt.writetab表に対してSELECT文を発行します。繰返しになりますが、writecacheキャッシュ・グループは動的キャッシュ・グループです。そのため、SELECT文を発行したときに、TimeTenキャッシュ表にデータが見つからない場合は、キャッシュされたOracle Database表から自動的にキャッシュ・インスタンスがロードされます。
% ttIsql "DSN=cachetest;UID=cacheuser2;PWD=ttpwd;OraclePWD=oraclepwd"; Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "DSN=cachetest;UID=cacheuser2;PWD=********;OraclePWD=********"; Connection successful: DSN=cachetest;UID=cacheuser2;DataStore=/tt/home/oracle/datastore/cachetest; DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=US7ASCII;AutoCreate=0; PermSize=200;OracleNetServiceName=Oracache;DDLReplicationLevel=3; ForceDisconnectEnabled=1; (Default setting AutoCommit=1) Command> SELECT * FROM oratt.writetab WHERE pk=100; < 100, TimesTen > 1 row found.
ttIsqlを使用して、TimesTenのoratt.writetabキャッシュ表で、新しい行の挿入、既存の行の削除および既存の行の更新を実行して、その変更をコミットします。
Command> INSERT INTO oratt.writetab VALUES (102,'Cache'); 1 row inserted. Command> DELETE FROM oratt.writetab WHERE pk=101; 1 row deleted. Command> UPDATE oratt.writetab SET attr='Oracle' WHERE pk=100; 1 row updated. Command> COMMIT;
writecacheキャッシュ・グループ内のTimesTenのoratt.writetabキャッシュ表でコミットされた更新内容は、Oracle Databaseのoratt.writetab表に自動的に伝播されます。
Oracle Databaseにアクセスできるシェルを作成し、SQL*Plusを使用して、スキーマ・ユーザー(この例ではoratt)としてOracleデータベースに接続します。その次に、Oracle Databaseのoratt.writetab表の内容を問い合せて、TimesTenデータベースからコミットされた更新がOracle Databaseのoratt.writetab表に伝播されたことを確認します。
% sqlplus oratt/oraclepwd@orapcache;
 
SQL*Plus: Release 12.1.0.2.0 Production on Fri Oct 23 21:57:42 2020
 
Copyright (c) 1982, 2014, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing 
options
SQL> SELECT * FROM oratt.writetab ORDER BY pk;
 
        PK ATTR
---------- ----------------------------------------
       100 Oracle
       102 Cache
TimesTen Cacheがoratt.writetab表とwritecacheキャッシュ・グループに対して正しく動作していることを確認しました。
TimesTenデータベースに特定のタイプのキャッシュ・グループを作成したときに、TimesTenは、そのキャッシュ・グループに関するメタデータをOracle Databaseに格納します。その後、そのTimesTenデータベースを削除しても、TimesTenはOracle Database内のメタデータを自動的に削除することはありません。その結果、Oracle Databaseにメタデータが蓄積される可能性があります。詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』の自動リフレッシュ・キャッシュ・グループで使用されているOracle Databaseオブジェクトの削除に関する項を参照してください。
ただし、Kubernetes環境では、TimesTenClassicオブジェクトを最初に作成するときにcacheUserメタデータ・ファイルとcachegroups.sqlメタデータ・ファイルを指定すると、そのTimesTenClassicオブジェクトを削除した場合にOracle Databaseメタデータがオペレータによって自動的にクリーン・アップされます。
オペレータがOracle Databaseを自動的にクリーン・アップしないようにするには、TimesTenClassicオブジェクト定義のcacheCleanupフィールドをfalseに設定します。詳細は、表11-3「TimesTenClassicSpecSpec」のcacheCleanupエントリを参照してください。また、cacheUserファイルとcachegroups.sqlファイルの詳細は、「サポートされているメタデータ・ファイル」を参照してください。