問題タブ [sql-agent-job]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - SQL Server2008r2でのSQLジョブの実行
私のデータベースサーバーが一度に複数のSQLジョブ(長時間実行/複雑)を実行しているかどうかを知りたいのですが、これにより他のクエリでタイムアウトが発生しますか?
ジョブは、異なるドライブで実行されている異なるデータベースに属している場合があります。
前もって感謝します
sql-server - SQL Server で長時間実行されるジョブを実行する
SQL Server 2008 を使用しています。エージェントを使用してジョブを作成し、毎分実行するようにスケジュールしました。このジョブは、データをテーブル XXX から一時テーブルに移動し、最終的にテーブル YYY に移動するストアド プロシージャを実行します。
データがかなり大きいため、ジョブの実行には 1 分以上かかる場合があります。
最初のインスタンスがまだ実行されている場合でも、ジョブの 2 番目のインスタンスが開始されますか?
その場合、一時テーブル (ステータス = 1) のレコードをマークして、それらのレコードがジョブの前のインスタンスによって処理されていることを示す必要がありますか?
ジョブの 2 番目のインスタンスを開始しないように、ジョブのインスタンスが現在実行中であることを確認する方法はありますか?
私が気付いていない別の解決策はありますか?(スループットが重要)
sql-server - SQL エージェント ジョブで実行される SSIS パッケージからの Windows イベント ログ アクセス
クライアント SQL インストール (2005、2008、または 2008 R2) にデプロイされ、製品のサポート ツールを提供するデータ抽出を実行する SSIS パッケージを作成しました。展開プロセスでは、資格情報とプロキシ アカウントを介して SQL エージェント ジョブで SSIS パッケージを実行するためのサービス アカウントとして使用されるため、Windows AD アカウント (通常のユーザー、昇格された特権なし) を作成する必要があります。これはすべて完全に機能し、このジョブを実行するために必要な権限を制限できることを意味します。
ただし、SSIS パッケージのエラー ログを Windows イベント ログに含めたいと考えました。BIDS でパッケージを実行し (もちろん、自分の資格情報を使用します)、パッケージの失敗を強制すると、問題なくログに記録されます。SQL エージェント ジョブによって実行されているときに、(duff 接続文字列を構成ファイルに入れることによって) パッケージを強制的に失敗させると、何もログに記録されません。サービス アカウントが使用されており、SQL Server ホスト マシンで認証されたユーザーですが、イベント ログに書き込まれません。サービス アカウントをローカル管理者グループに追加すると、ログに問題なく書き込まれますが、Windows イベント ログの考え方は、書き込みに特権を昇格する必要がないということだと思いましたか?
当社のサポート チームは Windows イベント ログの使用に熱心ですが、サービス アカウントに高い特権を付与せずにそうする方法はないと思います。何か不足していますか?SSIS ジョブ ステップ ページの [ログ] タブはあまり機能していないように見えますが、おそらくそれが欠けているのでしょうか?
これが ServerFault により適している場合は申し訳ありませんが、開発中に発生した問題であるため、これがどちらの側に該当するかを判断できませんでした。だったら引っ越します。
どうもありがとう
スティーブ
sql-server - SQLServer2008の挿入トリガーが起動しない
単にジョブを実行するテーブルにINSERTトリガーがあります。
例:
このテーブルにレコードを挿入すると、問題なくジョブが実行されます。ただし、私よりも権限が低い人が数人います(データベースのdb_datareader / db_datawriterのみ)。テーブルにレコードを挿入することはできますが、トリガーは起動しません。
私はSQLServerの初心者であり、トリガーを起動するためにユーザーが昇格されたアクセス許可を必要としないという印象を受けました(これは大きな利点の1つだと思いました!)。これはトリガーレベルでの許可の問題ですか、それともジョブレベルでの許可の問題ですか?この制限を回避するにはどうすればよいですか?
sql-server - SQL Server ジョブが実行されているかどうかを正確に検出し、既に実行されているジョブに対処するにはどうすればよいですか?
現在、このようなコードを使用して、SQL サーバー ジョブが実行されているかどうかを検出しています。(これは SQL Server 2005、すべての SP です)
そこに問題はなく、一般的に言えば、問題なく動作します。
しかし.... (常にしかし)
場合によっては、これを呼び出して「ジョブが実行されていません」という結果が返されたら、次の方法でジョブを開始しようとします。
SQL は、「保留中の要求が既にあるため、SQLAgent はジョブの開始を拒否しました」と返します。
Ok。また、問題ありません。このコードがターゲット ジョブを開始する前に、ターゲット ジョブを開始できるわずかな時間枠があると考えられますが、開始されたかどうかを確認した後です。ただし、それを try catch にまとめて、エラーを無視することはできますよね?
ただし、ここに問題があります。
10回中9回、これはうまくいきます。SQL エージェントはエラーを発生させ、キャッチされ、処理が続行されます。ジョブは既に実行されているため、問題はありません。
しかし、時折、[ジョブ履歴] ビューにメッセージが表示されることがあります (特定のジョブが実行されているかどうかを検出し、実際に別のジョブから実行されていない場合は開始する上記のコードを覚えておいてください)。保留中のリクエストがすでにあるため、ジョブの開始を拒否しました。」
もちろん、これは TRY CATCH が処理するはずの正確なエラーです!
これが発生すると、実行中のジョブはただ停止しますが、私が知る限り、すぐには終了しません。あちこちにログを記録しましたが、一貫性がありません。一度失敗すると、場所 a になり、次は場所 b になります。場合によっては、場所 A と場所 B には、
それらの間に。非常に奇妙な。基本的に、ジョブは不用意にダンプされたように見え、ジョブで実行するために残っているものは +まったく実行されません。
ただし、「exec StartJob」を削除すると (または、ターゲット ジョブがまだ実行されていないことがわかっているときに 1 回だけ呼び出すと)、すべてが完全に機能し、ジョブ内のすべての処理が実行されます。
このすべての背後にある目的は、(特に) トリガーの結果としてジョブを開始することであり、ジョブが既に開始されている場合は、実際に「もう一度開始する」必要はありません。
SQL エージェントのジョブ処理でこのような動作に遭遇した人はいますか?
編集:現在の制御の流れは次のようになります。
- テーブルへの変更 (更新または挿入)...
- 呼び出すトリガーを起動します...
- ...を呼び出すストアドプロシージャ
- sp_Start_Job...
- 特定のジョブを開始します...
- 別のストアド プロシージャ (CheckQueue と呼ばれる) を呼び出します...
- いくつかの処理を実行し、...
- いくつかのテーブルをチェックし、その内容によっては...
- 別のジョブで sp_start_job を呼び出して、追加の作業を処理する 2 番目の同時ジョブを開始します (この 2 番目のジョブは CheckQueue sproc も呼び出しますが、2 つの呼び出しは完全に別個のデータ セットで動作します)。
ssis - SSIS/SQLエージェントからのデータベースユーザーパスワード
SQLジョブから実行しようとしているSSISパッケージがあります。ただし、失敗し、接続文字列で指定されたユーザーのパスワードが間違っているとログに記録されます。テストのために、保護レベルをEncryptSensitiveWithKeyに設定しました。これは、BIDSから正常に実行されます。SSISにインポートするときに、ServerStorageに変更します。(ドキュメントの私の理解は、これは機能するはずだと言っています。しかし、私は間違っている可能性があります。)インポート中に、私が提供する復号化キーを要求し、すべてが正常に見えます。
SQLServerエージェントでジョブを設定する場合も問題ないようです。ただし、ジョブを実行すると失敗し、ログにはそのユーザーのパスワードが正しくないことが示されます。権限に問題があるとは言えませんが、パスワードが間違っています。
接続を確認し、データベースへのアクセスに使用されるユーザー名とパスワードを再確認しました。そのユーザー名とパスワードの組み合わせで問題なく接続できます。これは、データベースへの接続に使用されるユーザーです。ジョブの実行に問題はないようです。
これに関する助けをいただければ幸いです。
sql-server - iisの帯域外でWindowsサービスとしてタスクを実行しています
長時間実行または高プロセッサ プロセスの要求が呼び出される Web アプリがあります。
これを IIS サーバーからオフロードする Windows サービスを作成したいと考えています。これらのジョブの待ち時間を短縮するために、このサービスを複数のマシンにインストールします。私たちが検討しているアイデアの 1 つは、オブジェクトを別の列として Job
Sql Server にシリアル化することです。JobType
ジョブ サービスは、そのインジケーターで行を更新することによってジョブを要求します。これにより、他のサービスがそのジョブを取得できなくなります。ジョブが完了すると、サービスはそのエントリを削除します。
私が探しているのは、ジョブ サービス キューイングを実現するための他の、おそらくより良いアイデアです。
sql - SQLServer2008エージェントジョブでログオンが使用されているユーザー
ネットワークドライブ上のCSVファイルにいくつかのテーブルを転送するSSISパッケージがあります。それは私のコンピュータから手動で正常に動作します。サーバーのMSDBデータベースに保存し、そこから実行すると正常に実行されますが、MSDBからSSISパッケージを実行する1つのステップを持つジョブを作成すると、CSVファイル名が見つからないと表示されません。
私は昨日一日中過ごしました。これは、ジョブで使用されているログオンクレデンシャルに関係するアクセス許可の問題を意味することを理解しています。ジョブの所有者はdomain/myuseridであることが示され、ステップのプロパティは、私のユーザー名でWindows認証を使用していることを示しています。問題は、私がこのフォルダにアクセスできることを知っていることです。
エラーログの最初の行には、「ユーザーとして実行:servername\SYSTEM」と記載されています。そのため、ユーザー「SYSTEM」がファイルをロードしたいネットワークフォルダにアクセスできることを確認しましたが、それでも同じエラーが発生します。
コマンドラインは、@ command = N'/ SQL "\ SSIS package name" / SERVER servername / CHECKPOINTING OFF /REPORTINGE'のようになります。
編集:SQL Serverエージェントのジョブアカウントの問題を見つけました。誰かがジョブの実行先を尋ね、marc_sが「実際にはその答えを見つけることができないようです。私のジョブは通常データベース内のものを選択して更新するためです。 、特定のステップで他のアカウントを指定しない限り、デフォルトで「所有者」アカウントが使用されると想定します。」
これはまた、アクセス権を持つ私のログオン情報を使用していると私に信じさせます
c# - SQL エージェント ジョブ内で C# コードを実行する
指定された時間に毎日実行する必要があるコードがあります。現在のコードは、私の Web アプリケーションの一部として座っています。コードが使用するデータを取得/保存するストアド プロシージャが 2 つあります。
Microsoft SQL Server Management Studio 2008 R2 をセットアップして、コードと SQL エージェント ジョブのストアド プロシージャを実行する方法を教えてください。これまでにこれを行ったことがなく、ドキュメントが見つからないようです。
c# - C# を使用して SQL Server 2008 のジョブからスクリプトを生成するにはどうすればよいですか?
SSMS を使用して、SQL Server のジョブのスクリプトを生成できることはわかっています。これを C# で実行したいのですが、どうすればよいですか?