質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

2回答

5038閲覧

フォルダ上の一つのbatファイルを直接実行すると成功するのに Microsoft SQLServerのジョブ経由で実行すると、失敗してしまう(テキストファイルの作成)

saya24

総合スコア222

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2020/11/20 09:56

編集2020/11/20 10:27

WindowsServer2016 Standard
SQLServer14.0

次のユーザーとして実行: NT Service\SQLSERVERAGENT。C:\Windows\system32>echo 2020/11/20 18:03:21.45 ★開始★ 1>EmgSampleJobOnRunning.txt アクセスが拒否されました。. プロセス終了コード 1。. ステップは失敗しました

SQLServerの一つジョブについて、実行中である証として 1つのテキストファイルを配置しようとしています。
この配置はバットファイルを予め用意して(D:\bat\)、当該ジョブ一つ目のステップで、それを実行することによって達成しようとしています。
しかしアクセス権の拒否でジョブがこけてしまいます。

尚、ジョブ経由で実行しようとしているバットファイルは 単純にエクスプローラ上でWクリックすれば 無事に動作することは確認済です。

いずれにしても、バットファイルが配置されたフォルダ=作成されるべきテキストファイルの配置先でもあるフォルダへ
以下のとおり SQLServerエージェントのアカウントを セキュリティタブに追加しています。
イメージ説明
イメージ説明
一体何が理由でジョブ経由で テキストファイル作成のバットファイルを起動すると 失敗してしまっているのでしょうか? 

実行しているバットファイルの中身

bat

1echo %date% %time% ★開始★ >EmgSampleJobOnRunning.txt

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

次のユーザーとして実行: NT Service\SQLSERVERAGENT。

C:\Windows\system32>echo 2020/11/20 18:03:21.45 ★開始★ 1>EmgSampleJobOnRunning.txt
アクセスが拒否されました。. プロセス終了コード 1。. ステップは失敗しました

C:\Windows\system32\EmgSampleJobOnRunning.txtというファイルを作成しようとしていますが、当然C:\Windows\system32にはファイルは作れません。

ファイルをフルパスで書くか、バッチファイルのあるディレクトリーにファイルを作りたいなら、そのディレクトリーにcdすると良いでしょう。

CMD

1cd /d %~dp0 2echo %date% %time% ★開始★ >EmgSampleJobOnRunning.txt

%0でバッチファイル名。%~dp0でそのドライブ名とディレクトリ名。

投稿2020/11/20 11:57

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saya24

2020/11/20 13:10

うわ、それに違いないですね。はずい... 今から確認します。追って報告します。
saya24

2020/11/20 13:31

ECHO出力先=ファイルの作成先をフルパスにしたことで無事にできました。初歩的なことですみませんでした。 どういうわけか今日に限って、先のコマンドで 自分が意図したフォルダにテキストファイルができるものと勘違いをしておりました。 今から考えるとできるわけがない、疲れていたみたいです... ありがとうございました。
guest

0

SQL Serverのサービスを起動しているユーザーに、対象フォルダのアクセス権限は与えていますか?
そのバッチファイルにアクセスする権限が無いのだと思います。
以下参考
SQL Server エラー5アクセスが拒否されました。(備忘記録)

投稿2020/11/20 10:44

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saya24

2020/11/20 11:35

saziさん いつもお世話になっております。 SQLSERVERのサービスを確認致しました、ログオンのタブで ローカルアカウントではなくアカウントのほうへラジオボタンが選択されている状態でした。 アカウント名は NT Service\MSSQLSERVER となっておりましたので 早速バットファイルの配置先兼作成されるテキストファイルの保存先であるフォルダに 一先ずフルコンで ユーザ追加を図りました。 再起動はしていない状態で ジョブ実行をリトライしてみたのですが、まだアクセス失敗になります。 ご紹介の記事にあるとおり、サーバの再起動が やはり必須なのでしょうか? 申し訳ないです、ご想像以上に 素人で
sazi

2020/11/20 12:16

よく見るとバッチは実行していますね。書き込み先の権限ですね。 直接実行した場合はその場所が作業フォルダになるので、実行されるのでしょう。 otnさんの回答にあるように、CDで移動するとか、バッチのショートカットを作成し、そこで作業フォルダを指定したものを実行するようにすれば良いと思います。
saya24

2020/11/20 13:11

saziさん 親切にありがとうございます。作業の上で 改めて報告致します。 SQL組み立て以外でも お世話になるとは
saya24

2020/11/20 13:35 編集

ECHO出力先をフルパスにする修正を加え、無事SQLServerジョブ経由の実行でも 無事動作するようになりました。お騒がせをしまして すみませんでした。 また目からうろこのSQL組み立ててで 勉強・ご支援を賜れてたらと思います。 ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問