ヘッダーをスキップ
Oracle® TimesTen In-Memory Database開発者および管理者ガイド
11gリリース2 (11.2.2)
B66443-07
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

7 アクティブ・スタンバイ・ペアの変更

この項の内容は次のとおりです。

アクティブ・スタンバイ・ペアのDDLの変更

次の各項では、特定の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文はレプリケートされません。


    注意:

    次の場合にはレプリケーション・スキームから表を除外することが考えられます。
    • NULLを指定できない列に主キーも一意索引もないレプリケーション・スキームに表を作成する場合。

    • データをローカルでのみ使用し、表の更新はレプリケートしない一時表を作成する場合。


    アクティブ・スタンバイ・ペアに既存の表を追加するには、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文

レプリケーション・エージェントを停止せずに、アクティブ・スタンバイ・ペアで次の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プロシージャ、パッケージ、パッケージ本体またはファンクションを追加するには、次のタスクを実行します。

  1. アクティブ・データベースでPL/SQLオブジェクトを作成します。CREATE文はスタンバイ・データベースにレプリケートされません。

  2. スタンバイ・データベースおよびすべてのサブスクライバでのPL/SQLオブジェクトの作成。

  3. アクティブ・データベースの新しいPL/SQLオブジェクトに権限を付与します。GRANT文はスタンバイ・データベースおよびすべてのサブスクライバにレプリケートされます。

アクティブ・スタンバイ・ペアのDDLの変更に関する制限

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 USERALTER USERDROP USER

    • CREATE TABLEDROP TABLE

    • CREATE INDEXDROP INDEX

    • GRANTREVOKE

    • CREATE SYNONYMDROP SYNONYM

DDLReplicationLevelが3の場合

  • CREATE SEQUENCE ... CYCLE文はレプリケートされません。

  • DDLReplicationLevel=3の場合、次の文はスタンバイ・データベースで実行することはできません。

    • CREATE INDEXDROP INDEX

    • DDLReplicationAction='INCLUDE'の場合、CREATE SEQUENCEDROP SEQUENCE


      注意:

      ただし、DDLReplicationAction='EXCLUDE'DDLReplicationLevel=3の場合は、スタンバイ・マスターで順序を作成または削除できます。

例: アクティブ・スタンバイ・ペアのDDLの変更

例7-1 表を作成し、アクティブ・スタンバイ・ペアに含める

アクティブ・データベースで、DDLReplicationLevel2に、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 表を作成し、後からアクティブ・スタンバイ・ペアに追加する

アクティブ・データベースで、DDLReplicationLevel2に、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.

例7-4 CREATE SYNONYMがレプリケートされる

DDLReplicationLevelはデフォルトの2に設定されています。tabincludeのシノニムを作成します。

Command> CREATE SYNONYM syntabinclude FOR tabinclude;
Synonym created.

スタンバイ・データベースで、ttIsql synonymsコマンドを使用して、CREATE SYNONYM文がレプリケートされていることを確認します。

Command> synonyms;
TERRY.SYNTABINCLUDE
1 synonym found.

アクティブ・スタンバイ・ペアへのその他の変更

アクティブ・スタンバイ・ペアに次の変更を加えるには、レプリケーション・エージェントを停止する必要があります。

  • キャッシュ・グループを含めるまたは除外する。

  • サブスクライバを追加または削除する。

  • STORE句の値を変更する。

  • ネットワーク操作を変更する(ADD ROUTE句またはDROP ROUTE句)。

上記のリストに従ってアクティブ・スタンバイ・ペアを変更するには、次のタスクを実行します。

  1. アクティブ・データベースでレプリケーション・エージェントを停止します。「レプリケーション・エージェントの起動および停止」を参照してください。

  2. アクティブ・スタンバイ・ペアにキャッシュ・グループが含まれている場合、アクティブ・データベースでキャッシュ・エージェントを停止します。

  3. ALTER ACTIVE STANDBY PAIR文を使用して、レプリケーション・スキームを変更します。「例: アクティブ・スタンバイ・ペアの変更」を参照してください。

  4. アクティブ・データベースでレプリケーション・エージェントを起動します。「レプリケーション・エージェントの起動および停止」を参照してください。

  5. アクティブ・スタンバイ・ペアにキャッシュ・グループが含まれている場合、アクティブ・データベースでキャッシュ・エージェントを起動します。

  6. スタンバイ・データベースおよびサブスクライバを破棄します。

  7. アクティブ・データベースをスタンバイ・データベースに複製します。ttRepAdmin -duplicateユーティリティまたはttRepDuplicateEx C関数を使用して、データベースを複製できます。アクティブ・スタンバイ・ペアにキャッシュ・グループが含まれている場合、キャッシュ・グループを保持するには、ttRepAdmin-keepCGコマンドライン・オプションを使用します。「データベースの複製」を参照してください。

  8. スタンバイ・データベースでレプリケーション・エージェント・ポリシーを設定し、レプリケーション・エージェントを起動します。「レプリケーション・エージェントの起動および停止」を参照してください。

  9. スタンバイ・データベースがSTANDBY状態になるまで待機します。状態を確認するには、ttRepStateGet組込みプロシージャを使用します。

  10. アクティブ・スタンバイ・ペアにキャッシュ・グループが含まれている場合、ttCacheStart組込みプロシージャまたはttAdmin -cacheStartユーティリティを使用して、スタンバイ・データベースのキャッシュ・エージェントを起動します。

  11. スタンバイ・データベースからすべてのサブスクライバを複製します。詳細は、「サブスクライバへのマスター・データベースの複製」を参照してください。アクティブ・スタンバイ・ペアにキャッシュ・グループが含まれている場合、ttRepAdmin-noKeepCGコマンドライン・オプションを使用し、サブスクライバでキャッシュ・グループを通常のTimesTen表に変換します。「データベースの複製」を参照してください。

  12. サブスクライバでレプリケーション・エージェント・ポリシーを設定し、各サブスクライバ・データベースでエージェントを起動します。「レプリケーション・エージェントの起動および停止」を参照してください。

例: アクティブ・スタンバイ・ペアの変更

例7-5 アクティブ・スタンバイ・ペアへのサブスクライバの追加

アクティブ・スタンバイ・ペアにサブスクライバ・データベースを追加します。

ALTER ACTIVE STANDBY PAIR
  ADD SUBSCRIBER sub1;

例7-6 アクティブ・スタンバイ・ペアからのサブスクライバの削除

アクティブ・スタンバイ・ペアからサブスクライバ・データベースを削除します。

ALTER ACTIVE STANDBY PAIR
  DROP SUBSCRIBER sub1
  DROP SUBSCRIBER sub2;

例7-7 サブスクライバのPORTおよびTIMEOUT設定の変更

サブスクライバsub1およびsub2PORTおよびTIMEOUT設定を変更します。

ALTER ACTIVE STANDBY PAIR
  ALTER STORE sub1 SET PORT 23000 TIMEOUT 180
  ALTER STORE sub2 SET PORT 23000 TIMEOUT 180;

例7-8 アクティブ・スタンバイ・ペアへのキャッシュ・グループの追加

アクティブ・スタンバイ・ペアに1つのキャッシュ・グループを追加します。

ALTER ACTIVE STANDBY PAIR
  INCLUDE CACHE GROUP cg0;