.bat
ファイルを特定のフォルダーにコピーする.exe
ファイルを実行し、それを実行していくつかのファイルを手動で抽出できます。
SQL Serverエージェントジョブ(ステップ1)の一部として使用すると、「Daily_Update」というジョブが成功しますbut実際には何もしません。
SQL Serverがあるサーバーは、ファイルが移動および実行されるファイルの場所とは異なります。 UNCパスでファイルの場所を指定しています。 \\A10
は、操作しているスクリプトと.dat
ファイルを備えたサーバーです。\\A08
は、SQL Serverを備えたサーバーです。
ディスク指定子c:\
表記を使用すると、次のようになります。
指定されたパスが見つかりません。
UNCパス名を使用すると、次のようになります。
アクセスが拒否されました。
SQL Serverが存在するサーバーのデスクトップから.bat
ファイルを実行すると、手動で正常に動作します。
なぜこれが起こっているのでしょうか?
SQL Serverユーザーアカウントはその特定のフォルダーにアクセスできますか?
簡単なxp_cmdshellを実行して、それを確認してください。
EXEC master.dbo.xp_cmdshell 'dir C:\<path>'
既定の構成では、SQL Serverエージェントは、SSMSにログインしたときと同じユーザーアカウントでは実行されません。たとえば、「SQL Serverエージェント」システムサービスはsqlagent
ユーザーアカウントで実行されます。 「SQL Server」サービスはdataeng
の下で実行されます。 SSMSのクエリは、自分のユーザー名で実行されます。 mpag
システムサービスのSQL Serverエージェントの "ログオン"で参照されているユーザー名に、バットおよびバット自体のあるディレクトリへの読み取り/実行(またはrwx)アクセス権があることを確認します。
これをする
SQL Server
_サービスがアクセスできるかどうかを簡単に確認します。ただし、_SQL Server
_が使用されている場合でも、_SQL Server Agent
_-質問で使用しようとしている-は使用できませんservices.msc
_を実行します。プロンプトが表示されたら、Windows(DBではなく)管理者のユーザー名とパスワードを入力します。View->Add/Remove Columns
_を介して追加し、Detail
ビューに切り替えます。SQL Server (MSSQLSERVER)
およびSQL Server Agent (MSSQLSERVER)
エントリまでスクロールし、それぞれの[ログイン名]列の(domain \)ユーザー名を確認します。締め切り_services.msc
_Windows Explorer
_(別名_(My) Computer
_)で.batファイルが含まれているディレクトリを右クリックし、Properties
を選択します。Security
(タブ)-> Edit
(ボタン)-> Add
(ボタン)Add
をクリックし、他のユーザー名を追加して[OK]をクリックします