sql >> データベース >  >> RDS >> Sqlserver

OPENROWSETエラーを使用してAccess2007データをクエリするSQLServer2012

    最後に、SQL ServerがAccessデータベースと「通信」するのに何度か失敗した後、SSMSの「リンクサーバー」として、またはOPENROWSET()を介して T-SQLで–次の3つの提案を提供するこのブログ投稿を見つけました。

    微調整#1:OLEDBプロバイダーの設定

    ACE(またはJet)用のOLE DBプロバイダーでは、[動的パラメーター]および[処理中の許可]オプションを有効にする必要があります。 SSMSで、

    を開きます

    サーバーオブジェクト>リンクサーバー>プロバイダー

    ブランチで、[Microsoft.ACE.OLEDB.12.0](または[Microsoft.Jet.OLEDB.4.0])を右クリックし、[プロパティ]を選択して、これらのオプションが選択されていることを確認します。

    微調整#2:一時フォルダの権限

    これは私を困惑させていたものです。

    どうやらSQLServerは、Accessデータベースに対してOLE DBクエリを実行しているときに、一時ファイルに情報を書き込む必要があるようです。 SQL Serverはサービスとして実行されているため、サービスが実行されているアカウントの%TEMP%フォルダーを使用します。

    SQL Serverサービスが組み込みの「ネットワークサービス」アカウントで実行されている場合、一時フォルダーは

    %SystemRoot%\ ServiceProfiles \ NetworkService \ AppData \ Local \ Temp

    組み込みの「ローカルサービス」アカウントで実行されている場合、一時フォルダは

    %SystemRoot%\ ServiceProfiles \ LocalService \ AppData \ Local \ Temp

    私の問題は、SSMSが myで実行されていたことです。 アカウント(ネットワークサービスではない)なので、Tempフォルダーへの読み取りアクセス権しかありませんでした

    そのフォルダに対する変更権限を自分に付与したら

    ここで別の質問、つまり...

    に記載されているように、OPENROWSETクエリを有効にしました。
    EXEC sp_configure 'show advanced options', 1
    RECONFIGURE
    GO
    EXEC sp_configure 'ad hoc distributed queries', 1
    RECONFIGURE
    GO
    

    ...クエリは正常に機能しました:

    微調整#3:memory_to_reserve

    私の場合は使用する必要はありませんでしたが、前述のブログでは、SQLServerサービスの「-gmemory_to_reserve」スタートアップパラメーターを調整することで、同様のエラーを回避できると主張しています。そのためには:

    • SQLServer構成マネージャーを起動します
    • SQL Serverサービスを右クリックして([SQL Serverサービス]タブ)、[プロパティ]を選択します
    • [詳細設定]タブで、-g512;を先頭に追加します 「スタートアップパラメータ」設定へ
    • SQLServerサービスを再起動します

    「memory_to_reserve」設定の詳細については、MSDNの記事を参照してください。



    1. xマイル半径内の他の行のmySQL経度および緯度クエリ

    2. EBS 12.2.5以降:ログインページボタンのずれ

    3. 2つの接続されたテーブルを作成するためのデータベースの選択?

    4. PostgreSQL9.0を使用したLondisteレプリケーション