Oracle サブスクライバ

SQL Server 2005 以降の SQL Server では、Oracle の提供する OLE DB プロバイダによる、Oracle へのプッシュ サブスクリプションがサポートされています。

Oracle サブスクライバの構成

Oracle サブスクライバを構成するには、次の手順を実行してください。

  1. ディストリビュータが Oracle サブスクライバに接続できるように、Oracle クライアント ネットワーク ソフトウェアおよび Oracle OLE DB プロバイダを SQL Server ディストリビュータにインストールし、これらを構成します。Oracle クライアント ネットワーク ソフトウェアは、最新バージョンであることが必要です。Oracle では、最新バージョンのクライアント ソフトウェアをインストールすることを推奨しています。このため、データベース ソフトウェアよりもクライアント ソフトウェアの方が新しいバージョンであることがよくあります。最も簡単にソフトウェアをインストールする方法は、Oracle クライアント ディスクで Oracle Universal Installer を使用することです。Oracle Universal Installer で、次の情報を指定します。

    情報

    説明

    Oracle ホーム

    Oracle ソフトウェアのインストール ディレクトリのパスです。既定値 (C:\oracle\ora90 など) をそのまま使用するか、別のパスを入力します。Oracle ホームの詳細については、このトピックの「Oracle ホームに関する注意点」を参照してください。

    Oracle ホーム名

    Oracle ホーム パスの別名

    インストールの種類

    Oracle 10g では、インストール オプションとして [Runtime] または [Administrator] を選択してください。

  2. サブスクライバの TNS 名を作成します。TNS (Transparent Network Substrate) とは、Oracle データベースが使用する通信層です。TNS サービス名は、ネットワーク上での Oracle データベース インスタンスの名前です。TNS サービス名は、Oracle データベースへの接続を構成するときに割り当てます。レプリケーションでは TNS サービス名を使用してサブスクライバを識別し、接続を確立します。

    Oracle Universal Installer が完了したら、Net Configuration Assistant を使用してネットワーク接続を構成します。ネットワーク接続を構成するには、4 つの情報を指定する必要があります。Oracle データベース管理者は、データベースとリスナをセットアップするときにネットワークを構成しています。この情報が不明な場合は、管理者に問い合わせてください。以下の操作を行う必要があります。

    操作

    説明

    データベースを識別する

    データベースは 2 とおりの方法で識別できます。1 つ目は、SID (Oracle System Identifier) を使用する方法で、すべての Oracle リリースで使用できます。2 つ目は、サービス名を使用する方法で、Oracle リリース 8.0 以降で使用できます。どちらの方法も、データベースの作成時に構成される値を使用します。データベースのリスナの構成時に管理者が使用したものと同じ命名方法を、クライアント ネットワーク構成でも使用することが重要です。

    データベースのネットワークの別名を識別する

    Oracle データベースへのアクセスに使用するネットワークの別名を指定する必要があります。ネットワークの別名とは、基本的にはデータベースの作成時に構成されたリモート SID またはサービス名へのポインタです。ネットワークの別名は、各種の Oracle リリースや製品では、ネット サービス名や TNS 別名など、複数の名前で呼ばれています。SQL*Plus では、ログイン時に "ホスト文字列" パラメータとしてこの別名の入力画面が表示されます。

    ネットワーク プロトコルを選択する

    サポート対象とする適切なプロトコルを選択します。ほとんどのアプリケーションでは TCP を使用します。

    データベース リスナを識別するホスト情報を指定する

    ホストは、Oracle リスナを実行中のコンピュータの名前または DNS 別名で、通常はデータベースが存在しているコンピュータです。プロトコルによっては、追加情報を指定する必要があります。たとえば、TCP を選択した場合は、リスナが対象データベースへの接続要求を受信待ちしているポートを指定する必要があります。既定の TCP 構成ではポート 1521 を使用します。

  3. スナップショット パブリケーションまたはトランザクション パブリケーションを作成して、SQL Server 以外のサブスクライバに対して有効にしてから、サブスクライバに対してプッシュ サブスクリプションを作成します。詳細については、以下を参照してください。

ディレクトリ権限の設定

ディストリビュータ上の SQL Server サービスが実行されるアカウントには、Oracle クライアント ネットワーク ソフトウェアがインストールされているディレクトリ (およびすべてのサブディレクトリ) に対する読み取り権限と実行権限を付与する必要があります。

SQL Server ディストリビュータと Oracle パブリッシャ間の接続のテスト

Net Configuration Assistant の終了間際に、Oracle サブスクライバへの接続をテストするオプションを選択できます。接続をテストする前に、Oracle データベース インスタンスがオンラインで、Oracle リスナが実行中であることを確認してください。テストが成功しなかった場合、接続しようとするデータベースを担当する Oracle DBA に連絡してください。

Oracle サブスクライバに正常に接続できたら、サブスクリプションのディストリビューション エージェントに対して構成したのと同じアカウントとパスワードを使用してデータベースにログインを試みます。

  1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。

  2. 「cmd」と入力して [OK] をクリックします。

  3. コマンド プロンプトで次のように入力します。

    sqlplus <UserSchemaLogin>/<UserSchemaPassword>@<NetServiceName>

    例 : sqlplus replication/$tr0ngPasswerd@Oracle90Server

  4. ネットワーク構成が正常に行われていれば、ログインは成功し、SQL プロンプトが表示されます。

Oracle ホームに関する注意点

Oracle では、アプリケーション バイナリをサイド バイ サイド インストールできますが、ある時点でレプリケーションが使用できるバイナリ セットは 1 つだけです。各バイナリ セットは Oracle ホームに関連付けられ、バイナリはディレクトリ %ORACLE_HOME%\bin に格納されます。レプリケーションが Oracle サブスクライバに接続するときに、正しいバイナリ セット (具体的には最新バージョンのクライアント ネットワーク ソフトウェア) が使用されるようにしてください。

SQL Server サービスおよび SQL Server エージェント サービスで使用されるアカウントを使ってディストリビュータにログインし、適切な環境変数を設定します。%ORACLE_HOME% 変数は、クライアント ネットワーク ソフトウェアをインストールしたときに指定したインストール ポイントを参照するように設定する必要があります。%PATH% には、最初に検出される Oracle エントリとして %ORACLE_HOME% \bin ディレクトリを含める必要があります。環境変数の設定の詳細については、Windows のマニュアルを参照してください。

注意注意

SQL Server ディストリビュータ上に複数の Oracle ホームがある場合は、ディストリビューション エージェントが最新の Oracle OLE DB プロバイダを使用していることを確認してください。場合によっては、SQL Server ディストリビュータでクライアント コンポーネントを更新しても既定では OLE DB プロバイダが更新されないことがあります。古い OLE DB プロバイダをアンインストールして、最新の OLE DB プロバイダをインストールしてください。プロバイダのインストールおよびアンインストールの詳細については、Oracle のマニュアルを参照してください。

Oracle サブスクライバに関する注意点

トピック「SQL Server 以外のサブスクライバ」で説明した注意点の他に、Oracle サブスクライバにレプリケートする場合は以下の問題に注意してください。

  • Oracle では、空の文字列と NULL 値のどちらも NULL として扱われます。SQL Server の列を NOT NULL として定義し、それらの列を Oracle サブスクライバにレプリケートしている場合、この問題は重要です。変更を Oracle サブスクライバに適用したときの失敗を回避するには、以下のいずれかを実行する必要があります。

    • パブリッシュされたテーブルに空の文字列が列値として挿入されないようにする。

    • ディストリビューション エージェント履歴ログで失敗の通知および処理の続行が可能な場合は、ディストリビューション エージェントに対して -SkipErrors パラメータを使用する。Oracle エラー コード 1400 (-SkipErrors1400) を指定します。このパラメータの詳細については、「トランザクション レプリケーションでのエラーのスキップ」を参照してください。

    • 生成されたテーブルの作成スクリプトを変更して、空の文字列が関連付けられている文字型の列から NOT NULL 属性を削除する。さらに、sp_addarticle@creation\_script パラメータを使用して、アーティクルのカスタム作成スクリプトとして変更済みスクリプトを指定する。

  • Oracle サブスクライバは 0x4071 のスキーマ オプションをサポートしています。スキーマ オプションの詳細については、「sp_addarticle (Transact-SQL)」を参照してください。

SQL Server から Oracle へのデータ型のマッピング

次の表は、Oracle を実行しているサブスクライバへのデータのレプリケーションで使用される、データ型のマッピングを示しています。

SQL Server データ型

Oracle データ型

bigint

NUMBER(19,0)

binary(1-2000)

RAW(1-2000)

binary(2001-8000)

BLOB

bit

NUMBER(1)

char(1-2000)

CHAR(1-2000)

char(2001-4000)

VARCHAR2(2001-4000)

char(4001-8000)

CLOB

date

DATE

datetime

DATE

datetime2(0-7)

Oracle 9 および Oracle 10 の場合は TIMESTAMP(7)、Oracle 8 の場合は VARCHAR(27)

datetimeoffset(0-7)

Oracle 9 および Oracle 10 の場合は TIMESTAMP(7) WITH TIME ZONE、Oracle 8 の場合は VARCHAR(34)

decimal(1-38, 0-38)

NUMBER(1-38, 0-38)

float(53)

FLOAT

float

FLOAT

geography

BLOB

geometry

BLOB

hierarchyid

BLOB

image

BLOB

int

NUMBER(10,0)

money

NUMBER(19,4)

nchar(1-1000)

CHAR(1-1000)

nchar(1001-4000)

NCLOB

ntext

NCLOB

numeric(1-38, 0-38)

NUMBER(1-38, 0-38)

nvarchar(1-1000)

VARCHAR2(1-2000)

nvarchar(1001-4000)

NCLOB

nvarchar(max)

NCLOB

real

REAL

smalldatetime

DATE

smallint

NUMBER(5,0)

smallmoney

NUMBER(10,4)

sql_variant

N/A

sysname

VARCHAR2(128)

text

CLOB

time(0-7)

VARCHAR(16)

timestamp

RAW(8)

tinyint

NUMBER(3,0)

uniqueidentifier

CHAR(38)

varbinary(1-2000)

RAW(1-2000)

varbinary(2001-8000)

BLOB

varchar(1-4000)

VARCHAR2(1-4000)

varchar(4001-8000)

CLOB

varbinary(max)

BLOB

varchar(max)

CLOB

xml

NCLOB

変更履歴

変更内容

データ型マッピング テーブルに新しい SQL Server 2008 データ型が追加されました。