SQL Server 2014リンクサーバーを使用して、Oracle 11gR2(11.2.0.3)データベースに接続し、ODAC 12.1.0.2.4 Oracle OLE DB Providerを使用しています。 SQL 2014データベースで、次の構文を使用して、リンクされたサーバーを介してローカルテーブルからリモートOracleテーブルにデータを挿入します。
_insert into LinkedServerName..RemoteSchema.RemoteTable(column)
select column from localSQLServerTable
_
ただし、挿入の行に以下のエラーが表示されます。
メッセージ7356、レベル16、状態1、プロシージャ{MyProcName}、行1 OLEリンクサーバー "{MyLinkedServer}"のDBプロバイダー "OraOLEDB.Oracle"が列に一貫性のないメタデータを提供しました。オブジェクト "{リモートテーブル名}"の列 "{columnName}"(コンパイル時の序数23)の "DBCOLUMNFLAGS_ISFIXEDLENGTH"がコンパイル時に16、実行時に0であると報告されました。
問題の列は、OracleでCHAR(1 BYTE)
データ型として定義されています。
「64ビットODAC 12cリリース4(12.1.0.2.4)Xcopy for Windows x64」をインストールし、名前「ODAC121024Xcopy_x64.Zip」を http://www.Oracle.com/technetwork/database/windows/からダウンロードします。 downloads/index-090165.html
Oracleサポートノート207303.1には、12cクライアントが11gR2クライアントで動作することが記載されていますが、このエラーは2つの異なるバージョン間の互換性の問題が原因で発生するようです。修正するには、次の手順に従いました。
uninstall.bat all d:\Oracle
。d:\ Oracleは、Oracleホームの場所です。install.bat all d:\Oracle11gr2 odac11gr2
)。ダウンロード元: http://www.Oracle.com/technetwork/database/windows/downloads/index-090165.htmld:\Oracle11gr2;d:\Oracle11gr2\bin
のPATH環境変数を再度追加しますSQL Server Management Studio(SQL Server 2012インスタンス)から、12c ODACプロバイダーを使用してOracle 12cデータベースへのリンクサーバーを作成しました。
「OLEリンクサーバーのDBプロバイダー「OraOLEDB.Oracle」[???]が列に一貫性のないメタデータを提供しています...」というエラーに遭遇しました。この方法でのOracleデータベースSELECT * FROM [LINKEDSERVER]..[SCHEMA].[TABLE]
バージョン11のODACプロバイダーをインストールしようとしましたが、同じ結果が得られました。
私にとってうまくいったのは、エラーメッセージを注意深く読んで、エラーの原因となっている列を見つけ、それらの列をCASTまたはOracle側の別のデータ型に変更することでした。列をNUMBER(?、0)からINTまたはDECIMAL(?、X)に変更する必要がありましたが、Xはゼロより大きい値でした。もう1回、CHAR(6)をVARCHAR(6)に変更して、それを検出する必要がありました。
他の人は、回避策としてOPENQUERY
を使用して成功しています。これは、Oracle側で列のデータ型を微調整する機能がない場合の唯一の選択肢となる可能性があります。
この問題をより深く掘り下げるための技術的専門知識を持っている誰かがいると思いますが、私の欠点は、SQL ServerとOracleのデータプロバイダーの間の相互作用にあると感じています。 OracleとMicrosoftは、お互いに完全に友好的であるとは限らず、ユーザーの利益のために互いに好意を抱く傾向もありません。