動的キャッシュ・グループの手動によるロードおよびリフレッシュの例
次の例に、動的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 >