特定の時間に夜間にSQLプロファイラートレースを実行する方法

午前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のコマンドを作成します。





ここで、@ jで説明されているステップ1でジョブを作成する必要があります。 ただし、仕事の最後に跡形もなくJobaが消えるように、このJobにはまだ自殺を加えています。







ここで、xp_cmdshellについての悲鳴が聞こえます...これについてコメントしたくありません。 最後に、誰も法廷で自分自身に対して証言するべきではありません。 しかし、それ以外のことはできます。 トレースをメールで送信できる可能性は低い-それは大きい。 パックできますが。 さて、それをサーバー自体に残して、ユーザーが自分で拾うことを許可するか、UNCを介してユーザーがアクセスできる場所にプルする



だからあなたが持っている:





このような長いチェーンが機能するとは思ってもみませんでした。 しかし、それは動作します...







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



All Articles