アクティブ・スタンバイ・ペアでの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を参照してください
ノート:
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オブジェクトの作成」を参照してください。
-
レプリケートされない他のすべてのDDL文(マテリアライズド・ビューは除く)。
既存のアクティブ・スタンバイ・ペアでの新しいPL/SQLオブジェクトの作成
既存のアクティブ・スタンバイ・ペアに新しいPL/SQLプロシージャ、パッケージ、パッケージ本体またはファンクションを追加するために実行する、いくつかのタスクを示します。
-
アクティブ・データベースでPL/SQLオブジェクトを作成します。
CREATE
文はスタンバイ・データベースにレプリケートされません。 -
スタンバイ・データベースおよびすべてのサブスクライバでのPL/SQLオブジェクトの作成。
-
アクティブ・データベースの新しいPL/SQLオブジェクトに権限を付与します。
GRANT
文はスタンバイ・データベースおよびすべてのサブスクライバにレプリケートされます。
アクティブ・スタンバイ・ペアでのDDL変更に関する制限事項
アクティブ・スタンバイ・ペアにおいて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 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
の場合は、スタンバイ・マスターで順序を作成または削除できます。
-
アクティブ・スタンバイ・ペアでのDDL変更の方法を示す例
これらの例では、アクティブ・スタンバイ・ペアでのDDL変更の方法を実際に示します。
次の例は、表を作成してアクティブ・スタンバイ・ペアに含めるときのDDLの変更を示しています。
アクティブ・データベースで、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
コマンドを使用して、どの表がアクティブ・スタンバイ・ペアに含まれているかを確認します。
次の例は、表を作成して後からアクティブ・スタンバイ・ペアに含めるときのDDLの変更を示しています。
アクティブ・データベースで、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.
この例では、表をアクティブ・スタンバイ・ペアに含めるのに主キーを必要としない場合について示しています。
次の例では、CREATE INDEX
がレプリケートされた場合のDDLの変更を示します。
アクティブ・データベースで、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 range index on columns: B TAB2: unique range index on columns: A 2 indexes found. Indexes on table TERRY.NEWTAB: NEWTAB: unique range index on columns: A 1 index found. Indexes on table TERRY.TABINCLUDE: TABINCLUDE: unique range index on columns: A 1 index found. 4 indexes found on 3 tables.
次の例では、CREATE SYNONYM
がレプリケートされた場合のDDLの変更を示します。
DDLReplicationLevel
はデフォルトの2
に設定されています。tabinclude
のシノニムを作成します。
Command> CREATE SYNONYM syntabinclude FOR tabinclude; Synonym created.
スタンバイ・データベースで、ttIsql
synonyms
コマンドを使用して、CREATE SYNONYM
文がレプリケートされていることを確認します。
Command> synonyms; TERRY.SYNTABINCLUDE 1 synonym found.