it-swarm-ja.com

SQL Server 2008 R2(x86)およびアクセスエンジン

すべて、

X64 Windows7を実行している多くのマシンでSQLServer 2008 R2(Service Pack 1)用のAccessデータベースエンジンを「管理者」として実行(およびSQL Serverを「sa」として設定)しても問題なくセットアップしました。また、Windows7およびSQLServer 2008 R2 Express Edition(x86)を実行しているx86ベースのマシンにAccessデータベースエンジンを問題なくインストールしました。ただし、x86 Windows7でSQLServer 2008R2のDeveloperEditionを使用してAccessデータベースエンジンをセットアップしようとすると、機能しません!? Expressでは機能しますが、Developerでは機能しません。 SQLの完全な再インストールを試みましたが、それでも機能せず、次のエラーがスローされます。

OLE DB provider "Microsoft.Ace.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error". 
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.Ace.OLEDB.12.0" for linked server "(null)".

マシン情報は(「systeminfo」を実行しているコマンドラインから取得):

OS Name:              Microsoft Windows 7 Professional
OS Version:           6.1.7601 Service Pack 1 Build 7601
OS Configuration:     Standalone workstation
System Type:          X86-based PC
Processor(s):         1 Processor(s) Installed. 
                      [01]: x64 Family 6 Model 42 Stepping 7 GenuineIntel ~2501Mhz

32ビットバージョンを正常にインストールしたAccessEngineをセットアップするには、Management Studioにアクセスして、次のクエリを実行します。

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
GO

-- Then each of the following separately.
EXEC sp_configure 'show advanced options',1
reconfigure
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure

リンクサーバーが正しく構成されているかどうかを確認するために通常実行するクエリの1つは、次のとおりです。

SELECT * FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'J:\Data\thisDir\thatDir\someAccessFile.mdb'; 'admin';'',thisTable);
GO

このプロセスは、Accessデータベースエンジン(それぞれx86とx64)を備えたSQL Express 2008 R2の両方(x86とx64)を含むすべての構成で機能しますが、x86 Windows7のDeveloperEditionでは機能しません。なぜですか?

この問題を解決する方法についてアドバイスをくれる人がいますか?

お時間をいただき、誠にありがとうございます。

3
MoonKnight

この投稿 問題はTempフォルダーのアクセス許可でした:

私の解決策は、SQLServerのサービスアカウントを使用してサーバーに一度ログインすることでした。その後すぐにすべてが機能し、これを2番目のサーバーに複製しました。

AceエンジンとJetエンジンはどちらも、作業を行うためにTempフォルダーにアクセスする必要があることを他の場所で読みました。一時フォルダへのアクセスを「配線」するには、一度ログインする必要があると思います。

1
harrymc

これは、SQLサーバーがリンクサーバーのセットアップに使用する「ネットワークサービス」フォルダーのアクセス許可が原因で発生しています。別のアカウントを使用してリンクサーバーにアクセスするには(サーバーのアクセス許可が正しく設定されていると想定)、次の手順を実行する必要があります。

Windowsエクスプローラーを開き、次のフォルダーに移動します(現在、システムファイルを処理しているので、次の手順を慎重に実行してください)。「C:\ Windows\ServiceProfiles\NetworkService\AppData\Local」。このディレクトリには「Temp」というフォルダが含まれています。これを右クリックして「プロパティ」を選択します。次のダイアログで、[セキュリティ]タブをクリックします。 Accessデータベースエンジンを使用するように設定する標準ユーザーアカウントが表示されている場合、これは、このフォルダーに対するいくつかの特権が既にあることを意味します。[ユーザー名のグループ:]リストにない場合は、次のことを行う必要があります。追加されます。いずれの場合も、[ユーザー名のグループ]リストの下にある[編集...]ボタンをクリックすると、[一時的なアクセス許可]ダイアログが表示されます。標準ユーザーを権限グループに追加する必要がある場合は、[追加..]ボタンを使用して追加し、次の[ユーザーまたはグループの選択]ダイアログでアカウント名のスペルが正しいことを確認します。標準ユーザーがアクセス許可リストに表示されたら、そのユーザーを選択し、[標準ユーザーのアクセス許可]選択メニューで[許可]列の下の[フルコントロール]チェックボックスをオンにします。 [OK]をクリックします。もう一度[OK]をクリックして、このメニューを終了します。

これで、この方法でアクセス許可を指定したすべてのユーザーとしてアクセスクエリを実行できるようになります。

また、Access Engineを正しく構成するには、ManagementStudioで次のクエリを実行したことを確認する必要があります。

-- These can be run as one batch.
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', 
    'DynamicParameters', 1 
GO

-- Run each of the following queries individually.
EXEC sp_configure 'show advanced options',1
reconfigure
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
Reconfigure

これがお役に立てば幸いです。

1
MoonKnight