主コンテンツへ
Oracle® TimesTen In-Memory Databaseレプリケーション・ガイド
リリース18.1
E98633-04
  目次へ移動
目次
索引へ移動
Index

前
 
次
 

2 スタート・ガイド

次の項では、サンプル・レプリケーション・スキームを構成および起動する方法を示します。


ノート:

この章の手順を実行するには、ADMIN権限が必要です。

1つのサブスクライバを持つアクティブ・スタンバイ・ペアの構成

この項では、1つのサブスクライバを持つアクティブ・スタンバイ・ペアの作成方法について説明します。アクティブ・データベースはmaster1です。スタンバイ・データベースはmaster2です。サブスクライバ・データベースはsubscriber1です。わかりやすくするために、すべてのデータベースは同じコンピュータserver1に存在することとします。

図2-1にこの構成を示します。

図2-1 1つのサブスクライバを持つアクティブ・スタンバイ・ペア

図2-1の説明が続きます。
「図2-1 1つのサブスクライバを持つアクティブ・スタンバイ・ペア」の説明

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

ステップ1: マスター・データベースおよびサブスクライバ・データベースのDSNの作成

『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTenデータベースの管理に関する説明に従って、master1master2および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アドミニストレータを使用して同じ接続属性を設定します。他のすべての設定には、デフォルト値を使用します。

オプションのステップ: レプリケーション・エージェント間の通信を暗号化するためのTLSの有効化

接続を介した通信を暗号化するために相互認証を必要とするTransport Layer Security (TLS)を使用して、レプリケーション・エージェント(およびレプリケーション・エージェントと通信するユーティリティ)間のセキュアなTCP/IPネットワーク接続を有効にできます。証明書を生成することもできます。詳細は、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』のTimesTenレプリケーションのTransport Layer Securityに関する項を参照してください。

ステップ2: いずれかのマスター・データベースでの表の作成

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)
  ) ;

ステップ3: アクティブ・スタンバイ・ペアの定義

master1で、アクティブ・スタンバイ・ペアを定義します。

Command> CREATE ACTIVE STANDBY PAIR master1, master2
        SUBSCRIBER subscriber1;

アクティブ・スタンバイ・ペアの定義の詳細は、第3章「アクティブ・スタンバイ・ペアのレプリケーション・スキームの定義」を参照してください。

ステップ4: マスター・データベースでのレプリケーション・エージェントの起動

master1で、レプリケーション・エージェントを起動します。

Command> CALL ttRepStart;

詳細は、「レプリケーション・エージェントの起動と停止」を参照してください。

ステップ5: マスター・データベースのACTIVE状態への設定

アクティブ・スタンバイ・ペアの新しいデータベースの状態は、アクティブ・データベースが設定されるまでIDLE状態になります。

ttRepStateSet組込みプロシージャを使用して、master1をアクティブ・データベースとして指定します。

Command> CALL ttRepStateSet('ACTIVE');

master1の状態を確認します。

Command> CALL ttRepStateGet;
< ACTIVE >
1 row found.

ステップ6: アクティブ・データベースでのユーザーの作成

ttuserというパスワードを持つユーザーttuserを作成し、ttuserADMIN権限を付与します。ADMIN権限を持つユーザーの作成は、次のステップのアクセス制御で必要です。

Command> CREATE USER ttuser IDENTIFIED BY ttuser;
User created.
Command> GRANT ADMIN TO ttuser;

ステップ7: スタンバイ・データベースへのアクティブ・データベースの複製

ttIsqlを終了し、ttuser (ADMIN権限を持つ、作成されたユーザー)としてttRepAdminユーティリティを-duplicateオプションとともに使用して、アクティブ・データベースをスタンバイ・データベースに複製します。2つの異なるホストを使用している場合は、ターゲット・ホストからttRepAdminコマンドを入力してください。

% ttRepAdmin -duplicate -from master1 -host server1 -uid ttuser -pwd ttuser 
master2

ステップ8: スタンバイ・データベースでのレプリケーション・エージェントの起動

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.

ステップ9: サブスクライバへのスタンバイ・データベースの複製

ttIsqlを終了し、ttuser (ADMIN権限を持つ、作成されたユーザー)としてttRepAdminユーティリティを使用し、スタンバイ・データベースをサブスクライバ・データベースに複製します。

% ttRepAdmin -duplicate -from master2 -host server1 -uid ttuser -pwd ttuser 
subscriber1

ステップ10: サブスクライバでのレプリケーション・エージェントの起動

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.

ステップ11: アクティブ・データベースにある表へのデータの挿入

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>

master1employees表に行を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で実行して、データがサブスクライバにレプリケートされていることを確認します。

ステップ12: アクティブ・スタンバイ・ペアおよび表の削除

ttIsqlを使用して各データベースに接続し、各データベースでレプリケーション・エージェントを終了します。

Command> CALL ttRepStop;

各データベースでアクティブ・スタンバイ・ペアを削除します。その後、アクティブ・スタンバイ・ペアを削除した任意のデータベースにあるemployees表を削除できます。

Command> DROP ACTIVE STANDBY PAIR;
Command> DROP TABLE employees;

1つのマスターと1つのサブスクライバを持つクラシック・レプリケーション・スキームの構成

この項では、マスター・データベース(masterds)内の単一表の内容をサブスクライバ・データベース(subscriberds)内の表にレプリケートするクラシック・レプリケーション・スキームの構成方法について説明します。わかりやすくするために、両方のデータベースは同じコンピュータに存在することとします。

図2-2 単純なクラシック・レプリケーション・スキーム

図2-2の説明が続きます。
「図2-2 単純なクラシック・レプリケーション・スキーム」の説明

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

ステップ1: マスターおよびサブスクライバのDSNの作成

『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アドミニストレータを使用して同じ接続属性を設定します。他のすべての設定には、デフォルト値を使用します。

ステップ2: マスター・データベースでの表およびクラシック・レプリケーション・スキームの作成

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;

ステップ3: サブスクライバ・データベースでの表およびレプリケーション・スキームの作成

subscriberdsに接続し、ステップ2と同じ手順に従って、同じ表とレプリケーション・スキームを作成します。

ステップ4: 各データベースでのレプリケーション・エージェントの起動

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.

詳細は、「レプリケーション・エージェントの起動と停止」を参照してください。

ステップ5: マスター・データベースにある表へのデータの挿入

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にレプリケートされたことを示します。

図2-3 サブスクライバ・データベースへの変更のレプリケート

図2-3の説明が続きます。
「図2-3 サブスクライバ・データベースへの変更のレプリケート」の説明

ステップ6: クラシック・レプリケーション・スキームおよび表の削除

レプリケーション・テストを完了した後、masterdsおよびsubscriberdsの両方でレプリケーション・エージェントを停止します。

Command> CALL ttRepStop;

マスター・データベースおよびサブスクライバ・データベースからemployees表およびrepschemeクラシック・レプリケーション・スキームを削除するには、各データベースで次の文を入力します。

Command> DROP REPLICATION repscheme;
Command> DROP TABLE employees;

レプリケーション・エージェントの起動および停止

レプリケーション・スキームを定義した後、レプリケーション・スキームに含まれている各データベースのレプリケーション・エージェントを起動できます。レプリケーション・エージェントを起動および停止するには、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ポリシーの指定に関する説明を参照してください。