データをキャッシュするためのOracle Databaseの設定

次の各項では、Oracle Databaseで実行する必要があるタスクについて説明します。

Oracle Databaseユーザーの作成

TimesTen Cacheを使用するには、まず、次のユーザーをOracle Databaseで作成しておく必要があります。

  • キャッシュ管理ユーザー。このユーザーは、キャッシュ環境に関する情報を格納するOracle Databaseオブジェクトを作成およびメンテナンスします。このユーザーは、キャッシュ・グループ・タイプの事前定義済動作も実施します。

  • TimesTenデータベースにキャッシュされるOracle Database表を所有する1人または複数のスキーマ・ユーザー。

詳細は、『Oracle TimesTen In-Memory Databaseキャッシュ・ガイド』Oracleデータベース・ユーザーおよびデフォルト表領域の作成を参照してください。

この例では、Oracle Databaseにcacheuser2キャッシュ管理ユーザーとorattスキーマ・ユーザーを作成します。

  1. Oracle Databaseにアクセスできるシェルを作成し、SQL*Plusを使用してsysユーザーとしてOracle Databaseに接続します。その次に、TimesTen Cache管理オブジェクトを格納するデフォルトの表領域を作成します。詳細は、『Oracle TimesTen In-Memory Databaseキャッシュ・ガイド』Oracleデータベース・ユーザーおよびデフォルト表領域の作成を参照してください。

    この例では、cachetablespace2表領域を作成します。

    % sqlplus sys/syspwd@oracache as sysdba
    
    SQL> CREATE TABLESPACE cachetablespace2 DATAFILE 'datatt2.dbf' SIZE 100M;
     
    Tablespace created.
    
  2. SQL*Plusを使用してスキーマ・ユーザーを作成します。このスキーマ・ユーザーには、TimesTenデータベースにキャッシュされるOracle Databaseの表を作成するために必要な最小限の権限セットを付与します。

    この例では、orattスキーマ・ユーザーを作成します。

    SQL> CREATE USER oratt IDENTIFIED BY oraclepwd;
     
    User created.
     
    SQL> GRANT CREATE SESSION, RESOURCE TO oratt;
     
    Grant succeeded.
    
  3. SQL*Plusを使用してキャッシュ管理ユーザーを作成します。このユーザーにcachetablespace2表領域を割り当てます。このOracleキャッシュ管理ユーザーと同じ名前をcacheUserメタデータ・ファイルで使用することになります。

    この例では、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キャッシュ管理ユーザーへの権限の付与、および『Oracle TimesTen In-Memory Databaseキャッシュ・ガイド』キャッシュ操作に必要なキャッシュ管理ユーザーの権限を参照してください。

次のステップに従って、grantCacheAdminPrivileges.sqlスクリプトを実行します。

  1. Oracle Databaseにアクセスできるシェルを作成して、任意のディレクトリから空のサブディレクトリを作成します。この例では、oraclescriptsサブディレクトリを作成します。
    % mkdir -p oraclescripts
  2. Linux開発ホストからkubectl cpコマンドを使用して、Linux開発ホストのinstallation_dir/oraclescriptsディレクトリにあるgrantCacheAdminPrivileges.sqlスクリプトを前の手順で作成したoraclescriptsディレクトリにコピーします。installation_dirディレクトリは、TimesTenディストリビューションの解凍時に作成されたものです。
    % cp /installation_dir/oraclescripts/grantCacheAdminPrivileges.sql 
    database-oracle:oraclescripts/grantCacheAdminPrivileges.sql
  3. シェルから、このスクリプトがoraclescriptsディレクトリに配置されていることを確認します。
    % ls oraclescripts
    grantCacheAdminPrivileges.sql
  4. SQL*Plusを使用して、sysユーザーとしてOracle Databaseに接続します。その次に、oraclescripts/grantCacheAdminPrivileges.sqlスクリプトを実行します。このスクリプトでは、cacheuser2キャッシュ管理ユーザーにキャッシュ・グループの操作を実行するために必要な最小限の権限を付与します。『Oracle TimesTen In-Memory Databaseキャッシュ・ガイド』Oracleキャッシュ管理ユーザーへの権限の付与を参照してください。
    % sqlplus sys/syspwd@oracache as sysdba
    
    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で正常に実行しました。

キャッシュされるOracle Database表の作成

この例では、orattユーザー・スキーマに2つの表を作成します。このユーザーの詳細は、「Oracle Databaseユーザーの作成」を参照してください。

  • readtab: この表は、読取り専用キャッシュ・グループにキャッシュされることになります。

  • writetab: この表は、AWTキャッシュ・グループにキャッシュされることになります。

  1. Oracle Databaseにアクセスできるシェルを作成し、SQL*Plusを使用してsysユーザーとしてOracle Databaseに接続します。その次に、oratt.readtab表とoratt.writetab表を作成します。
    % sqlplus sys/syspwd@oracache as sysdba
    
    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.
    
  2. 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
    
  3. SQL*Plusを使用して、oratt.readtab表に対するSELECT権限と、oratt.writetab表に対するSELECTINSERTUPDATEおよび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.
    
  4. 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の表が正常に作成されました。