この付録では、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を使用してキャッシュ管理ユーザーを作成します。このユーザーにcachetablespace
2
表領域を割り当てます。この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
スクリプトを実行します。このスクリプトでは、cacheuser
2
キャッシュ管理ユーザーにキャッシュ・グループの操作を実行するために必要な最小限の権限を付与します。詳細は、『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.writeta
b表の内容を問い合せて、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
ファイルの詳細は、「サポートされているメタデータ・ファイル」を参照してください。