AWTキャッシュ・グループでパラレル伝播を使用する場合の表制約の制限
AWTキャッシュ・グループでパラレル伝播を使用する場合は、データの整合性を手動で維持する必要があります。
キャッシュされるOracle Database表の列に対する任意の一意索引、一意制約または外部キー制約は、TimesTen内のAWTキャッシュ表でも作成する必要があります。AWTキャッシュ表でこれらの制約を作成できずにパラレル伝播用に構成すると、TimesTenは制約が欠落している表に対してDML処理によりすべてのトランザクションをシリアライズします。たとえば、Oracle Databaseの表に対して作成された一意索引がTimesTenの対応するキャッシュ表に対して作成できない場合、この表に関するすべてのトランザクションがシリアライズされます。
TimesTenは、次のSQL文のいずれかが発行された場合に、TimesTenでキャッシュされていないOracle Databaseにおいて制約の欠落を自動的にチェックします。
-
AWTキャッシュ・グループを
CREATE ASYNCHRONOUS CACHE GROUP
文で作成する場合 -
AWTキャッシュ表に対して
CREATE UNIQUE INDEX
文で一意索引を作成する場合 -
AWTキャッシュ表に対して
DROP INDEX
文で一意索引を削除する場合
ノート:
ttCacheCheck
組込みプロシージャにより、制約の欠落のチェックを手動で開始できます。たとえば、TimesTenは、キャッシュされたOracle Database表でスキーマが変更された後は、制約の欠落を自動的にはチェックしません。Oracle Databaseでスキーマが変更された後には、TimesTenデータベースでttCacheCheck
を実行することにより、制約の欠落のチェックを手動で実行する必要があります。
制約の欠落を手動でチェックする必要があるその他の条件については、「AWTキャッシュ・グループの制約の欠落チェックの手動開始」を参照してください。
チェックによりキャッシュ表で制約が欠落していることが判明した場合、TimesTenは欠落している各制約に関する警告を発行します。
次のシナリオでは、DML処理を含むトランザクションがOracle Databaseに伝播された際にシリアライズされるように、キャッシュ表がマークされます。
-
一意索引または一意制約が欠落しているAWTキャッシュ表にDML処理を適用するトランザクション。
-
単一のAWTキャッシュ・グループ内の表に対して外部キー制約が欠落している。
-
外部キー関係の参照元表と参照先表の両方が同じAWTキャッシュ・グループ内にあり、外部キー関係が定義されていない場合は、両方の表に対してトランザクションのシリアライズを行うようにマークされます。
-
参照元表はAWTキャッシュ・グループ内にあるが、参照先表はAWTキャッシュ・グループ内にない場合、キャッシュ・グループ内の表に対してはトランザクションのシリアライズを行うようマークはされません。ユーザーに対して、制約が欠落していることを通知する警告が発行されるだけです。
-
参照先表はAWTキャッシュ・グループ内にあるが、参照元表はAWTキャッシュ・グループ内にない場合、キャッシュ・グループ内の表に対してはトランザクションのシリアライズを行うようマークはされません。ユーザーに対して、制約が欠落していることを通知する警告が発行されるだけです。
-
-
キャッシュ・グループ間で外部キー制約が欠落している。外部キー制約が欠落している個別のAWTキャッシュ・グループで表を定義した場合、両方の表に対してトランザクションのシリアライズを行うようにマークされます。
-
外部キー制約が欠落していることにより、2つのAWTキャッシュ・グループ間の外部キー制約のチェーンが破損した場合は、両方のAWTキャッシュ・グループ内のすべての表に対するトランザクションがシリアライズされます。
ノート:
Oracle Databaseトリガーにより、TimesTenが認識できない処理上の依存性が発生する場合があります。この場合、AWTキャッシュ・グループでのパラレル伝播を使用不可にするか、またはトリガーが作成されたAWTキャッシュ・グループで表をキャッシュしないようにする必要があります。
次に、AWTキャッシュ・グループの作成時に制約が欠落している例を示します。次の例では、Oracleデータベースのsales
スキーマに2つの表を作成します。active_customer
表とordertab
表の間には外部キー関係が存在します。この例ではパラレル伝播でこれらの表を使用するため、ordertab
表の外部キーに対して索引が作成されます。
SQL> CREATE TABLE active_customer (custid NUMBER(6) NOT NULL PRIMARY KEY, name VARCHAR2(50), addr VARCHAR2(100), zip VARCHAR2(12), region VARCHAR2(12) DEFAULT 'Unknown'); Table created. SQL> CREATE TABLE ordertab (orderid NUMBER(10) NOT NULL PRIMARY KEY, custid NUMBER(6) NOT NULL); Table created. SQL> ALTER TABLE ordertab ADD CONSTRAINT cust_fk FOREIGN KEY (custid) REFERENCES active_customer(custid); Table altered. SQL> CREATE INDEX order_idx on ordertab (custid);
TimesTenは、CREATE CACHE GROUP
が発行されるたびに、制約の欠落を自動的にチェックします。次の例では、active_customer
表を含む単一のキャッシュ・グループを作成します。active_customer
は参照先表であり、参照元表ordertab
はAWTキャッシュ・グループ内にないため、警告が発行されるだけです。active_customer
表に対しては、トランザクションのシリアライズを行うようマークはされません。
CREATE WRITETHROUGH CACHE GROUP update_cust FROM sales.active_customer (custid NUMBER(6) NOT NULL PRIMARY KEY, name VARCHAR2(50), addr VARCHAR2(100), zip VARCHAR2(12)); Warning 5297: The following Oracle foreign key constraints on AWT cache table SALES.ACTIVE_CUSTOMER contain cached columns that do not have corresponding foreign key constraints on TimesTen: SALES.CUST_FK [Outside of CG].
次の例ではTimesTenで2つのAWTキャッシュ・グループを作成しますが、1つにはactive_customer
表が含まれており、もう1つにはordertab
表が含まれています。キャッシュ・グループ間では外部キー制約が欠落しています。この場合、両方の表に対して警告が発行されますが、ordertab
表が参照元表で外部キーを含んでいる必要があるため、この表に対してのみトランザクションのシリアライズを行うようにマークされます。
CREATE WRITETHROUGH CACHE GROUP update_cust FROM sales.active_customer (custid NUMBER(6) NOT NULL PRIMARY KEY, name VARCHAR2(50), addr VARCHAR2(100), zip VARCHAR2(12); Warning 5297: The following Oracle foreign key constraints on AWT cache table sales.update_customer contain cached columns that do not have corresponding foreign key constraints on TimesTen: ordertab.cust_fk [Outside of CG]. CREATE WRITETHROUGH CACHE GROUP update_orders FROM sales.ordertab (orderid NUMBER(10) NOT NULL PRIMARY KEY, custid NUMBER(6) NOT NULL); Warning 5295: Propagation will be serialized on AWT cache table SALES.ORDERTAB because the following Oracle foreign key constraints on this table contain cached columns that do not have corresponding foreign key constraints on TimesTen: ORDERTAB.CUST_FK [Across AWT cache groups].