次の各項では、2つ目のスタンドアロンTimesTenデータベースおよびアクティブ・スタンバイ・ペアを作成し、第3章「キャッシュ・インフラストラクチャの設定」で作成したキャッシュ・グリッドにこれらのメンバーをアタッチする場合のタスクについて説明します。
注意: Oracle Clusterwareを使用してキャッシュ・グリッドのアクティブ・スタンバイ・ペアを管理する計画を立てている場合は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のTimesTenキャッシュ・グリッドでのOracle Clusterwareの使用に関する説明を参照してください。また、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の制限されたコマンドおよびSQL文に関する説明も参照してください。アクティブ・スタンバイ・ペア・グリッド・メンバーを管理するには、この章で説明する組込みプロシージャではなく、 |
次に、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
文を使用して、アクティブ・データベースにアクティブ・スタンバイ・ペアのレプリケーション・スキームを作成します。
次の例では、cacheact
、cachestand
およびsubscr
はそれぞれ、アクティブ・データベース、スタンバイ・データベースおよび読取り専用サブスクライバ・データベースのチェックポイント・ファイルおよびトランザクション・ログ・ファイルのファイル名接頭辞です。また、sys3
、sys4
および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データベース(cachealone1
、cachealone2
、cacheactive
、cachestandby
、rosubscriber
)で最初は空になっています。
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 SETS
、CUBE
、ROLLUP
、GROUPING
、GROUPING_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 SETS
、CUBE
、ROLLUP
、GROUPING
、GROUPING_ID
またはGROUP_ID
と一緒には使用できません。
問合せには分析SQL関数を含めることはできません。
PassThrough
接続属性は0に設定する必要があります。
問合せをアクティブ・スタンバイ・グリッド・メンバーのスタンバイ・データベースに対して実行することはできません。
データの場所を変更せずにグローバル問合せを実行できます。SQL関数を使用して情報を含むグリッド・ノードを判断してから、そのノードのデータに対する問合せを実行できます。
キャッシュ・グリッド内のデータの場所に関する情報を取得するには、グローバル問合せで次のSQL関数を使用します。
TTGRIDUSERASSIGNEDNAME()
- 問合せが実行されるノードのユーザー割当て名を返します。ユーザーは、ttGridAttach
組込みプロシージャのコール時に名前を割り当てます。Oracle Clusterwareを使用している場合は、ttGridAttach
を直接コールすることはなく、ユーザー割当て名はTimesTenにより生成されます。
これらの関数はSELECT
文およびSELECT
文の次の句で使用できます。
WHERE
句
GROUP BY
句
ORDER BY
句
図6-1に、ユーザー割当て名alone1
およびalone2
を持つメンバーと、cacheact
およびcachestand
のノードからなるアクティブ・スタンバイ・ペアで構成されたキャッシュ・グリッドを示します。問合せではスタンバイ・データベースからはデータを取得しません。スタンバイ・データベースには、アクティブ・データベースと同じデータが格納されています。
次の例では、グリッド・メンバーの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
ユーティリティ・コマンドを使用してデータベースを再作成して、これらのデータベースに新しいグローバル・キャッシュ・グループが含まれるようにします。