ヘッダーをスキップ
Oracle® TimesTen Application-Tier Database Cacheユーザーズ・ガイド
11g リリース2 (11.2.2)
B66442-07
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

6 他のキャッシュ・グリッド・メンバーの作成

次の各項では、2つ目のスタンドアロンTimesTenデータベースおよびアクティブ・スタンバイ・ペアを作成し、第3章「キャッシュ・インフラストラクチャの設定」で作成したキャッシュ・グリッドにこれらのメンバーをアタッチする場合のタスクについて説明します。


注意:

Oracle Clusterwareを使用してキャッシュ・グリッドのアクティブ・スタンバイ・ペアを管理する計画を立てている場合は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のTimesTenキャッシュ・グリッドでのOracle Clusterwareの使用に関する説明を参照してください。

また、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の制限されたコマンドおよびSQL文に関する説明も参照してください。アクティブ・スタンバイ・ペア・グリッド・メンバーを管理するには、この章で説明する組込みプロシージャではなく、ttCWAdminユーティリティを使用します。


後続のスタンドアロンTimesTenデータベースの作成および構成

次に、ttGridキャッシュ・グリッドのメンバーになる2つ目のスタンドアロンTimesTenデータベースのcachealone2 DSNの定義を示します。

[cachealone2]
DataStore=/users/OracleCache/alone2
PermSize=64
OracleNetServiceName=orcl
DatabaseCharacterSet=WE8ISO8859P1
CacheGridEnable=1

ttIsqlユーティリティを開始して、cachealone2 DSNにインスタンス管理者として接続し、データベースを作成します。次に、キャッシュ・マネージャ・ユーザーcacheuserを作成しますが、このユーザーの名前はコンパニオンOracle Databaseユーザーと同じである必要があります。この例では、キャッシュ管理ユーザーは、キャッシュ・マネージャ・ユーザーに対するコンパニオンOracle Databaseユーザーとして機能します。

さらに、TimesTenデータベースにキャッシュされるOracle Database表を所有するOracle Databaseスキーマ・ユーザーと同じ名前でキャッシュ表ユーザーorattを作成します。

% ttIsql cachealone2
Command> CREATE USER cacheuser IDENTIFIED BY timesten;
Command> CREATE USER oratt IDENTIFIED BY timesten;

インスタンス管理者としてttIsqlユーティリティを使用して、例3-8に示されている処理を実行するために必要な権限をキャッシュ・マネージャ・ユーザーcacheuserに付与します。

Command> GRANT CREATE SESSION, CACHE_MANAGER, CREATE ANY TABLE TO cacheuser;
Command> exit

ttIsqlユーティリティを起動して、cachealone2 DSNにキャッシュ・マネージャ・ユーザーとして接続します。ttCacheUidPwdSet組込みプロシージャをコールして、キャッシュ管理ユーザーの名前およびパスワードを設定します。

% ttIsql "DSN=cachealone2;UID=cacheuser;PWD=timesten;OraclePWD=oracle"
Command> CALL ttCacheUidPwdSet('cacheuser','oracle');

キャッシュ・マネージャ・ユーザーとしてttGridNameSet組込みプロシージャをコールすることによって、2つ目のスタンドアロン・データベースをttGridキャッシュ・グリッドに関連付けます。

Command> CALL ttGridNameSet('ttGrid');

ttGridキャッシュ・グリッドは、最初のスタンドアロンTimesTenデータベースから作成されました。グリッドはすでに存在するため、再度作成する必要はありません。

必要に応じて、「TimesTenデータベースとOracle Database間での接続テスト」に示した手順を使用して、2つ目のスタンドアロンTimesTenデータベースとOracle Database間の接続性をテストできます。

キャッシュ・マネージャ・ユーザーとしてttCacheStart組込みプロシージャをコールすることによって、2つ目のスタンドアロン・データベースでキャッシュ・エージェントを起動します。

Command> CALL ttCacheStart;

次に、キャッシュ・マネージャ・ユーザーとしてデータベースにキャッシュ・グループを作成します。たとえば、次の文では、oratt.subscriber表をキャッシュする動的AWTグローバル・キャッシュ・グループsubscriber_accountsが作成されます。

CREATE DYNAMIC ASYNCHRONOUS WRITETHROUGH GLOBAL CACHE GROUP subscriber_accounts
FROM oratt.subscriber
 (subscriberid       NUMBER(10) NOT NULL PRIMARY KEY,
  name               VARCHAR2(100) NOT NULL,
  minutes_balance    NUMBER(5) NOT NULL,
  last_call_duration NUMBER(4) NOT NULL);

キャッシュされたOracle Database表oratt.subscriberの定義の詳細は、「グローバル・キャッシュ・グループ」を参照してください。

AWTキャッシュ・グループが作成されている場合は、キャッシュ・マネージャ・ユーザーとしてttRepStart組込みプロシージャをコールすることによって、TimesTenデータベースでレプリケーション・エージェントを起動します。

Command> CALL ttRepStart;

グローバル・キャッシュ・グループが作成されている場合、グローバル・キャッシュ・グループのキャッシュ表を更新するには、関連付けられているキャッシュ・グリッドにデータベースをアタッチする必要があります。データベースをグリッドにアタッチすると、データベースをグリッド・メンバーにすることができ、その結果、グリッド内のデータベース間で、グローバル・キャッシュ・グループのキャッシュ表内にあるキャッシュ・インスタンスの一貫性を保持できます。

関連付けられているttGridキャッシュ・グリッドに2つ目のスタンドアロン・データベースをアタッチするには、キャッシュ・マネージャ・ユーザーとしてttGridAttach組込みプロシージャをコールします。スタンドアロンのTimesTenデータベースのノード番号は1です。

次の例で、alone2はグリッド・メンバーを一意に識別する名前を、sys2は2つ目のスタンドアロン・データベースが存在するTimesTenシステムのホスト名を、5002は2つ目のスタンドアロン・データベースのキャッシュ・エージェント・プロセスのTCP/IPポートを示しています。

Command> CALL ttGridAttach(1,'alone2','sys2',5002);
Command> exit

キャッシュ表のレプリケート

高可用性を実現するために、読取り専用キャッシュ・グループまたはAWTキャッシュ・グループのキャッシュ表に対してアクティブ・スタンバイ・ペアのレプリケーション・スキームを構成します。

これらのキャッシュ・グループ・タイプのいずれかからキャッシュ表をレプリケートするアクティブ・スタンバイ・ペアを使用すると、フェイルオーバーおよびリカバリの一部として、データ損失の可能性を最小限に抑えて、TimesTenデータベースのロールを自動的に変更できます。キャッシュ・グループ自体は、Oracle Databaseの停止からのリジリエンスを提供するため、システムの可用性がさらに強化されます。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のキャッシュ・グループを含むアクティブ・スタンバイ・ペアの管理に関する説明を参照してください。

アクティブ・スタンバイ・ペアのレプリケーション・スキームを構成すると、TimesTenデータベースの高可用性を実現できます。グリッド・メンバーを複数配置すると、TimesTenキャッシュ・グリッドの高可用性を実現できます。Oracle Real Application Clusters(Oracle RAC)を構成すると、Oracle Databaseの高可用性を実現できます。Oracle RAC環境でTimesTen Application-Tier Database Cacheを使用する方法の詳細は、「Oracle RAC環境でのTimesTen Application-Tier Database Cacheの使用」を参照してください。

Oracle Database表をキャッシュするTimesTenデータベースに対してアクティブ・スタンバイ・ペアを構成するには、次のタスクを実行します。

アクティブ・データベースの作成および構成

次に、ttGridキャッシュ・グリッドのメンバーになるアクティブ・スタンバイ・ペアのアクティブ・データベースのcacheactive DSNの定義を示します。

[cacheactive]
DataStore=/users/OracleCache/cacheact
PermSize=64
OracleNetServiceName=orcl
DatabaseCharacterSet=WE8ISO8859P1
CacheGridEnable=1

ttIsqlユーティリティを開始して、cacheactive DSNにインスタンス管理者として接続し、データベースを作成します。次に、キャッシュ・マネージャ・ユーザーcacheuserを作成しますが、このユーザーの名前はコンパニオンOracle Databaseユーザーと同じです。この例では、キャッシュ管理ユーザーは、コンパニオンOracle Databaseユーザーとして機能します。

さらに、TimesTenデータベースにキャッシュされるOracle Database表を所有するOracle Databaseスキーマ・ユーザーと同じ名前でキャッシュ表ユーザーorattを作成します。

% ttIsql cacheactive
Command> CREATE USER cacheuser IDENTIFIED BY timesten;
Command> CREATE USER oratt IDENTIFIED BY timesten;

インスタンス管理者としてttIsqlユーティリティを使用して、例3-8に示されている処理を実行し、ADMIN権限を必要とするアクティブ・スタンバイ・ペアのレプリケーション・スキームを作成するために必要な権限をキャッシュ・マネージャ・ユーザーcacheuserに付与します。

Command> GRANT CREATE SESSION, CACHE_MANAGER,
       > CREATE ANY TABLE, ADMIN TO cacheuser;
Command> exit

ttIsqlユーティリティを起動して、cacheactive DSNにキャッシュ・マネージャ・ユーザーとして接続します。ttCacheUidPwdSet組込みプロシージャをコールして、キャッシュ管理ユーザーの名前およびパスワードを設定します。

% ttIsql "DSN=cacheactive;UID=cacheuser;PWD=timesten;OraclePWD=oracle"
Command> CALL ttCacheUidPwdSet('cacheuser','oracle');

キャッシュ・マネージャ・ユーザーとしてttGridNameSet組込みプロシージャをコールすることによって、アクティブ・データベースをttGridキャッシュ・グリッドに関連付けます。

Command> CALL ttGridNameSet('ttGrid');

ttGridキャッシュ・グリッドは、最初のスタンドアロンTimesTenデータベースから作成されました。グリッドはすでに存在するため、再度作成する必要はありません。

必要に応じて、「TimesTenデータベースとOracle Database間での接続テスト」に示した手順を使用して、アクティブ・データベースとOracle Database間の接続性をテストできます。

キャッシュ・マネージャ・ユーザーとしてttCacheStart組込みプロシージャをコールすることによって、アクティブ・データベースでキャッシュ・エージェントを起動します。

Command> CALL ttCacheStart;

次に、キャッシュ・マネージャ・ユーザーとしてデータベースにキャッシュ・グループを作成します。たとえば、次の文では、oratt.subscriber表をキャッシュする動的AWTグローバル・キャッシュ・グループsubscriber_accountsが作成されます。

CREATE DYNAMIC ASYNCHRONOUS WRITETHROUGH GLOBAL CACHE GROUP subscriber_accounts
FROM oratt.subscriber
 (subscriberid       NUMBER(10) NOT NULL PRIMARY KEY,
  name               VARCHAR2(100) NOT NULL,
  minutes_balance    NUMBER(5) NOT NULL,
  last_call_duration NUMBER(4) NOT NULL);

キャッシュされたOracle Database表oratt.subscriberの定義の詳細は、「グローバル・キャッシュ・グループ」を参照してください。

キャッシュ・マネージャ・ユーザーとして、CREATE ACTIVE STANDBY PAIR文を使用して、アクティブ・データベースにアクティブ・スタンバイ・ペアのレプリケーション・スキームを作成します。

次の例では、cacheactcachestandおよびsubscrはそれぞれ、アクティブ・データベース、スタンバイ・データベースおよび読取り専用サブスクライバ・データベースのチェックポイント・ファイルおよびトランザクション・ログ・ファイルのファイル名接頭辞です。また、sys3sys4およびsys5はそれぞれ、アクティブ・データベース、スタンバイ・データベースおよび読取り専用サブスクライバ・データベースが存在するTimesTenシステムのホスト名です。

Command> CREATE ACTIVE STANDBY PAIR cacheact ON "sys3", cachestand ON "sys4"
       > SUBSCRIBER subscr ON "sys5";

キャッシュ・マネージャ・ユーザーとしてttRepStart組込みプロシージャをコールすることによって、アクティブ・データベースでレプリケーション・エージェントを起動します。次に、ttRepStateSet組込みプロシージャをコールすることによって、データベースをアクティブとして宣言します。

Command> CALL ttRepStart;
Command> CALL ttRepStateSet('active');

グローバル・キャッシュ・グループが作成されている場合、グローバル・キャッシュ・グループのキャッシュ表を更新するには、関連付けられているキャッシュ・グリッドにデータベースをアタッチする必要があります。データベースをグリッドにアタッチすると、データベースをグリッド・メンバーにすることができ、その結果、グリッド内のデータベース間で、グローバル・キャッシュ・グループのキャッシュ表内にあるキャッシュ・インスタンスの一貫性を保持できます。

関連付けられているttGridキャッシュ・グリッドにアクティブ・データベースをアタッチするには、キャッシュ・マネージャ・ユーザーとしてttGridAttach組込みプロシージャをコールします。アクティブ・データベースのノード番号は1です。

例で使用される各要素の意味は、次のとおりです。

  • cacheactは、アクティブ・データベースのグリッド・ノードを一意に識別する名前です。

  • cachestandは、スタンバイ・データベースのグリッド・ノードを一意に識別する名前です。

  • sys3は、アクティブ・データベースが存在するTimesTenシステムのホスト名です。

  • sys4は、スタンバイ・データベースが存在するTimesTenシステムのホスト名です。

  • 5003は、アクティブ・データベースのキャッシュ・エージェント・プロセス用のTCP/IPポートです。

  • 5004は、スタンバイ・データベースのキャッシュ・エージェント・プロセス用のTCP/IPポートです。

Command> CALL ttGridAttach(1,'cacheact','sys3',5003,'cachestand','sys4',5004);
Command> exit

スタンバイ・データベースの作成および構成

次に、ttGridキャッシュ・グリッドのメンバーになるアクティブ・スタンバイ・ペアのスタンバイ・データベースのcachestandby DSNの定義を示します。

[cachestandby]
DataStore=/users/OracleCache/cachestand
PermSize=64
OracleNetServiceName=orcl
DatabaseCharacterSet=WE8ISO8859P1
CacheGridEnable=1

インスタンス管理者として、スタンバイ・データベース・システムからttRepAdmin -duplicateユーティリティ・コマンドを実行することによって、スタンバイ・データベースをアクティブ・データベースの複製として作成します。アクティブ・データベースのインスタンスとスタンバイ・データベースのインスタンスのインスタンス管理者ユーザー名は同じである必要があります。

スタンバイ・データベースにはOracle Databaseとの接続性があるため、アクティブ・データベースのキャッシュ表がスタンバイ・データベースのキャッシュ表として複製されるように、-keepCGオプションを使用します。

例で使用される各要素の意味は、次のとおりです。

  • -fromオプションには、アクティブ・データベースのチェックポイント・ファイルおよびトランザクション・ログ・ファイルのファイル名接頭辞を指定します。

  • -hostオプションには、アクティブ・データベースが存在するTimesTenシステムのホスト名を指定します。

  • -uidオプションおよび-pwdオプションには、アクティブ・データベースに定義され、ADMIN権限が付与されているTimesTen内部ユーザーのユーザー名およびパスワードを指定します。

  • -cacheuidオプションおよび-cachepwdオプションには、キャッシュ管理ユーザーの名前およびパスワードを指定します。

  • cachestandbyは、スタンバイ・データベースのDSNです。

% ttRepAdmin -duplicate -from cacheact -host "sys3" -uid cacheuser -pwd timesten
    -cacheuid cacheuser -cachepwd oracle -keepCG cachestandby

ttIsqlユーティリティを起動して、cachestandby DSNにキャッシュ・マネージャ・ユーザーとして接続します。ttCacheUidPwdSet組込みプロシージャをコールして、キャッシュ管理ユーザーの名前およびパスワードを設定します。

% ttIsql "DSN=cachestandby;UID=cacheuser;PWD=timesten;OraclePWD=oracle"
Command> CALL ttCacheUidPwdSet('cacheuser','oracle');

ttGridキャッシュ・グリッドは、最初のスタンドアロンTimesTenデータベースから作成されました。グリッドはすでに存在するため、再度作成する必要はありません。

ttRepAdmin -duplicate -keepCGユーティリティ・コマンドによってスタンバイ・データベースがttGridキャッシュ・グリッドに関連付けられるため、この関連付けを明示的に行う必要はありません。

必要に応じて、「TimesTenデータベースとOracle Database間での接続テスト」に示した手順を使用して、スタンバイ・データベースとOracle Database間の接続性をテストできます。

キャッシュ・マネージャ・ユーザーとしてttCacheStart組込みプロシージャをコールすることによって、スタンバイ・データベースでキャッシュ・エージェントを起動します。

Command> CALL ttCacheStart;

キャッシュ・マネージャ・ユーザーとしてttRepStart組込みプロシージャをコールすることによって、スタンバイ・データベースでレプリケーション・エージェントを起動します。

Command> CALL ttRepStart;

グローバル・キャッシュ・グループが作成されている場合、グローバル・キャッシュ・グループのキャッシュ表を更新するには、関連付けられているキャッシュ・グリッドにデータベースをアタッチする必要があります。データベースをグリッドにアタッチすると、データベースをグリッド・メンバーにすることができ、その結果、グリッド内のデータベース間で、グローバル・キャッシュ・グループのキャッシュ表内にあるキャッシュ・インスタンスの一貫性を保持できます。

関連付けられているttGridキャッシュ・グリッドにスタンバイ・データベースをアタッチするには、キャッシュ・マネージャ・ユーザーとしてttGridAttach組込みプロシージャをコールします。スタンバイ・データベースのノード番号は2です。アクティブ・データベースおよびスタンバイ・データベースのキャッシュ・エージェントには、アクティブ・データベースの構成時に指定したTCP/IPポートと同じTCP/IPポートを使用します。

例で使用される各要素の意味は、次のとおりです。

  • cacheactは、アクティブ・データベースのグリッド・ノードを一意に識別する名前です。

  • cachestandは、スタンバイ・データベースのグリッド・ノードを一意に識別する名前です。

  • sys3は、アクティブ・データベースが存在するTimesTenシステムのホスト名です。

  • sys4は、スタンバイ・データベースが存在するTimesTenシステムのホスト名です。

  • 5003は、アクティブ・データベースのキャッシュ・エージェント・プロセス用のTCP/IPポートです。

  • 5004は、スタンバイ・データベースのキャッシュ・エージェント・プロセス用のTCP/IPポートです。

Command> CALL ttGridAttach(2,'cacheact','sys3',5003,'cachestand','sys4',5004);
Command> exit

読取り専用サブスクライバ・データベースの作成および構成

次に、アクティブ・スタンバイ・ペアの読取り専用サブスクライバ・データベースのrosubscriber DSNの定義を示します。

[rosubscriber]
DataStore=/users/OracleCache/subscr
PermSize=64
DatabaseCharacterSet=WE8ISO8859P1

インスタンス管理者として、読取り専用サブスクライバ・データベース・システムからttRepAdmin -duplicateユーティリティ・コマンドを実行することによって、読取り専用サブスクライバ・データベースをスタンバイ・データベースの複製として作成します。スタンバイ・データベースのインスタンスと読取り専用サブスクライバ・データベースのインスタンスのインスタンス管理者ユーザー名は同じである必要があります。

読取り専用サブスクライバ・データベースにはOracle Databaseとの接続性がないため、スタンバイ・データベースのキャッシュ表が読取り専用サブスクライバ・データベースの通常の表として複製されるように、-noKeepCGオプションを使用します。この結果、読取り専用サブスクライバ・データベースはキャッシュ・グリッドに関連付けられなくなります。

例で使用される各要素の意味は、次のとおりです。

  • -fromオプションには、スタンバイ・データベースのチェックポイント・ファイルおよびトランザクション・ログ・ファイルのファイル名接頭辞を指定します。

  • -hostオプションには、スタンバイ・データベースが存在するTimesTenシステムのホスト名を指定します。

  • -uidオプションおよび-pwdオプションには、スタンバイ・データベースに定義され、ADMIN権限が付与されているTimesTen内部ユーザーのユーザー名およびパスワードを指定します。

  • rosubscriberは、読取り専用サブスクライバ・データベースのDSNです。

% ttRepAdmin -duplicate -from cachestand -host "sys4" -uid cacheuser -pwd timesten
    -noKeepCG rosubscriber

キャッシュ・マネージャ・ユーザーとしてttRepStart組込みプロシージャをコールすることによって、読取り専用サブスクライバ・データベースでレプリケーション・エージェントを起動します。

% ttIsql "DSN=rosubscriber;UID=cacheuser;PWD=timesten"
Command> CALL ttRepStart;
Command> exit

グリッド・メンバー間のデータ共有の例

キャッシュされたOracle Database表oratt.subscriberの定義の詳細は、「グローバル・キャッシュ・グループ」を参照してください。

次に、キャッシュされたOracle Database表oratt.subscriberのデータを示します。

SUBSCRIBERID  NAME              MINUTES_BALANCE   LAST_CALL_DURATION
------------  ----------------  ---------------   ------------------    
        1001  Jane Anderson                  75                   15
        1004  Robert Phillips                60                   20
        1005  William Ackerman               40                   10
        1009  Sandy Little                   90                   30

グローバル・キャッシュ・グループsubscriber_accountsのTimesTenキャッシュ表oratt.subscriberは、5つすべてのTimesTenデータベース(cachealone1cachealone2cacheactivecachestandbyrosubscriber)で最初は空になっています。

Command> SELECT * FROM oratt.subscriber;
0 rows found.

TimesTenデータベースcachealone1で次のSELECT文を発行して、キャッシュされたOracle Database表からTimesTenキャッシュ表に1つのキャッシュ・インスタンスを動的にロードします。

Command> SELECT * FROM oratt.subscriber WHERE subscriberid = 1004;
< 1004, Robert Phillips, 60, 20 >

この結果、スタンドアロン・データベース・グリッド・メンバーcachealone1は、サブスクライバIDが1004のキャッシュ・インスタンスの所有権を持ちます。このキャッシュ・インスタンスは、他のいずれのグリッド・メンバーにも存在しません。

次に、TimesTenデータベースcachealone2で次のSELECT文を発行して、キャッシュされたOracle Database表からTimesTenキャッシュ表にキャッシュ・インスタンスを1つ動的にロードします。

Command> SELECT * FROM oratt.subscriber WHERE subscriberid = 1004;
< 1004, Robert Phillips, 60, 20 >

この結果、スタンドアロン・データベース・グリッド・メンバーcachealone2は、サブスクライバIDが1004のキャッシュ・インスタンスの所有権をグリッド・メンバーcachealone1から取得します。これで、このキャッシュ・インスタンスはcachealone1には存在しなくなり、他のいずれのグリッド・メンバーにも存在しなくなります。

次に、TimesTenデータベースcacheactiveで次のINSERT文を発行して、新しいキャッシュ・インスタンスをTimesTenキャッシュ表に挿入します。

Command> INSERT INTO oratt.subscriber VALUES (1012, 'Charles Hill', 80, 16);

この結果、アクティブ・データベース・グリッド・ノードcacheactiveは、サブスクライバIDが1012のキャッシュ・インスタンスの所有権を持ちます。このキャッシュ・インスタンスは、スタンバイ・データベースcachestandbyおよび読取り専用サブスクライバ・データベースrosubscriberにレプリケートされます。このキャッシュ・インスタンスは、他のいずれのグリッド・メンバーにも存在しません。また、この挿入処理は、キャッシュされたOracle Database表oratt.subscriberにも自動的に伝播されます。

スタンバイ・データベースまたは読取り専用サブスクライバ・データベースでは、キャッシュ・インスタンスの所有権を直接取得できません。これらのデータベースは読取り専用であるため、動的ロード処理にも手動ロード処理にも、動的ロードを実行するSELECT文を含めることができません。

グリッド・メンバー間のローカル・キャッシュ・グループのキャッシュ表では、データは共有されません。グリッド・メンバーごとに、ローカル・キャッシュ・グループの数が異なることがあります。ある2つのグリッド・メンバーでローカル・キャッシュ・グループの定義が同じである場合、一方のグリッド・メンバー内のキャッシュ表のデータが他方のグリッド・メンバー内のキャッシュ表のデータと重複することがあります。ローカル・キャッシュ・グループでは、キャッシュ・インスタンスがキャッシュ表を所有するという概念がありません。

キャッシュ・グリッドに対するグローバル問合せの実行

キャッシュ・グリッド内にあるすべてのノードのデータにアクセスする場合は、グローバル問合せを実行します。たとえば、次の文を考えてみます。

SELECT MAX(salary) FROM employees;

グローバル問合せ処理が有効ではない場合、この文では、ローカル・ノードに存在する行での最大給与を返します。グローバル問合せ処理が有効である場合は、キャッシュ・グリッド内のすべての従業員レコードでの最大給与を返します。

グローバル問合せでは、アタッチされているすべてのグリッド・メンバーのキャッシュ表または非キャッシュ表を参照できます。参照対象となる表は、ローカル表、キャッシュ表、ビュー、マテリアライズド・ビューおよび表のシノニムの任意の組合せです。これらの表は、グローバル問合せによって影響を受ける列に対して同じ定義を持つ必要があります。

オプティマイザ・フラグを設定して、グローバル問合せ処理を有効化します。グローバル問合せを実行する前に、自動コミットをオフにし、ttOptSetFlag組込みプロシージャをコールしてGlobalProcessingオプティマイザ・フラグを1に設定します。

autocommit 0;
CALL ttOptSetFlag('GlobalProcessing', 1);

ローカル結合を使用するグローバル問合せを実行するには、GlobalProcessingオプティマイザ・フラグではなく、GlobalLocalJoinオプティマイザ・フラグを使用します。「ローカル結合を使用するグローバル問合せの実行」を参照してください。

GlobalProcessingオプティマイザ・フラグよって有効化されるグローバル問合せには、次の制限があります。

  • 問合せは厳密に1つの表を参照する必要があります。

  • 問合せに自己結合、導出表または副問合せを含めることはできません。

  • 問合せではグローバル一時表を参照できません。

  • 問合せをアクティブ・スタンバイ・グリッド・メンバーのスタンバイ・データベースに対して実行することはできません。

  • ROWNUM句およびGROUP BY句を同じ問合せで使用することはできません。

  • 問合せは、GROUPING SETSCUBEROLLUPGROUPINGGROUPING_IDまたはGROUP_IDと一緒には使用できません。

  • 問合せにはWITH句を含めることはできません。

  • 問合せには分析SQL関数を含めることはできません。

  • PassThrough接続属性は0に設定する必要があります。

ローカル結合を使用するグローバル問合せの実行

ローカル結合を使用するグローバル問合せを実行できます。これは、SELECT文はグローバルだが(すべてのグリッド・メンバーから選択するが)、結合結果はローカルである(結合はローカル・ノードに存在する)ことを意味します。これは、ファクト表とディメンション表の結合、結合キーに基づいてデータが分散されている同じぐらいのサイズの表の結合または主キーや外部キーの関係に基づいたグローバル・キャッシュ・グループの表の結合に役立つ場合があります。ローカル結合を使用するグローバル問合せを有効にするには、GlobalLocalJoinオプティマイザ・フラグを使用します。

ローカル結合を使用するグローバル問合せでは、キャッシュ表、グローバル・キャッシュ表、同じ定義を持つ非キャッシュ表、ビューおよびマテリアライズド・ビューを結合できます。ローカル結合を使用するグローバル問合せには、順序を含めることができます。

シリアライズ可能な分離で実行されるグローバル問合せは、SELECT文のグローバル・トランザクションに属しています。コミット読取り分離で実行されるグローバル問合せは、リモート・ノード上の独自のトランザクションで実行されます。

グローバル問合せの次の処理は、各グリッド・メンバーでローカルに実行されます。

  • 結合

  • 導出表

  • ビュー

  • 副問合せのGROUP BY句、HAVING句、ORDER BY句およびDISTINCT

グローバル問合せの主問合せで行う次の処理は、グローバルに実行されます。

  • GROUP BY句および集計。

  • ORDER BY句。

  • DISTINCT句。

  • HAVING句。この句には結合を含めることはできません。

シノニムは問合せの発行元であるノードで解決されます。

ローカル結合を使用するグローバル問合せを実行する前に、自動コミットをオフにし、ttOptSetFlag組込みプロシージャをコールしてGlobalLocalJoinオプティマイザ・フラグを1に設定します。

autocommit off;
CALL ttOptSetFlag('GlobalLocalJoin', 1)

ローカル結合を使用するグローバル問合せには、次の制限があります。

  • 問合せにはROWNUM式を含めることはできません。

  • 問合せには集合演算子を含めることはできません。

  • 問合せにはWITH句を含めることはできません。

  • 問合せは、GROUPING SETSCUBEROLLUPGROUPINGGROUPING_IDまたはGROUP_IDと一緒には使用できません。

  • 問合せには分析SQL関数を含めることはできません。

  • PassThrough接続属性は0に設定する必要があります。

  • 問合せをアクティブ・スタンバイ・グリッド・メンバーのスタンバイ・データベースに対して実行することはできません。

キャッシュ・グリッド内のデータの場所に関する情報の取得

データの場所を変更せずにグローバル問合せを実行できます。SQL関数を使用して情報を含むグリッド・ノードを判断してから、そのノードのデータに対する問合せを実行できます。

キャッシュ・グリッド内のデータの場所に関する情報を取得するには、グローバル問合せで次のSQL関数を使用します。

  • TTGRIDMEMBERID() - 問合せが実行されるノードのノードIDを返します。

  • TTGRIDNODENAME() - 問合せが実行されるノードの名前を返します。

  • TTGRIDUSERASSIGNEDNAME() - 問合せが実行されるノードのユーザー割当て名を返します。ユーザーは、ttGridAttach組込みプロシージャのコール時に名前を割り当てます。Oracle Clusterwareを使用している場合は、ttGridAttachを直接コールすることはなく、ユーザー割当て名はTimesTenにより生成されます。

これらの関数はSELECT文およびSELECT文の次の句で使用できます。

  • WHERE

  • GROUP BY

  • ORDER BY

図6-1に、ユーザー割当て名alone1およびalone2を持つメンバーと、cacheactおよびcachestandのノードからなるアクティブ・スタンバイ・ペアで構成されたキャッシュ・グリッドを示します。問合せではスタンバイ・データベースからはデータを取得しません。スタンバイ・データベースには、アクティブ・データベースと同じデータが格納されています。

図6-1 キャッシュ・グリッド内のデータの場所

図6-1の説明を次に示します
「図6-1 キャッシュ・グリッド内のデータの場所」の説明

次の例では、グリッド・メンバーのemployee表からemployee_id、ユーザー割当てノード名およびメンバーIDを取得するグローバル問合せを示します。

autocommit off;
CALL ttOptSetFlag('GlobalProcessing', 1);
SELECT employee_id, TTGRIDUSERASSIGNEDNAME(), TTGRIDMEMBERID() FROM employees;
COMMIT;
< 100, alone1, 1>
< 101, alone2, 2>
< 102, cacheact, 3>
< 103, alone1, 1>
< 104, cacheact, 3>
...

返された行には、キャッシュ・インスタンスの各行を所有するグリッド・ノードおよびメンバーが示されます。以降の問合せでは、データの所有権を変更しなくても、適切なノードにアクセスできます。たとえば、この問合せ(TTGRIDUSERASSIGNEDNAME()を含む)をグリッド・メンバーcacheactに対して実行し、cacheactが問合せの実行されるグリッドであることを確認します。

SELECT employee_id, last_name, hire_date , TTGRIDUSERASSIGNEDNAME() 
 FROM employees
 WHERE employee_id=104;
< 104, Ernst, 1991-05-21 00:00:00, cacheact >

TTGRIDMEMBERID()TTGRIDNODENAME()およびTTGRIDUSERASSIGNEDNAME()の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス』の "キャッシュ・グリッドの関数に関する説明を参照してください。

キャッシュ・グリッドまたはグリッド・メンバーへの他の要素の追加

グローバル・キャッシュ・グループを含むデータベースがキャッシュ・グリッドにアタッチされている場合、後続のデータベースを同じグリッドにアタッチし、グリッド・メンバーにすることができるのは、そのデータベースに含まれているグローバル・キャッシュ・グループの定義が、グリッドにアタッチされているデータベースのグローバル・キャッシュ・グループの定義と同じときのみです。後続のデータベースに含まれているグローバル・キャッシュ・グループの数が、グリッドにアタッチされているデータベースより多いかまたは少ない場合、後続のデータベースを同じグリッドにアタッチすることはできません。データベースごとに、ローカル・キャッシュ・グループの数が異なり、データベース間で定義が一致しない場合があります。

キャッシュ・グリッドにアタッチされているTimesTenデータベースに動的AWTグローバル・キャッシュ・グループを新しく作成する場合は、データベースでレプリケーション・エージェントを停止しておきます。次に、グローバル・キャッシュ・グループを作成してから、レプリケーション・エージェントを再起動します。新しいグローバル・キャッシュ・グループは手動でロードすることも動的にロードすることもできず、また、そのキャッシュ表はすべてのグリッド・メンバーで同じ定義を使用してキャッシュ・グループが作成されるまで更新できません。スタンドアロン・データベースおよびアクティブ・データベースに、その新しいグローバル・キャッシュ・グループを手動で作成します。スタンバイ・データベースおよび読取り専用サブスクライバ・データベースの場合は、ttDestroyユーティリティを使用してデータベースを削除し、ttRepAdmin -duplicateユーティリティ・コマンドを使用してデータベースを再作成して、これらのデータベースに新しいグローバル・キャッシュ・グループが含まれるようにします。