次の方法で共有


Oracle サブスクライバー

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

Oracle サブスクライバーの構成

Oracle サブスクライバーを構成するには、次の手順に従います。

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

    情報 説明
    Oracle Home これは、Oracle ソフトウェアのインストール ディレクトリへのパスです。 既定値 (C:\oracle\ora90 など) をそのまま使用するか、別のパスを入力します。 Oracle Home の詳細については、このトピックで後述する「Oracle Home の考慮事項」セクションを参照してください。
    Oracle のホーム名 Oracleホームパス用のエイリアス。
    インストールの種類 Oracle 10g で、 ランタイム または 管理者 のインストール オプションを選択します。
  2. サブスクライバーの TNS 名を作成します。 TNS (Transparent Network Substrate) は、Oracle データベースで使用される通信層です。 TNS サービス名は、Oracle データベース インスタンスがネットワーク上で認識される名前です。 Oracle データベースへの接続を構成するときに、TNS サービス名を割り当てます。 レプリケーションでは、TNS サービス名を使用してサブスクライバーを識別し、接続を確立します。

    Oracle ユニバーサル インストーラーが完了したら、Net Configuration Assistant を使用してネットワーク接続を構成します。 ネットワーク接続を構成するには、4 つの情報を指定する必要があります。 Oracle データベース管理者は、データベースとリスナーを設定するときにネットワーク構成を構成します。この情報がない場合は、この情報を提供できる必要があります。 次の手順を実行する必要があります。

    アクション 説明
    データベースを識別する データベースを識別する方法は 2 つあります。 最初のメソッドは Oracle システム識別子 (SID) を使用し、Oracle リリースごとに使用できます。 2 番目の方法では、Oracle リリース 8.0 以降で使用できるサービス名を使用します。 どちらの方法も、データベースの作成時に構成された値を使用します。クライアント ネットワーク構成では、データベースのリスナーを構成するときに管理者が使用したのと同じ名前付け方法を使用することが重要です。
    データベースのネットワーク エイリアスを識別する Oracle データベースへのアクセスに使用するネットワーク エイリアスを指定する必要があります。 ネットワーク エイリアスは、基本的には、データベースの作成時に構成されたリモート SID またはサービス名へのポインターです。これは、Net Service Name や TNS Alias など、さまざまな Oracle リリースおよび製品で複数の名前によって参照されています。 SQL*Plus では、ログイン時に "Host String" パラメーターとしてこのエイリアスの入力を求められます。
    ネットワーク プロトコルを選択する サポートする適切なプロトコルを選択します。 ほとんどのアプリケーションでは TCP が使用されます。
    データベース リスナーを識別するホスト情報を指定する ホストは、Oracle リスナーが実行されているコンピューターの名前または DNS エイリアスであり、通常はデータベースが存在するコンピューターと同じです。 一部のプロトコルでは、追加情報を指定する必要があります。 たとえば、TCP を選択した場合は、リスナーがターゲット データベースへの接続要求をリッスンしているポートを指定する必要があります。 既定の TCP 構成では、ポート 1521 が使用されます。
  3. スナップショット パブリケーションまたはトランザクション パブリケーションを作成し、SQL Server 以外のサブスクライバーに対して有効にしてから、サブスクライバーのプッシュ サブスクリプションを作成します。 詳細については、「 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 Home に関する考慮事項

Oracle では、アプリケーション バイナリのサイド バイ サイド インストールがサポートされていますが、特定の時点でレプリケーションで使用できるバイナリのセットは 1 つだけです。 バイナリの各セットは Oracle Home に関連付けられます。バイナリは \bin %ORACLE_HOME%ディレクトリにあります。 レプリケーションが 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) ブロッブ
bit 数値(1)
char(1-2000) CHAR(1-2000)
char(2001-4000) VARCHAR2(2001-4000)
char(4001-8000) CLOB
date 日付
datetime 日付
datetime2(0-7) Oracle 9 および Oracle 10 の TIMESTAMP(7)。Oracle 8 の VARCHAR(27)
datetimeoffset(0-7) TIMESTAMP(7) WITH TIME ZONE for Oracle 9 and Oracle 10;Oracle 8 の VARCHAR(34)
decimal(1-38, 0-38) NUMBER(1-38, 0-38)
float(53) 浮く
float 浮く
geography ブロッブ
geometry ブロッブ
hierarchyid ブロッブ (BLOB)
image ブロッブ
int 数値型(10,0)
money 数字(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 実数
smalldatetime 日付
smallint NUMBER(5,0)
smallmoney NUMBER(10,4)
sql_variant なし
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) ブロッブ
varchar(1-4000) VARCHAR2(1-4000)
varchar(4001-8000) CLOB
varbinary(max) ブロッブ
varchar(max) CLOB
xml NCLOB

こちらもご覧ください

SQL Server 以外のサブスクライバー
パブリケーションを購読する