システム管理キャッシュ・グループ(READONLY、AWTおよびSWT)で必要な処理が行われない場合は、CREATE USERMANAGED CACHE GROUP文を使用して、カスタマイズされたキャッシュ動作を実装するユーザー管理キャッシュ・グループを作成できます。
この項では、カスタマイズされたキャッシュ・グループの作成に使用するCREATE USERMANAGED CACHE GROUP文をいくつか示します。
この項では、次の例を示します。
この例では、単一表customerに対して、update_anywhere_customersというUSERMANAGEDキャッシュ・グループを作成します。TimesTenまたはOracleのいずれか一方でのcustomer表への更新は、もう一方に双方向に伝播されます。図2.11に、USERMANAGEDキャッシュ・グループupdate_anywhere_customers を示します。
この例では、AUTOREFRESH属性が設定されているため、キャッシュ・グループは30秒ごとにOracleから増分更新されます。ユーザーはuser1です。表記述内のPROPAGATE属性は、TimesTenキャッシュ内のcustomer表への更新がOracleへ伝播されることを示しています。
CREATE USERMANAGED CACHE GROUP update_anywhere_customers
AUTOREFRESH
MODE INCREMENTAL
INTERVAL 30 SECONDS
FROM
user1.customer (custid INTEGER NOT NULL,
name VARCHAR2(100) NOT NULL,
addr VARCHAR2(100),
zip VARCHAR2(10),
PRIMARY KEY(custid),
PROPAGATE);
この例では、western_customersというUSERMANAGEDキャッシュ・グループを作成します。このキャッシュ・グループには、4つの関連表customer、ordertab、order_detailsおよびcust_interestが含まれています。図2.12に、キャッシュ・グループとその表を示します。
western_customersキャッシュ・グループ内の各表には主キーがあります。キャッシュ・グループ内の表は、外部キー関係を介して互いにリンクされています。customer表は、ルート表であるため、キャッシュ・グループ内の別の表を参照しません。ルート表には、ルート表にキャッシュされる行を制限するWHERE句が含まれています。
PROPAGATE属性は、キャッシュ内の表に対するすべての変更が、対応するOracle表にコミット時に自動的に伝播されるように指定します。
CREATE USERMANAGED CACHE GROUP western_customers
FROM
user1.customer (
custid INTEGER NOT NULL,
name VARCHAR2(100) NOT NULL,
addr VARCHAR2(100),
zip VARCHAR2(10),
region VARCHAR2(10),
PRIMARY KEY(custid),
PROPAGATE)
WHERE (customer.region = 'Western'),
user1.ordertab(orderid NUMBER NOT NULL,
custid INTEGER NOT NULL,
PRIMARY KEY (orderid),
FOREIGN KEY (custid) REFERENCES customer(custid),
PROPAGATE),
user1.order_details(orderid NUMBER NOT NULL,
itemit NUMBER NOT NULL,
quantity NUMBER NOT NULL,
PRIMARY KEY (orderid, itemid),
FOREIGN KEY (orderid) REFERENCES ordertab(orderid),
PROPAGATE),
user1.cust_interest(custid INTEGER NOT NULL,
interest VARCHAR2(10) NOT NULL,
PRIMARY KEY (custid, interest),
FOREIGN KEY (custid) REFERENCES customer(custid),
PROPAGATE);