この項の内容は次のとおりです。
次の各項では、特定のDDL文の自動レプリケーションを構成する方法について説明します。つまり、サポートされているDDL文をアクティブ・マスターで実行すると、アクティブ・スタンバイ・ペアのレプリケーション・スキーム内のすべてのデータベースに、そのDDL文が自動的にレプリケートされます。
DDLReplicationLevel
およびDDLReplicationAction
接続属性を使用して、DDL文によって作成または削除されるオブジェクトの、どれをアクティブ・スタンバイ・ペアのレプリケーション・スキームに含まれるデータベースにレプリケートするかを制御します。これらの接続属性の詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTenデータベースを識別するためのデータソース名の指定に関する説明を参照してください。
DDLReplicationLevel
接続属性によって、レプリケートされるDDL文を制御します。
DDLReplicationLevel=1
。表、索引またはシノニムのCREATE
文またはDROP
文はスタンバイ・データベースにレプリケートされません。ただし、レプリケート表に対して列の追加または削除を行うことで、それらのアクションがスタンバイ・データベースにレプリケートされます。
DDLReplicationLevel=2
(デフォルト)では、表、索引およびシノニムの作成および削除のレプリケーションが有効になります。
表をレプリケーション・スキームに含めるには、表を作成する前に、DDLReplicationAction
接続属性を'INCLUDE'
(デフォルト)に設定する必要があります。DDLReplicationAction='EXCLUDE'
の場合、表はレプリケーション・スキームに含まれません。表がレプリケーション・スキームから除外された場合、表を作成または削除するためのDDL文はスタンバイ・マスターにレプリケートされますが、表に対して実行されるDML文はレプリケートされません。
注意: 次の場合にはレプリケーション・スキームから表を除外することが考えられます。
|
アクティブ・スタンバイ・ペアに既存の表を追加するには、ALTER ACTIVE STANDBY PAIR INCLUDE TABLE
文を使用します。表は空である必要があります。
ただし、ALTER TABLE ... ADD COLUMN NOT NULL DEFAULT
文を使用してNOT NULL
列をレプリケーション・スキームの一部である表に追加して表を修正することはできません。表にNOT NULL
列を追加する前に、まず、レプリケーション・スキームから表を削除する必要があります。
DDLReplicationLevel=3
では次のことが可能です。
DDLReplicationLevel=2
を指定した場合にレプリケートされる同じオブジェクトの、レプリケーション・スキームのすべてのデータベースへのレプリケーション。
レプリケーション・スキームのすべてのデータベースへのビューの作成と削除のレプリケーション。
レプリケーション・スキームのすべてのデータベースへの作成および削除の順序のレプリケーション(作成前にDDLReplicationAction='INCLUDE'
(デフォルト)の場合)。DDLReplicationAction='EXCLUDE'
の場合、順序はレプリケーション・スキームに含まれません。順序がレプリケーション・スキームから除外される場合は、順序の作成と削除のためのDDL文はスタンバイ・マスターにレプリケートされますが、アクティブ・マスターとスタンバイ・マスターのそれぞれの順序は別々のオブジェクトとなります。
キャッシュ管理ユーザーの名前とパスワードをttCacheUidPwdSet
組込みプロシージャを使用してアクティブ・マスターに設定するときに、結果をスタンバイ・マスターにレプリケーション。アクティブ・マスターに対してttCacheUidPwdSet
組込みプロシージャを実行するために、キャッシュ・エージェントまたはレプリケーション・エージェントを停止し、再起動する必要はありません。詳細は、「レプリケーションで使用されるユーザー名またはパスワードの変更」を参照してください。
このレベルを使用すると、ALTER TABLE ... ADD COLUMN NOT NULL DEFAULT
文を使用して、NOT NULL
列をレプリケーション・スキームの一部である表に追加するように表を変更できます。
DDLReplicationLevel
属性は接続ストリングの一部として設定でき、また、接続開始後にALTER SESSION
文を使用して変更できます。
ALTER SESSION SET DDL_REPLICATION_LEVEL=3;
DDLReplicationAction
属性は接続ストリングの一部として設定でき、また、接続開始後にALTER SESSION
文を使用して変更できます。
ALTER SESSION SET ddl_replication_action='EXCLUDE';
詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のALTER SESSION文に関する説明およびALTER ACTIVE STANDBY PAIR文に関する説明を参照してください。
注意: DDLCommitBehavior=0 (デフォルト)の場合、DDL操作は自動的にコミットされます。RETURN TWOSAFE が指定されている場合、「RETURN TWOSAFE」で説明されているように、エラーおよびタイムアウトが発生する可能性があります。RETURN TWOSAFE タイムアウトが発生すると、指定されているLOCAL COMMIT ACTION に関係なく、DDLトランザクションはローカルでコミットされます。 |
レプリケーション・エージェントを停止せずに、アクティブ・スタンバイ・ペアで次のDDL文を実行できます。また、これらの文はレプリケーション・スキームのすべてのデータベースにレプリケートされます。DDLReplicationLevel
が2または3の場合(デフォルトは2)、次の文は自動的にレプリケートされます。
ユーザーを作成、変更、削除する際のCREATE USER
文、ALTER USER
文、DROP USER
文。
ユーザーに権限を付与する、または権限を取り消す際のGRANT
文またはREVOKE
文。
ALTER TABLE ... ADD COLUMN
文またはALTER TABLE ... DROP COLUMN
文を使用して、列を追加または削除して表を変更します。これらはレプリケートされる唯一のALTER TABLE
句です。ただし、DDLReplicationLevel=2
の場合は、ALTER TABLE ... ADD COLUMN NOT NULL DEFAULT
文を使用してNOT NULL
列をレプリケーション・スキームの一部である表に追加して表を修正することができません。この文はDDLReplicationLevel=3
の場合に実行できます。
CREATE TABLE
文またはDROP TABLE
文を使用して、表(グローバル一時表を含む)を作成または削除します。また、新しい表をアクティブ・スタンバイ・ペアにも含められます。
CREATE SYNONYM
文またはDROP SYNONYM
文を使用して、シノニムを作成または削除します。
CREATE INDEX
文またはDROP INDEX
文を使用して、索引を作成または削除します。
レプリケーション・エージェントを停止せずに、アクティブ・スタンバイ・ペアで次のタスクを実行できます。また、これらの文はレプリケーション・スキームのすべてのデータベースにレプリケートされます。DDLReplicationLevel
が3に設定されている場合、次の文は自動的にレプリケートされます。
ビューを作成または削除する際のCREATE VIEW
文またはDROP VIEW
文。
順序を作成または削除する際のCREATE SEQUENCE
文またはDROP SEQUENCE
文。順序の作成前にDDLReplicationAction
接続属性がINCLUDE
(デフォルト)に設定されている場合、これらの文はレプリケーション・スキーム内のすべてのデータベースに自動的にレプリケートされ、アクティブ・スタンバイ・ペアに含まれますが、DDLReplicationAction
接続属性がEXCLUDE
に設定されている場合、順序はレプリケーション・スキームに含まれません。
ttCacheUidPwdSet
組込みプロシージャを使用して、キャッシュ管理ユーザーのユーザー名とパスワードをアクティブ・マスターに設定するときに、キャッシュ・エージェントやレプリケーション・エージェントを停止する必要はありません。DDLReplicationLevel=3
の場合、この情報はスタンバイ・マスターに自動的にレプリケートされます。詳細は、「レプリケーションで使用されるユーザー名またはパスワードの変更」を参照してください。
レプリケーション・エージェントを停止した後にのみ、アクティブ・スタンバイ・ペアで次のタスクを実行できます。これらの文はスタンバイ・マスターにレプリケートされないため、これらの文のレプリケーションを実行するか、レプリケーション・エージェントの停止後にレプリケーション・スキーム内のすべてのノードに対してこれらの文を実行することにより、スタンバイ・マスターおよびすべてのサブスクライバに変更が伝播されたことを確認する必要があります。実行後にすべてのノードでレプリケーション・エージェントを再起動します。
マテリアライズド・ビューを作成、削除または変更するためのDDL文。
ALTER CACHE GROUP
... SET AUTOREFRESH MODE
文またはALTER CACHE GROUP
... SET AUTOREFRESH INTERVAL
文を使用した自動リフレッシュ・モードまたは自動リフレッシュ間隔の変更。
レプリケーション・エージェントを停止せずに、アクティブ・スタンバイ・ペアで次のタスクを実行できます。ただし、これらの文はスタンバイ・マスターにレプリケートされないため、これらの文のレプリケーションを実行するか、レプリケーション・エージェントの停止後にレプリケーション・スキーム内のすべてのノードに対してこれらの文を実行することにより、スタンバイ・マスターおよびすべてのサブスクライバに変更が伝播されたことを確認する必要があります。
ALTER CACHE GROUP
... SET AUTOREFRESH STATE
文を使用してキャッシュ・グループの自動リフレッシュ状態を変更。ただし、アクティブ・マスターでキャッシュ・グループの自動リフレッシュ状態をOFF
に設定することはできません。
PL/SQLファンクション、PL/SQLプロシージャ、PL/SQLパッケージまたはPL/SQLパッケージ本体の作成または削除。これらのオブジェクトのレプリケーション・エージェントを停止する必要はありません。PL/SQLオブジェクトの詳細は、「既存のアクティブ・スタンバイ・ペアでの新しいPL/SQLオブジェクトの作成」を参照してください。
レプリケートされない他のすべてのDDL文(マテリアライズド・ビューは除く)。
既存のアクティブ・スタンバイ・ペアに新しいPL/SQLプロシージャ、パッケージ、パッケージ本体またはファンクションを追加するには、次のタスクを実行します。
アクティブ・データベースでPL/SQLオブジェクトを作成します。CREATE
文はスタンバイ・データベースにレプリケートされません。
スタンバイ・データベースおよびすべてのサブスクライバでのPL/SQLオブジェクトの作成。
アクティブ・データベースの新しいPL/SQLオブジェクトに権限を付与します。GRANT
文はスタンバイ・データベースおよびすべてのサブスクライバにレプリケートされます。
DDLReplicationLevel
が2または3の場合
CREATE TABLE ... AS SELECT
文、ALTER TABLE ... ADD CONSTRAINT
文、ALTER TABLE ... ADD UNIQUE
文およびALTER TABLE ... MODIFY
文は、レプリケートされません。
索引が空の表に作成される場合にのみ、CREATE INDEX
文はレプリケートされます。移入済の表に新規の索引を作成するには、DDLReplicationLevel
を2未満の値に設定し、アクティブとスタンバイの両方に手動で索引を作成します。
DDLReplicationLevel
が2または3の場合、次の文はスタンバイ・データベースで実行することはできません。
CREATE USER
、ALTER USER
、DROP USER
CREATE TABLE
、DROP TABLE
CREATE INDEX
、DROP INDEX
GRANT
、REVOKE
CREATE SYNONYM
、DROP SYNONYM
DDLReplicationLevel
が3の場合
CREATE SEQUENCE ... CYCLE
文はレプリケートされません。
DDLReplicationLevel=3
の場合、次の文はスタンバイ・データベースで実行することはできません。
CREATE INDEX
、DROP INDEX
DDLReplicationAction='INCLUDE'
の場合、CREATE SEQUENCE
、DROP SEQUENCE
。
注意: ただし、DDLReplicationAction='EXCLUDE' でDDLReplicationLevel=3 の場合は、スタンバイ・マスターで順序を作成または削除できます。 |
例7-1 表を作成し、アクティブ・スタンバイ・ペアに含める
アクティブ・データベースで、DDLReplicationLevel
を2
に、DDLReplicationAction
を'INCLUDE'
に設定します。
Command > ALTER SESSION SET ddl_replication_level=2; Session altered. Command > ALTER SESSION SET ddl_replication_action='INCLUDE'; Session altered.
表を作成します。表には主キーまたは索引が含まれている必要があります。
Command > CREATE TABLE tabinclude (col1 NUMBER NOT NULL PRIMARY KEY); Table created.
tabinclude
に1行挿入します。
Command > INSERT INTO tabinclude VALUES (55); 1 row inserted.
スタンバイ・データベースで、INSERT
文がレプリケートされていることを確認します。これは、tabinclude
表がアクティブ・スタンバイ・ペアに含まれていることを示します。
Command > SELECT * FROM tabinclude; < 55 > 1 row found.
または、ttIsql
repschemes
コマンドを使用して、どの表がアクティブ・スタンバイ・ペアに含まれているかを確認します。
例7-2 表を作成し、後からアクティブ・スタンバイ・ペアに追加する
アクティブ・データベースで、DDLReplicationLevel
を2
に、DDLReplicationAction
を'EXCLUDE'
に設定します。
Command> ALTER SESSION SET ddl_replication_level=2; Session altered. Command> ALTER SESSION SET ddl_replication_action='exclude'; Session altered.
主キーまたは索引を含まない表を作成します。その表をアクティブ・スタンバイ・ペアに含めてみます。
Command> CREATE TABLE newtab (a NUMBER NOT NULL); Command> ALTER ACTIVE STANDBY PAIR INCLUDE TABLE newtab; 8000: No primary or unique index on non-nullable column found for replicated table TERRY.NEWTAB The command failed.
表に索引を作成します。その表をアクティブ・スタンバイ・ペアに含めます。
Command> CREATE UNIQUE INDEX ixnewtab ON newtab(a); Command> ALTER ACTIVE STANDBY PAIR INCLUDE TABLE newtab;
表に1行挿入します。
Command> INSERT INTO newtab VALUES (5); 1 row inserted.
スタンバイ・データベースで、行が挿入されていることを確認します。
Command> SELECT * FROM newtab; < 5 > 1 row found.
この例では、表をアクティブ・スタンバイ・ペアに含めるのに主キーを必要としない場合について示しています。
例7-3 CREATE INDEXがレプリケートされる
アクティブ・データベースで、DDLReplicationLevel=2
およびDDLReplicationAction='INCLUDE'
を設定します。
Command> ALTER SESSION SET ddl_replication_level=2; Session altered. Command> ALTER SESSION SET ddl_replication_action='include'; Session altered.
主キーを含む表を作成します。表は自動的にアクティブ・スタンバイ・ペアに含められます。
Command> CREATE TABLE tab2 (a NUMBER NOT NULL, b NUMBER NOT NULL, > PRIMARY KEY (a));
表に索引を作成します。
Command> CREATE UNIQUE INDEX ixtab2 ON tab2 (b);
スタンバイ・データベースで、CREATE INDEX
文がレプリケートされていることを確認します。
Command> indexes; Indexes on table TERRY.TAB2: IXTAB2: unique T-tree index on columns: B TAB2: unique T-tree index on columns: A 2 indexes found. Indexes on table TERRY.NEWTAB: NEWTAB: unique T-tree index on columns: A 1 index found. Indexes on table TERRY.TABINCLUDE: TABINCLUDE: unique T-tree index on columns: A 1 index found. 4 indexes found on 3 tables.
アクティブ・スタンバイ・ペアに次の変更を加えるには、レプリケーション・エージェントを停止する必要があります。
キャッシュ・グループを含めるまたは除外する。
サブスクライバを追加または削除する。
STORE
句の値を変更する。
ネットワーク操作を変更する(ADD ROUTE
句またはDROP ROUTE
句)。
上記のリストに従ってアクティブ・スタンバイ・ペアを変更するには、次のタスクを実行します。
アクティブ・データベースでレプリケーション・エージェントを停止します。「レプリケーション・エージェントの起動および停止」を参照してください。
アクティブ・スタンバイ・ペアにキャッシュ・グループが含まれている場合、アクティブ・データベースでキャッシュ・エージェントを停止します。
ALTER ACTIVE STANDBY PAIR
文を使用して、レプリケーション・スキームを変更します。「例: アクティブ・スタンバイ・ペアの変更」を参照してください。
アクティブ・データベースでレプリケーション・エージェントを起動します。「レプリケーション・エージェントの起動および停止」を参照してください。
アクティブ・スタンバイ・ペアにキャッシュ・グループが含まれている場合、アクティブ・データベースでキャッシュ・エージェントを起動します。
スタンバイ・データベースおよびサブスクライバを破棄します。
アクティブ・データベースをスタンバイ・データベースに複製します。ttRepAdmin
-duplicate
ユーティリティまたはttRepDuplicateEx
C関数を使用して、データベースを複製できます。アクティブ・スタンバイ・ペアにキャッシュ・グループが含まれている場合、キャッシュ・グループを保持するには、ttRepAdmin
で-keepCG
コマンドライン・オプションを使用します。「データベースの複製」を参照してください。
スタンバイ・データベースでレプリケーション・エージェント・ポリシーを設定し、レプリケーション・エージェントを起動します。「レプリケーション・エージェントの起動および停止」を参照してください。
スタンバイ・データベースがSTANDBY
状態になるまで待機します。状態を確認するには、ttRepStateGet
組込みプロシージャを使用します。
アクティブ・スタンバイ・ペアにキャッシュ・グループが含まれている場合、ttCacheStart
組込みプロシージャまたはttAdmin
-cacheStart
ユーティリティを使用して、スタンバイ・データベースのキャッシュ・エージェントを起動します。
スタンバイ・データベースからすべてのサブスクライバを複製します。詳細は、「サブスクライバへのマスター・データベースの複製」を参照してください。アクティブ・スタンバイ・ペアにキャッシュ・グループが含まれている場合、ttRepAdmin
で-noKeepCG
コマンドライン・オプションを使用し、サブスクライバでキャッシュ・グループを通常のTimesTen表に変換します。「データベースの複製」を参照してください。
サブスクライバでレプリケーション・エージェント・ポリシーを設定し、各サブスクライバ・データベースでエージェントを起動します。「レプリケーション・エージェントの起動および停止」を参照してください。
例7-5 アクティブ・スタンバイ・ペアへのサブスクライバの追加
アクティブ・スタンバイ・ペアにサブスクライバ・データベースを追加します。
ALTER ACTIVE STANDBY PAIR ADD SUBSCRIBER sub1;
例7-6 アクティブ・スタンバイ・ペアからのサブスクライバの削除
アクティブ・スタンバイ・ペアからサブスクライバ・データベースを削除します。
ALTER ACTIVE STANDBY PAIR DROP SUBSCRIBER sub1 DROP SUBSCRIBER sub2;