次の項では、サンプル・レプリケーション・スキームを構成および起動する方法を示します。
ノート: この章の手順を実行するには、ADMIN 権限が必要です。 |
この項では、1つのサブスクライバを持つアクティブ・スタンバイ・ペアの作成方法について説明します。アクティブ・データベースはmaster1
です。スタンバイ・データベースはmaster2
です。サブスクライバ・データベースはsubscriber1
です。わかりやすくするために、すべてのデータベースは同じコンピュータserver1
に存在することとします。
図2-1にこの構成を示します。
この項の内容は次のとおりです。
『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTenデータベースの管理に関する説明に従って、master1
、master2
およびsubscriber1
というDSNを作成します。
UNIXまたはLinuxシステムの場合は、テキスト・エディタを使用して次のodbc.ini
ファイルを作成します。
[master1] DataStore=/tmp/master1 DatabaseCharacterSet=AL32UTF8 ConnectionCharacterSet=AL32UTF8 [master2] DataStore=/tmp/master2 DatabaseCharacterSet=AL32UTF8 ConnectionCharacterSet=AL32UTF8 [subscriber1] DataStore=/tmp/subscriber1 DatabaseCharacterSet=AL32UTF8 ConnectionCharacterSet=AL32UTF8
Windowsの場合は、ODBCアドミニストレータを使用して同じ接続属性を設定します。他のすべての設定には、デフォルト値を使用します。
接続を介した通信を暗号化するために相互認証を必要とするTransport Layer Security (TLS)を使用して、レプリケーション・エージェント(およびレプリケーション・エージェントと通信するユーティリティ)間のセキュアなTCP/IPネットワーク接続を有効にできます。証明書を生成することもできます。詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のTimesTenレプリケーションのTransport Layer Securityに関する項を参照してください。
ttIsql
ユーティリティを使用して、master1
データベースに接続します。
% ttIsql master1 Copyright (c) 1996-2011, Oracle. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "DSN=master1"; Connection successful: DSN=master1;UID=timesten;DataStore=/tmp/master1; DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=AL32UTF8; (Default setting AutoCommit=1) Command>
employees
表を作成します。
Command> CREATE TABLE employees ( employee_id NUMBER(6) PRIMARY KEY, first_name VARCHAR2(20), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25) NOT NULL UNIQUE, phone_number VARCHAR2(20), hire_date DATE NOT NULL, job_id VARCHAR2(10) NOT NULL, salary NUMBER(8,2), commission_pct NUMBER(2,2), manager_id NUMBER(6), department_id NUMBER(4) ) ;
master1
で、アクティブ・スタンバイ・ペアを定義します。
Command> CREATE ACTIVE STANDBY PAIR master1, master2 SUBSCRIBER subscriber1;
アクティブ・スタンバイ・ペアの定義の詳細は、第3章「アクティブ・スタンバイ・ペアのレプリケーション・スキームの定義」を参照してください。
master1
で、レプリケーション・エージェントを起動します。
Command> CALL ttRepStart;
詳細は、「レプリケーション・エージェントの起動と停止」を参照してください。
アクティブ・スタンバイ・ペアの新しいデータベースの状態は、アクティブ・データベースが設定されるまでIDLE
状態になります。
ttRepStateSet
組込みプロシージャを使用して、master1
をアクティブ・データベースとして指定します。
Command> CALL ttRepStateSet('ACTIVE');
master1
の状態を確認します。
Command> CALL ttRepStateGet; < ACTIVE > 1 row found.
ttuser
というパスワードを持つユーザーttuser
を作成し、ttuser
にADMIN
権限を付与します。ADMIN
権限を持つユーザーの作成は、次のステップのアクセス制御で必要です。
Command> CREATE USER ttuser IDENTIFIED BY ttuser; User created. Command> GRANT ADMIN TO ttuser;
ttIsql
を終了し、ttuser
(ADMIN
権限を持つ、作成されたユーザー)としてttRepAdmin
ユーティリティを-duplicate
オプションとともに使用して、アクティブ・データベースをスタンバイ・データベースに複製します。2つの異なるホストを使用している場合は、ターゲット・ホストからttRepAdmin
コマンドを入力してください。
% ttRepAdmin -duplicate -from master1 -host server1 -uid ttuser -pwd ttuser master2
ttIsql
を使用してmaster2
データベースに接続し、レプリケーション・エージェントを起動します。
% ttIsql master2 Copyright (c) 1996-2011, Oracle. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "DSN=master2"; Connection successful: DSN=master2;UID=timesten;DataStore=/tmp/master2; DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=AL32UTF8; (Default setting AutoCommit=1) Command> CALL ttRepStart;
スタンバイ・データベースのレプリケーション・エージェントを起動すると、状態が自動的にSTANDBY
に設定されます。master2
の状態を確認します。
Command> CALL ttRepStateGet; < STANDBY > 1 row found.
ttIsql
を終了し、ttuser
(ADMIN
権限を持つ、作成されたユーザー)としてttRepAdmin
ユーティリティを使用し、スタンバイ・データベースをサブスクライバ・データベースに複製します。
% ttRepAdmin -duplicate -from master2 -host server1 -uid ttuser -pwd ttuser subscriber1
ttIsql
を使用してsubscriber1
に接続し、レプリケーション・エージェントを起動します。subscriber1
の状態を確認します。サブスクライバ・データベースのレプリケーション・エージェントを開始すると、自動的に、サブスクライバ・データベースの状態が「IDLE」
に設定されます。すべてのサブスクライバ・データベースの状態が、「IDLE」
に設定されます。
% ttIsql subscriber1 Copyright (c) 1996-2011, Oracle. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "DSN=subscriber1"; Connection successful: DSN=subscriber1;UID=timesten;DataStore=/stmp/subscriber1; DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=AL32UTF8; (Default setting AutoCommit=1) Command> CALL ttRepStart; Command> call ttRepStateGet; < IDLE > 1 row found.
ttIsql
ユーティリティを使用して、master1
データベースに接続します。
% ttIsql master1 Copyright (c) 1996-2011, Oracle. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "DSN=master1"; Connection successful: DSN=master1;UID=timesten;DataStore=/tmp/master1; DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=AL32UTF8; (Default setting AutoCommit=1) Command>
master1
のemployees
表に行を1つ挿入します。
Command> INSERT INTO employees VALUES ( 202, 'Pat', 'Fay', 'PFAY', '603-123-7777', TO_DATE('17-AUG-1997', 'dd-MON-yyyy'), 'MK_REP', 6000, NULL, 201, 20 ); 1 row inserted. Command> SELECT * FROM employees; < 202, Pat, Fay, PFAY, 603-123-7777, 1997-08-17 00:00:00, MK_REP, 6000, <NULL>, 201, 20 > 1 row found.
master2
およびsubscriber1
に挿入がレプリケートされたことを確認します。ttIsql
を使用して、master2
に接続します。
% ttIsql master2 Copyright (c) 1996-2011, Oracle. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "DSN=master2"; Connection successful: DSN=master2;UID=timesten;DataStore=/tmp/master2; DatabaseCharacterSet=AL32UTF8;ConnectionCharacterSet=AL32UTF8; (Default setting AutoCommit=1)
データがmaster2
にレプリケートされていることを確認します。
Command> SELECT * FROM employees; < 202, Pat, Fay, PFAY, 603-123-7777, 1997-08-17 00:00:00, MK_REP, 6000, <NULL>, 201, 20 > 1 row found.
同じステップをsubscriber1
で実行して、データがサブスクライバにレプリケートされていることを確認します。
ttIsql
を使用して各データベースに接続し、各データベースでレプリケーション・エージェントを終了します。
Command> CALL ttRepStop;
各データベースでアクティブ・スタンバイ・ペアを削除します。その後、アクティブ・スタンバイ・ペアを削除した任意のデータベースにあるemployees
表を削除できます。
Command> DROP ACTIVE STANDBY PAIR;
Command> DROP TABLE employees;
この項では、マスター・データベース(masterds
)内の単一表の内容をサブスクライバ・データベース(subscriberds
)内の表にレプリケートするクラシック・レプリケーション・スキームの構成方法について説明します。わかりやすくするために、両方のデータベースは同じコンピュータに存在することとします。
この項の内容は次のとおりです。
『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTenデータベースの管理に関する説明に従って、masterds
およびsubscriberds
というDSNを作成します。
UNIXまたはLinuxシステムの場合は、テキスト・エディタを使用して各データベースで次のodbc.ini
ファイルを作成します。
[masterds] DataStore=/tmp/masterds DatabaseCharacterSet=AL32UTF8 ConnectionCharacterSet=AL32UTF8 [subscriberds] DataStore=/tmp/subscriberds DatabaseCharacterSet=AL32UTF8 ConnectionCharacterSet=AL32UTF8
Windowsの場合は、ODBCアドミニストレータを使用して同じ接続属性を設定します。他のすべての設定には、デフォルト値を使用します。
ttIsql
ユーティリティを使用して、masterds
に接続します。
% ttIsql masterds Copyright (c) 1996-2011, Oracle. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. connect "DSN=masterds"; Connection successful: DSN=masterds;UID=timesten; DataStore=/tmp/masterds;DatabaseCharacterSet=AL32UTF8; ConnectionCharacterSet=AL32UTF8; (Default setting AutoCommit=1) Command>
employees
表を作成します。
Command> CREATE TABLE employees ( employee_id NUMBER(6) PRIMARY KEY, first_name VARCHAR2(20), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25) NOT NULL UNIQUE, phone_number VARCHAR2(20), hire_date DATE NOT NULL, job_id VARCHAR2(10) NOT NULL, salary NUMBER(8,2), commission_pct NUMBER(2,2), manager_id NUMBER(6), department_id NUMBER(4) ) ;
employees
表をmasterds
からsubscriberds
にレプリケートする、repscheme
という名前のクラシック・レプリケーション・スキームを作成します。
Command> CREATE REPLICATION repscheme ELEMENT e TABLE employees MASTER masterds SUBSCRIBER subscriberds;
subscriberds
に接続し、ステップ2と同じ手順に従って、同じ表とレプリケーション・スキームを作成します。
masterds
およびsubscriberds
でレプリケーション・エージェントを起動します。
Command> call ttRepStart;
ttIsql
を終了します。ttStatus
ユーティリティを使用して、両方のデータベースのレプリケーション・エージェントが稼働していることを確認します。
% ttStatus TimesTen status report as of Thu Aug 11 17:05:23 2011 Daemon pid 18373 port 4134 instance ttuser TimesTen server pid 18381 started on port 4136 ------------------------------------------------------------------------ Data store /tmp/masterds There are 16 connections to the data store Shared Memory KEY 0x0201ab43 ID 5242889 PL/SQL Memory KEY 0x0301ab43 ID 5275658 Address 0x10000000 Type PID Context Connection Name ConnID Process 20564 0x081338c0 masterds 1 Replication 20676 0x08996738 LOGFORCE 5 Replication 20676 0x089b69a0 REPHOLD 2 Replication 20676 0x08a11a58 FAILOVER 3 Replication 20676 0x08a7cd70 REPLISTENER 4 Replication 20676 0x08ad7e28 TRANSMITTER 6 Subdaemon 18379 0x080a11f0 Manager 2032 Subdaemon 18379 0x080fe258 Rollback 2033 Subdaemon 18379 0x081cb818 Checkpoint 2036 Subdaemon 18379 0x081e6940 Log Marker 2035 Subdaemon 18379 0x08261e70 Deadlock Detector 2038 Subdaemon 18379 0xae100470 AsyncMV 2040 Subdaemon 18379 0xae11b508 HistGC 2041 Subdaemon 18379 0xae300470 Aging 2039 Subdaemon 18379 0xae500470 Flusher 2034 Subdaemon 18379 0xae55b738 Monitor 2037 Replication policy : Manual Replication agent is running. Cache Agent policy : Manual PL/SQL enabled. ------------------------------------------------------------------------ Data store /tmp/subscriberds There are 16 connections to the data store Shared Memory KEY 0x0201ab41 ID 5177351 PL/SQL Memory KEY 0x0301ab41 ID 5210120 Address 0x10000000 Type PID Context Connection Name ConnID Process 20594 0x081338f8 subscriberds 1 Replication 20691 0x0893c550 LOGFORCE 5 Replication 20691 0x089b6978 REPHOLD 2 Replication 20691 0x08a11a30 FAILOVER 3 Replication 20691 0x08a6cae8 REPLISTENER 4 Replication 20691 0x08ad7ba8 RECEIVER 6 Subdaemon 18376 0x080b1450 Manager 2032 Subdaemon 18376 0x0810e4a8 Rollback 2033 Subdaemon 18376 0x081cb8b0 Flusher 2034 Subdaemon 18376 0x08246de0 Monitor 2035 Subdaemon 18376 0x082a20a8 Deadlock Detector 2036 Subdaemon 18376 0x082fd370 Checkpoint 2037 Subdaemon 18376 0x08358638 Aging 2038 Subdaemon 18376 0x083b3900 Log Marker 2040 Subdaemon 18376 0x083ce998 AsyncMV 2039 Subdaemon 18376 0x08469e90 HistGC 2041 Replication policy : Manual Replication agent is running. Cache Agent policy : Manual PL/SQL enabled.
詳細は、「レプリケーション・エージェントの起動と停止」を参照してください。
ttIsql
を使用して、マスター・データベースに接続し、employees
表にいくつかの行を挿入します。
% ttIsql masterds Command> INSERT INTO employees VALUES ( 202, 'Pat', 'Fay', 'PFAY', '603-123-7777', TO_DATE('17-AUG-1997', 'dd-MON-yyyy'), 'MK_REP', 6000, NULL, 201, 20 ); 1 row inserted.
サブスクライバ用に、2番目のコマンド・プロンプト・ウィンドウを開きます。サブスクライバ・データベースに接続し、employees
表の内容を確認します。
% ttIsql subscriberds Command> SELECT * FROM employees; < 202, Pat, Fay, PFAY, 603-123-7777, 1997-08-17 00:00:00, MK_REP, 6000, <NULL>, 201, 20 > 1 row found.
図2-3は、masterds
に挿入された行がsubscriberds
にレプリケートされたことを示します。
レプリケーション・スキームを定義した後、レプリケーション・スキームに含まれている各データベースのレプリケーション・エージェントを起動できます。レプリケーション・エージェントを起動および停止するには、ADMIN
権限が必要です。
レプリケーション・エージェントは、ttAdmin
ユーティリティに-repStart
または-repStop
オプションを指定して、起動および停止できます。また、ttRepStart
およびttRepStop
組込みプロシージャを使用して、ttIsql
コマンドラインからレプリケーション・エージェントを起動および停止することもできます。
例2-1 ttAdminによるレプリケーション・エージェントの起動および停止
masterDSN
およびsubscriberDSN
というDSNのレプリケーション・エージェントを起動するには、次のように入力します。
ttAdmin -repStart masterDSN ttAdmin -repStart subscriberDSN
レプリケーション・エージェントを停止するには、次のように入力します。
ttAdmin -repStop masterDSN ttAdmin -repStop subscriberDSN
例2-2 ttIsqlからのレプリケーション・エージェントの起動および停止
masterDSN
というDSNのレプリケーション・エージェントを起動および停止するには、次のように入力します。
> ttIsql masterDSN Command> call ttRepStart; Command> call ttRepStop;
また、ttAdmin
ユーティリティを使用してレプリケーション再起動ポリシーを設定することもできます。デフォルトでは、このポリシーはmanual
で、これによって、前述のようにレプリケーション・エージェントを起動および停止できます。データベースのレプリケーション再起動ポリシーは、always
またはnorestart
に設定することもできます。
再起動ポリシー | TimesTenデーモンの起動時にレプリケーション・エージェントを起動 | エラー発生時または無効化が行われた場合にレプリケーション・エージェントを再起動 |
---|---|---|
always |
はい | はい |
manual |
いいえ | はい |
norestart |
いいえ | いいえ |
ノート: レプリケーション・エージェントはTimesTenデーモンによって管理されます。レプリケーション・エージェントを起動または停止するには、これが実行されている必要があります。 |
再起動ポリシーがalways
の場合、データベースがメモリーにロードされるとレプリケーション・エージェントが自動的に起動されます。データベースがメモリーにロードされるタイミングを指定する方法については、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のRAMポリシーの指定に関する説明を参照してください。
例2-3 ttAdminを使用した再起動ポリシーの設定
ttAdmin
を使用して、レプリケーション再起動ポリシーをalways
に設定するには、次のように入力します。
ttAdmin -repPolicy always DSN
ポリシーをmanualに再設定するには、次のように入力します。
ttAdmin -repPolicy manual DSN
データベースの無効化の後、manual
およびalways
の両方のポリシーによってレプリケーション・エージェントが自動的に再起動されます。レプリケーション・エージェントが自動的に再起動されると、多くの場合、データベースへの初期接続になります。たとえば、これは、すべてのアプリケーションの接続を切断する必要がある致命的なエラーが発生した後に行われます。通常、データベースへの初期接続では、最新のチェックポイント・ファイルをロードする必要があり、また、多くの場合リカバリを実行する必要があります。非常に大容量のデータベースの場合、このプロセスに数分かかる場合があります。この間、新しい接続が行われず、古い接続の切断が終了されないように、データベースでのすべてのアクティビティがブロックされます。また、この結果、すべてのアプリケーションの接続が切断されるまで古いデータベースが存続するため、データベースの2つのコピーが同時に存在する場合もあります。初期接続時が重要な非常に大容量のデータベースの場合、新しいデータベースを起動する前にまず古いデータベースが非アクティブになるまで待機する必要がある場合があります。これは、再起動ポリシーnorestart
に設定してレプリケーション・エージェントが自動的に再起動されないように指定することで実現できます。データベースがメモリーにロードされるタイミングを判断するために、データベースがリロードされないようにする設定ポリシーについて、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のRAMポリシーの指定に関する説明を参照してください。