午前3時から3時30分まで問題をキャッチする必要があるときに、SQLプロファイラトレースを実行する方法は? これはサーバー側のトレースを使用して実行できますが、これは非常に不便です。 難しくはありませんが、不快で、いつも怠け者です。 最後に、これを完全に自動化することにしました。 このように:

ちなみに、ここのJenkinsは完全にオプションであり、必要なパラメーターを使用してスクリプトを呼び出すためのインターフェイスとしてのみ機能します。

解決策を大まかに説明しますが、とにかくインフラストラクチャに特に関連する多くの詳細があります。 つまり、左側に示されていることを行います。

そのため、batファイルは何らかの処理を行い、アクションを既にPowerShellスクリプトに転送します。PowerShellスクリプトは、Jenkinsから受け取ったすべてのパラメーターと2つの変数( '%BUILD_USER_ID%'、 '%BUILD_USER_EMAIL%')を渡します。 後で役立つでしょう:

奇妙なことに、ps1自体では、ほとんど価値のあることはほとんどありません。このファイルが置かれるサーバー名によって、特別な共有上のディレクトリの名前を作成して返すプロシージャを呼び出します。 このディレクトリが作成されるサーバーは、トレースが起動されるサーバーが存在するデータセンターによって異なります。 さらに、ユーザーにはトレースを読み取る権利が与えられ、これらのディレクトリを数日でクリーンアップするプロセスがあります。 ご覧のとおり、これは必要ない場合がありますが、すべてを安全にスキップできます。
これで、アクションは、SQLファイルでトレースが起動されるサーバーに既に転送されます。 locは、完成したトレースがコピーされるパスを含む単なるパラメーターです。 定数に置き換えることができます。

最初に、トレースファイルをローカルに書き込む場所を見つける必要があります。 たとえば、次のように:

次に、少し掃除。 突然、そのようなファイルがすでに存在するか、誰かが以前にトレースを実行しましたか? sys.tracesを終了し、%jenkinsTraceSch%のトレース書き込みが既に存在する場合は停止/削除する必要があります。 次に、トレースを作成します(サイズを制限してください!)そして、sp_trace_setevent呼び出しで少し面倒です。 イベントと列の間でCROSS JOINを行うことで、あなたの生活を楽にすることができます:

テイストにフィルターを追加します。 ここで、あなたはフクロウを完成させます。 これは、スクリプトパラメータを使用する最初の場所です-フィルタタイプとデータベース名:

今、スラッシュが行きました:

@jで、Jobのコマンドを作成します。
- WAITFORで適切な時間を待つ
- トラックを実行する
- 注文された時間を待つ
- レースを止める
- 念のためもう1秒待ちます-非同期操作
- チームを結成して、トレースを適切な場所にコピーします
- 彼女を実行します
- フォームの件名と本文
- トレースへのリンクを記載したsp_send_dbmail経由で顧客に手紙を送る
ここで、@ jで説明されているステップ1でジョブを作成する必要があります。 ただし、仕事の最後に跡形もなくJobaが消えるように、このJobにはまだ自殺を加えています。

ここで、xp_cmdshellについての悲鳴が聞こえます...これについてコメントしたくありません。 最後に、誰も法廷で自分自身に対して証言するべきではありません。 しかし、それ以外のことはできます。 トレースをメールで送信できる可能性は低い-それは大きい。 パックできますが。 さて、それをサーバー自体に残して、ユーザーが自分で拾うことを許可するか、UNCを介してユーザーがアクセスできる場所にプルする
だからあなたが持っている:
- ジェンキンスはバットを呼ぶ
- バットはPowerShellを呼び出します
- powershellはsqlcmdを介してSQLスクリプトを呼び出します
- スクリプトはジョブを作成します
- ジョブはトレースを作成し、自殺の前にメールを送信します。
このような長いチェーンが機能するとは思ってもみませんでした。 しかし、それは動作します...

PS:そして、はい、xp_cmdshellが禁止されていて有効にできない場合でも、少なくとも2つの方法でmy_xp_cmdshellを記述できます。 したがって、この「保護」は何に対しても保護しません。