TimesTen Scaleoutの疑似列

疑似列は、表の実際の列ではありませんが、列と同じように動作します。疑似列は、列と同じコンテキストで使用される割当て値ですが、保存されません。

疑似列には選択操作を実行できますが、挿入操作や更新操作は実行できません。

TimesTen Scaleoutの疑似列は次のとおりです。

  • elementId#: データベースの一部を格納する要素。elementId#疑似列を使用して、行へのアクセス元の要素を判別します。この疑似列は、NOT NULL TT_INTEGERデータ型を戻します。

  • replicaSetId#: この疑似列を使用して、行が格納されているレプリカ・セットを判別します。この疑似列は、NOT NULL TT_INTEGERデータ型を戻します。

  • dataspaceId#: この疑似列を使用して、行のコピーが配置されているデータ領域を判別します。この疑似列は、NOT NULL TT_INTEGERデータ型を戻します。

ノート:

  • DML操作の場合、elementId#のかわりにreplicaSetId#を使用します。これは、SELECT...FOR UPDATEについても同様です。

  • SELECT操作の場合は、特定の要素から行を選択する場合を除いて、replicaSetId#を使用します。この場合、SELECT文でTT_GridQueryExec (GLOBAL)オプティマイザ・ヒントを使用します。詳細は、「TT_GridQueryExecオプティマイザ・ヒント」を参照してください。

次の各セクションでは、疑似列の使用方法について説明します。

疑似列を使用したデータの検索

この例では、疑似列を使用してデータを検索する方法を示します。まず、アプリケーションに接続する要素を判別します。次に、customers表に対する問合せが発行され、データが配置されているelementId#replicaSetId#およびdataspaceId#が戻されます。

Command> SELECT elementid# FROM dual;
< 1 >
1 row found.

Command> SELECT elementId#,replicasetid#,dataspaceId#,cust_id,last_name,first_name
         FROM customers WHERE cust_id BETWEEN 910 AND 920
         ORDER BY cust_id, last_name, first_name;
< 3, 2, 1, 910, Riley, Tessa >
< 1, 1, 1, 911, Riley, Rashad >
< 1, 1, 1, 912, Riley, Emma >
< 1, 1, 1, 913, Rivera, Erin >
< 1, 1, 1, 914, Roberts, Ava >
< 1, 1, 1, 915, Roberts, Lee >
< 3, 2, 1, 916, Roberts, Clint >
< 5, 3, 1, 917, Robertson, Faith >
< 3, 2, 1, 918, Robinson, Miguel >
< 3, 2, 1, 919, Robinson, Mozell >
< 5, 3, 1, 920, Rodgers, Darryl >
11 rows found.

疑似列および重複表の使用

この例では、重複表で疑似列を使用する方法を示します。まず、account_status表に対してttIsql describeコマンドを使用して、表が複製分散スキームであるかどうかを確認します。次に、要素1に接続されている接続から問合せを発行します。elementId#replicasetId#およびdataspaceId#が戻され、データの場所を判別できます。この例では、要素2に接続されている接続から同じ問合せを繰り返します。この例は、データがアプリケーションの接続先の要素に配置され、データベースのすべての要素に存在することを示しています(複製分散スキーム)。

Command> describe account_status;
 
Table SAMPLEUSER.ACCOUNT_STATUS:
  Columns:
   *STATUS                          NUMBER (2) NOT NULL
    DESCRIPTION                     VARCHAR2 (100) INLINE NOT NULL
  DUPLICATE
 
1 table found.
(primary key columns are indicated with *)
Command> SELECT elementId# FROM dual; 
< 1 >
1 row found.

Command> SELECT elementId#,replicaSetId#,dataspaceId#, *
         FROM account_status;
< 1, 1, 1, 10, Active - Account is in good standing >
< 1, 1, 1, 20, Pending - Payment is being processed >
< 1, 1, 1, 30, Grace - Automatic payment did not process successfully >
< 1, 1, 1, 40, Suspend - Account is in process of being disconnected >
< 1, 1, 1, 50, Disconnected - You can no longer make calls or receive calls >
5 rows found.

接続から要素2に同じ問合せを発行します。

Command> SELECT elementid# from dual;
< 2 >
1 row found.

Command> SELECT elementId#,replicaSetId#,dataspaceId#, *
         FROM account_status;
< 2, 1, 2, 10, Active - Account is in good standing >
< 2, 1, 2, 20, Pending - Payment is being processed >
< 2, 1, 2, 30, Grace - Automatic payment did not process successfully >
< 2, 1, 2, 40, Suspend - Account is in process of being disconnected >
< 2, 1, 2, 50, Disconnected - You can no longer make calls or receive calls >
5 rows found.

疑似列を使用したローカル要素の検索

この例では、アプリケーションに接続する要素の情報を返すために疑似列を使用する方法を示します。6つのデータ・インスタンスを含み、K-safetyを2に設定したグリッドを作成したと仮定します。この例の目的は、アプリケーションの接続先の要素の要素ID、レプリカ・セットおよびデータ領域グループを特定する方法を示すことです。

この例では、接続の接続先は要素1です。dual表から選択すると、現在のローカル接続の要素ID、レプリカ・セットIDおよびデータ領域IDが戻されます。この例では、要素1はレプリカ・セット1およびデータ領域1にあります。

Command> SELECT elementId#,replicaSetId#,dataspaceId# FROM dual;
< 1, 1, 1 >
1 row found.

この例では、接続の接続先は要素3です。要素3はレプリカ・セット2およびデータ領域1にあります。

Command> SELECT elementId#,replicaSetId#,dataspaceId# FROM dual;
< 3, 2, 1 >
1 row found.

インスタンスに関連付けられた要素IDの表示

この例は、ttGridAdmin dbStatus -elementコマンドを使用して、各インスタンスに関連付けられた要素IDを表示する方法を示しています。このコマンドによって、各要素のステータスも示されます。(このコマンドは、アクティブな管理インスタンスから、インスタンス管理者として発行する必要があります)。

詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』「データベースのステータスの監視(dbStatus)」を参照してください。

$ ttGridAdmin dbStatus -element
Database database1 element level status as of Thu Apr  5 12:57:44 PDT 2018
 
Host            Instance Elem Status Date/Time of Event  Message
--------------- -------- ---- ------ ------------------- -------
host1           instance1    1 opened 2018-04-05 11:15:33
host2           instance2   2 opened 2018-04-05 11:15:33
host3           instance3   3 opened 2018-04-05 11:15:33
host4           instance4   4 opened 2018-04-05 11:15:33
host5           instance5   5 opened 2018-04-05 11:15:33
host6           instance6   6 opened 2018-04-05 11:15:33