仕様:
- SQL Server 2008
- サーバー 2008 R2 64 ビット
- MS Access データベース
機能するもの:
- オフィス アクセス データ コンポーネントをインストールし、システム DSN などを作成して、Access データベースへのリンク サーバー接続を構成しました。これは、同じサーバー上のディレクトリにあります。
openquery を使用してデータをクエリすることに成功しました。
SELECT * FROM OPENQUERY(LINKEDHELL, 'SELECT * FROM [D:\path\mordor.mdb].Orcs')
(Sql Management Studio 内から) openquery を介して挿入/更新/削除できます
機能しないもの:
openquery 式をラップするビューを公開するデータベースを作成しました。これにより、アプリケーションはリンク サーバー接続を介したクエリであることを認識せず、ORM を使用できるようになります。適切な例: エンティティ フレームワーク。
ただし、データの取得は機能しますが、更新/挿入/削除は機能しません。MSDTC が正しく構成されていることを確認するのにかなりの時間を費やしましたが、ダイスはありません。
私が試したこと
MSDTC
- 有効なネットワーク DTC アクセス
- インバウンド/アウトバウンドを許可
- 構成されたファイアウォール
- 有効化された XA トランザクション
- DTC が動作するアカウントに .mdb へのアクセス権を付与
- これらの設定を行った後、Sql Serverを再起動しました
他の
- リンク サーバー セキュリティの構成: SQL ユーザーとローカル管理者アカウント間のマッピングを作成し、その SQL ユーザーでログインすると、ローカル管理者アカウントを使用してアクセス データベースに接続できるようにしました。
- RPC の分散トランザクションの昇格を有効にする: False
エラーは次のとおりです。
OLE DB provider "MSDASQL" for linked server "LINKEDHELL" returned message "[Microsoft][ODBC Microsoft Access Driver]Invalid attribute/option identifier ".
Msg 7391, Level 16, State 2, Line 4
The operation could not be performed because OLE DB provider "MSDASQL" for linked server "LINKEDHELL" was unable to begin a distributed transaction.
Sql Management Studio からこれを行うことで、これを簡単に再作成できます。
begin distributed transaction
//anything that queries the linked server
commit transaction
それで、私は何を逃したのですか?分散トランザクションが ODBC ドライバーでサポートされていることを読みましたが、ACCESS データベースがサポートしているかどうかはわかりません。したがって、誰かが少なくともそれを確認できれば。それは助けになるでしょう。