次の方法で共有


Oracle パブリッシャーのトラブルシューティング

このトピックでは、Oracle パブリッシャーの構成と使用時に発生する可能性がある問題の一覧を示します。

Oracle クライアントとネットワーク ソフトウェアに関するエラーが発生する

ディストリビューターで Microsoft SQL Server を実行するアカウントには、Oracle クライアント ネットワーク ソフトウェアがインストールされているディレクトリ (およびすべてのサブディレクトリ) の読み取りと実行のアクセス許可が付与されている必要があります。 アクセス許可が付与されていない場合、または Oracle クライアント コンポーネントが正しくインストールされていない場合は、次のエラー メッセージが表示されます。

"[Microsoft OLE DB Provider for Oracle] でサーバーへの接続に失敗しました。 Oracle クライアントとネットワーク コンポーネントが見つかりませんでした。 これらのコンポーネントは Oracle Corporation によって提供され、Oracle バージョン 7.3.3 以降のクライアント ソフトウェア インストールの一部です。 プロバイダーは、これらのコンポーネントがインストールされるまで機能できません。

ディストリビューターに適切な Oracle クライアントがインストールされている場合は、クライアントのインストールが完了した後に SQL Server が停止してから再起動されたことを確認します。 これは、SQL Server がクライアント コンポーネントを認識するために必要です。

アクセス許可が付与され、コンポーネントが正しくインストールされていることを確認したが、このエラーが解決しない場合は、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI のレジストリ設定が正しいことを確認します。

  • Oracle 10g の場合、正しい設定は次のとおりです。

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql10.dll

    • OracleXaLib = oraclient10.dll

  • Oracle 9i の場合、正しい設定は次のとおりです。

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql9.dll

    • OracleXaLib = oraclient9.dll

SQL Server ディストリビューターが Oracle データベース インスタンスに接続できない

SQL Server ディストリビューターが Oracle パブリッシャーに接続できない場合は、次のことを確認します。

  • 必要な Oracle ソフトウェアがディストリビューターにインストールされます。

  • Oracle データベースはオンラインであり、SQL*Plus などのツールを使用して接続できます。

  • ログイン レプリケーションは、Oracle パブリッシャーへの接続に使用される十分なアクセス許可を持っています。 詳細については、「 Oracle パブリッシャーの構成」を参照してください。

  • Oracle パブリッシャーの構成中に定義された TNS 名は、tnsnames.ora ファイルに一覧表示されます。

  • 正しい Oracle ホームとパスが使用されます。 SQL Server ディストリビューターにインストールされている Oracle バイナリのセットが 1 つしかない場合でも、Oracle Home に関連する環境変数が正しく設定されていることを確認します。 環境変数の値を変更する場合は、変更を有効にするために SQL Server を停止して再起動する必要があります。

接続の構成とテストの詳細については、「 Oracle パブリッシャーの構成」の「SQL Server ディストリビューターへの Oracle クライアント ネットワーク ソフトウェアのインストールと構成」を参照してください。

Oracle パブリッシャーが別のディストリビューターに関連付けられている

Oracle パブリッシャーは、1 つの SQL Server ディストリビューターにのみ関連付けることができます。 別のディストリビューターが Oracle パブリッシャーに関連付けられている場合は、別のディストリビューターを使用する前に削除する必要があります。 ディストリビューターが最初に削除されない場合は、次のいずれかのエラー メッセージが表示されます。

  • "Oracle サーバー インスタンス '<OraclePublisherName>' は、ディストリビューターとして '<SQLServerDistributorName>' を使用するように以前に構成されています。 '<NewSQLServerDistributorName>' をディストリビューターとして使用するには、Oracle サーバー インスタンス上の現在のレプリケーション構成を削除する必要があります。この構成により、そのサーバー インスタンス上のすべてのパブリケーションが削除されます。

  • "Oracle サーバー '<OracleServerName>' は、ディストリビューター '<SQLServerDistributorName>.> のパブリッシャー '<OraclePublisherName' として既 <に定義されていますDistributionDatabaseName>'。 パブリッシャーを削除するか、パブリック シノニム '<SynonymName>' を削除して再作成します。

Oracle パブリッシャーが削除されると、Oracle データベース内のレプリケーション オブジェクトが自動的にクリーンアップされます。 ただし、場合によっては、Oracle レプリケーション オブジェクトを手動でクリーンアップする必要があります。 レプリケーションによって作成された Oracle レプリケーション オブジェクトを手動でクリーンアップするには:

  1. DBA アクセス許可を使用して Oracle パブリッシャーに接続します。

  2. SQL コマンド DROP PUBLIC SYNONYM MSSQLSERVERDISTRIBUTOR;を発行します。

  3. SQL コマンド DROP USER <replication_administrative_user_schema>``CASCADE;を発行します。

SQL Server エラー 21663 が主キーの不足に関して発生する

トランザクション パブリケーションのアーティクルには、有効な主キーが必要です。 有効な主キーがない場合は、アーティクルを追加しようとすると、次のエラー メッセージが表示されます。

"ソース テーブル [<TableOwner>] に有効な主キーが見つかりません。[<TableName>]"

主キーの要件については、「 Oracle パブリッシャーの設計上の考慮事項と制限事項」の「一意のインデックスと制約」セクションを参照してください。

リンク サーバー ログインの重複に関して SQL Server エラー 21642 が発生する

Oracle パブリッシャーが最初に構成されると、パブリッシャーとディストリビューター間の接続用にリンク サーバー エントリが作成されます。 リンク サーバーの名前は、Oracle TNS サービス名と同じです。 同じ名前のリンク サーバーを作成しようとすると、次のエラー メッセージが表示されます。

"異種パブリッシャーにはリンク サーバーが必要です。 '<LinkedServerName>' という名前のリンク サーバーが既に存在します。 リンク サーバーを削除するか、別の発行元名を選択してください。

このエラーは、リンク サーバーを直接作成しようとした場合、または Oracle パブリッシャーと SQL Server ディストリビューターの間のリレーションシップを以前に削除し、再構成しようとしている場合に発生する可能性があります。 パブリッシャーの再構成中にこのエラーが発生した場合は、 sp_dropserver (Transact-SQL) を使用してリンク サーバーを削除します。

リンク サーバー接続経由で Oracle パブリッシャーに接続する必要がある場合は、別の TNS サービス名を作成し、sp_addlinkedserver (Transact-SQL) を呼び出すときにこの名前を使用します。 TNS サービス名の作成については、Oracle のドキュメントを参照してください。

SQL Server エラー 21617 が発生しました

Oracle パブリッシングでは、Oracle アプリケーション SQL*PLUS を使用して、Publisher サポート コードのパッケージを Oracle データベースにダウンロードします。 Oracle パブリッシャーの構成を試みる前に、SQL Server は、ディストリビューターのシステム パスを介して SQL*PLUS にアクセス可能であることを確認します。 SQL*PLUS を読み込めない場合は、次のエラー メッセージが表示されます。

"SQL*PLUS を実行できません。 現在のバージョンの Oracle クライアント コードがディストリビューターにインストールされていることを確認します。

ディストリビューターで SQL*PLUS を見つけよう。 Oracle 10g クライアント インストールの場合、この実行可能ファイルの名前は sqlplus.exe。 通常、%ORACLE_HOME%/bin にインストールされます。 SQL*PLUS のパスがシステム パスに表示されることを確認するには、システム変数 Path の値を調べます。

  1. マイコンピュータを右クリックして、プロパティをクリックします。

  2. [ 詳細設定 ] タブをクリックし、[ 環境変数] をクリックします。

  3. [ 環境変数 ] ダイアログ ボックスの [ システム変数 ] ボックスの一覧で、[ パス ] 変数を選択し、[ 編集] をクリックします。

  4. [ システム変数の編集 ] ダイアログ ボックス: sqlplus.exe を含むフォルダーへのパスが [ 変数の値 ] テキスト ボックスに存在しない場合は、文字列を編集して含めます。

  5. 開いている各ダイアログ ボックスで [ OK] を クリックして、変更を終了して保存します。

ディストリビューターで sqlplus.exe が見つからない場合は、ディストリビューターに Oracle クライアント ソフトウェアの現在のバージョンをインストールします。 詳細については、「 Oracle パブリッシャーの構成」を参照してください。

SQL Server エラー 21620 が発生しました

バージョン 8.1 より前の Oracle データベースに接続する場合、Oracle パブリッシングでは、ディストリビューターにインストールされている Oracle クライアント ソフトウェアがバージョン 9 以降である必要があります。 バージョン 8.1 以降の Oracle データベースに接続する場合は、Oracle クライアント ソフトウェアをバージョン 10 以降にすることをお勧めします。

Oracle パブリッシャーの構成を試みる前に、Oracle パブリッシングは、ディストリビューターのシステム パスを介してアクセスできる SQL*PLUS のバージョンがバージョン 9 以降であることを確認します。 そうでない場合は、次のエラー メッセージが表示されます。

"システム パス変数を介してアクセスできる SQL*PLUS のバージョンは、Oracle パブリッシングをサポートするのに十分な最新のバージョンではありません。 現在のバージョンの Oracle クライアント コードがディストリビューターにインストールされていることを確認します。

ディストリビューターに複数のバージョンの Oracle クライアント ソフトウェアがインストールされている場合は、最新バージョンがバージョン 9 以上であり、システム パス変数がこのバージョンを最初に参照していることを確認します (他のバージョンへの参照は、最新のバージョンが最初に表示される限り表示できます)。 システム パス変数の編集の詳細については、このトピックの「SQL Server エラー 21617 が発生しました」セクションを参照してください。

SQL Server エラー 21624 またはエラー 21629 が発生しました

64 ビット ディストリビューターの場合、Oracle パブリッシングでは Oracle OLEDB Provider for Oracle (OraOLEDB.Oracle) が使用されます。 Oracle OLEDB プロバイダーがディストリビューターにインストールおよび登録されていることを確認します。 プロバイダーがインストールおよび登録されていない場合は、次のエラー メッセージのいずれかまたは両方が表示されます。

  • "ディストリビューター '%s' に登録済みの Oracle OLEDB プロバイダー OraOLEDB.Oracle が見つからない。 Oracle OLEDB プロバイダーの現在のバージョンがインストールされ、ディストリビューターに登録されていることを確認してください。

  • "Oracle OLEDB Provider for Oracle OraOLEDB.Oracle が登録されていることを示す CLSID レジストリ キーがディストリビューターに存在しません。 Oracle OLEDB プロバイダーがディストリビューターにインストールされ、登録されていることを確認します。

Oracle クライアント ソフトウェア バージョン 10g を使用している場合、プロバイダーは OraOLEDB10.dll。バージョン 9i の場合は、OraOLEDB.dllです。 プロバイダーは %ORACLE_HOME%\BIN にインストールされます (例: C:\oracle\product\10.1.0\Client_1\bin)。 Oracle OLEDB プロバイダーがディストリビューターにインストールされていないと判断した場合は、Oracle が提供する Oracle クライアント ソフトウェア インストール ディスクからインストールします。 詳細については、「 Oracle パブリッシャーの構成」を参照してください。

Oracle OLEDB プロバイダーがインストールされている場合は、それが登録されていることを確認します。 プロバイダー DLL を登録するには、DLL がインストールされているディレクトリから次のコマンドを実行し、SQL Server インスタンスを停止して再起動します。

  1. regsvr32 OraOLEDB10.dll または regsvr32 OraOLEDB.dll

SQL Server エラー 21626 またはエラー 21627 が発生しました

Oracle 発行環境が正しく構成されていることを確認するために、SQL Server は構成時に指定したログイン資格情報を使用して Oracle パブリッシャーへの接続を試みます。 SQL Server ディストリビューターが Oracle パブリッシャーに接続できない場合は、次のエラー メッセージが表示されます。

  • "Oracle OLEDB プロバイダー OraOLEDB.Oracle を使用して Oracle データベース サーバー '%s' に接続できません。"

このエラー メッセージが表示された場合は、Oracle パブリッシャーの構成時に指定したのと同じログインとパスワードを使用して SQL*PLUS を直接実行して、Oracle データベースへの接続を確認します。 詳細については、このトピックの「SQL Server ディストリビューターは Oracle データベース インスタンスに接続できません」セクションを参照してください。

SQL Server エラー 21628 が発生しました

64 ビット ディストリビューターの場合、Oracle パブリッシングでは Oracle OLEDB Provider for Oracle (OraOLEDB.Oracle) が使用されます。 SQL Server によってレジストリ エントリが作成され、Oracle プロバイダーが SQL Server でプロセス内で実行できるようになります。 このレジストリ エントリの読み取りまたは書き込みに問題がある場合は、次のエラー メッセージが表示されます。

ディストリビューター '%s' のレジストリを更新して、Oracle OLEDB プロバイダー OraOLEDB.Oracle を SQL Server 内で実行できるようにすることができません。 現在のログインで SQL Server 所有のレジストリ キーを変更する権限があることを確認します。"

Oracle パブリッシングでは、レジストリ エントリが存在し、64 ビット ディストリビューターの 場合は 1 に設定されている必要があります。 エントリが存在しない場合、SQL Server はエントリの作成を試みます。 エントリが存在するが、 0 に設定されている場合、設定は変更されません。Oracle パブリッシャーの構成は失敗します。

レジストリ設定を表示および変更するには:

  1. スタートをクリックした後、実行をクリックします。

  2. [ 実行 ] ダイアログ ボックスで、「 regedit」と入力し、[OK] をクリック します

  3. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceName>\Providers に移動します。

    [プロバイダー] の下には、OraOLEDB.Oracle という名前のフォルダーを指定する必要があります。 このフォルダー内には、値 1 の DWORD 値名 AllowInProcess を指定する必要があります。

  4. AllowInProcess0 に設定されている場合は、レジストリ エントリを 1 に更新します。

    1. エントリを右クリックし、[ 変更] をクリックします。

    2. [文字列の編集] ダイアログ ボックスの [値データ] フィールドに「1」と入力します。

SQL Server エラー 21684 が発生しました

管理ユーザー アカウントに十分な権限がない場合は、次のエラー メッセージが表示されます。

"Oracle パブリッシャー '%s' の管理者ログインに関連付けられているアクセス許可では不十分です。"

ユーザーに付与されたアクセス許可を確認するには、次のクエリを実行します: SELECT * from session_privs。 出力は次のようになります。

PRIVILEGE

------------------

CREATE SESSION

CREATE TABLE

CREATE PUBLIC SYNONYM

DROP PUBLIC SYNONYM

CREATE VIEW

CREATE SEQUENCE

CREATE PROCEDURE

CREATE TRIGGER

レプリケーション ユーザー スキーマのアクセス許可の問題が発生しました

レプリケーション ユーザー スキーマには、「 Oracle パブリッシャーの構成」の「ユーザー スキーマを手動で作成する」で説明されているアクセス許可が必要です。

Oracle エラー ORA-01000

レプリケーションでは、パブリケーションにアーティクルを追加するプロセス中に、Oracle パブリッシャーのカーソルが使用されます。 このプロセス中にパブリッシャーで使用可能なカーソルの最大数を超える可能性があります。 この場合、次のエラーが発生します。

"ORA-01000: 開いているカーソルの最大数を超えました"

この問題を回避するには、Oracle データベースの max_open_cursors 設定が十分に大きい数値 (少なくとも 1000) に設定されていることを確認します。 この設定の詳細については、Oracle のドキュメントを参照してください。

Oracle エラー ORA-01555

次の Oracle データベース エラーは、スナップショット レプリケーションには関連しません。これは、Oracle がデータの読み取り整合性ビューを構築する方法に関連しています。

"ORA-01555: スナップショットが古すぎます"

ロールバック セグメントと呼ばれるオブジェクトを使用して、Oracle は SQL ステートメントが発行された時点のデータの読み取り整合性ビューを構築します。 ロールバック情報が他の同時セッションによって上書きされると、"スナップショットが古すぎます" エラーが発生する可能性があります。 Oracle 9i より前では、このエラーの頻度を減らす方法として、ロールバック セグメントのサイズや数を増やし、大きなトランザクションを特定のロールバック セグメントに割り当てることをお勧めします。

Oracle 9i では、ロールバック セグメントに代わる UNDO テーブルスペースの概念が導入されました。 Oracle 9i で "スナップショットが古すぎます" というエラーを回避するには、次の手順を実行することをお勧めします。

  • 適切な空き領域を持つ UNDO テーブルスペースを作成します。

  • テーブルスペース (Oracle 10G 以上) でリテンション期間の保証を設定します。

  • Oracle 初期化パラメーター UNDO_MANAGEMENTおよびUNDO_RETENTIONを構成します。

"スナップショットが古すぎます" エラーを回避する方法の詳細については、Oracle のドキュメントを参照してください。

Oracle エラー ORA-22285

テーブルに BFILE 列が含まれている場合、その列のデータはファイル システムに格納されます。 レプリケーション管理ユーザー アカウントには、次の構文を使用して、データが格納されているディレクトリへのアクセス権を付与する必要があります。

GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>

アクセスが許可されていない場合、ログ リーダー エージェントによって次のエラーが発生します。

"ORA-22285: FILEOPEN 操作用の存在しないディレクトリまたはファイル"

パブリッシャーの再構成を必要とする変更が行われる

レプリケーション メタデータ テーブルまたはプロシージャを変更するには、パブリッシャーを削除して再構成する必要があります。 パブリッシャーを再構成するには、パブリッシャーを削除し、SQL Server Management Studio、Transact-SQL、または RMO を使用して再度構成する必要があります。 パブリッシャーの構成の詳細については、「 Oracle パブリッシャーの構成」を参照してください。

Oracle パブリッシャーを削除するには (SQL Server Management Studio)

  1. SQL Server Management Studio で Oracle パブリッシャーのディストリビューターに接続し、サーバー ノードを展開します。

  2. [ レプリケーション] を右クリックし、[ ディストリビューターのプロパティ] をクリックします。

  3. [ディストリビューターのプロパティ] ダイアログ ボックスの [パブリッシャー] ページで、Oracle パブリッシャーのチェック ボックスをオフにします。

  4. OK をクリックします。

Oracle パブリッシャーを削除するには (Transact-SQL)

こちらもご覧ください

Oracle パブリッシャーの構成]
Oracle パブリッシングの概要