動的キャッシュ・グループの手動によるロードおよびリフレッシュの例

次の例に、動的AWTキャッシュ・グループにキャッシュされるOracle Database表の定義を示します。

Oracle Databaseで、スキーマ所有者salesとして接続します。

Oracle Database表は、スキーマ・ユーザーsalesが所有しています。

CREATE TABLE customer
(cust_num NUMBER(6) NOT NULL PRIMARY KEY,
 region   VARCHAR2(10),
 name     VARCHAR2(50),
 address  VARCHAR2(100));

キャッシュされたOracle Database表sales.customerのデータは、次のとおりです。

CUST_NUM   REGION    NAME              ADDRESS
--------   -------   ---------------   ---------------------------    
       1   West      Frank Edwards     100 Pine St. Portland OR
       2   East      Angela Wilkins    356 Olive St. Boston MA
       3   Midwest   Stephen Johnson   7638 Walker Dr. Chicago IL

TimesTenデータベースで、TimesTenキャッシュ管理ユーザーとして接続します。次の文では、sales.customer表をキャッシュする動的AWTキャッシュ・グループnew_customersが作成されます:

CREATE DYNAMIC ASYNCHRONOUS WRITETHROUGH CACHE GROUP new_customers
FROM sales.customer
 (cust_num NUMBER(6) NOT NULL,
  region   VARCHAR2(10),
  name     VARCHAR2(50),
  address  VARCHAR2(100),
  PRIMARY KEY(cust_num));

TimesTenキャッシュ表sales.customerは、最初は空になっています:

Command> SELECT * FROM sales.customer;
0 rows found.

次のLOAD CACHE GROUP文では、キャッシュされたOracle Database表からTimesTenキャッシュ表に3つのキャッシュ・インスタンスがロードされます。

Command> LOAD CACHE GROUP new_customers COMMIT EVERY 256 ROWS;
3 cache instances affected.
Command> SELECT * FROM sales.customer;
< 1, West, Frank Edwards, 100 Pine St. Portland OR >
< 2, East, Angela Wilkins, 356 Olive St. Boston MA >
< 3, Midwest, Stephen Johnson, 7638 Walker Dr. Chicago IL >

Oracle Databaseで、salesスキーマ・ユーザーとして接続し、新しい行の挿入、既存の行の更新および既存の行の削除によって、キャッシュされたOracle Database表を変更します:

SQL> INSERT INTO customer
  2  VALUES (4, 'East', 'Roberta Simon', '3667 Park Ave. New York NY');
SQL> UPDATE customer SET name = 'Angela Peterson' WHERE cust_num = 2;
SQL> DELETE FROM customer WHERE cust_num = 3;
SQL> COMMIT;
SQL> SELECT * FROM customer;
CUST_NUM   REGION    NAME              ADDRESS
--------   -------   ---------------   ---------------------------    
       1   West      Frank Edwards     100 Pine St. Portland OR
       2   East      Angela Peterson   356 Olive St. Boston MA
       4   East      Roberta Simon     3667 Park Ave. New York NY

TimesTenデータベースで、動的キャッシュ・グループに対して発行されたREFRESH CACHE GROUP文では、キャッシュされたOracle Database表にコミットされた更新および削除のみをキャッシュ表にリフレッシュします。新しいキャッシュ・インスタンスはキャッシュ表にロードされません。このため、既存のキャッシュ・インスタンスのみがリフレッシュされます。その結果、キャッシュ表のキャッシュ・インスタンスの数は、キャッシュされたOracle Database表の行数より少ないか同じになります。

Command> REFRESH CACHE GROUP new_customers COMMIT EVERY 256 ROWS;
2 cache instances affected.
Command> SELECT * FROM sales.customer;
< 1, West, Frank Edwards, 100 Pine St. Portland OR >
< 2, East, Angela Peterson, 356 Olive St. Boston MA >

キャッシュ表にはコミットされた挿入のみがロードされるため、後続のLOAD CACHE GROUP文では、キャッシュされたOracle Database表からTimesTenキャッシュ表に1つのキャッシュ・インスタンスがロードされます。このため、新規キャッシュ・インスタンスのみがロードされます。LOAD CACHE GROUP文によって、すでにキャッシュ表に存在するキャッシュ・インスタンスは変更されません(これは、キャッシュされたOracle Database表の対応する行が更新または削除された場合でも同じです)。

Command> LOAD CACHE GROUP new_customers COMMIT EVERY 256 ROWS;
1 cache instance affected.
Command> SELECT * FROM sales.customer;
< 1, West, Frank Edwards, 100 Pine St. Portland OR >
< 2, East, Angela Peterson, 356 Olive St. Boston MA >
< 4, East, Roberta Simon, 3667 Park Ave. New York NY >