misc.log

日常茶飯事とお仕事と

SQL Serverのサーバー間ストアドプロシージャ差異調査

ストアドプロシージャを使った開発で、ストアドプロシージャのソース管理や変更管理がうまくいってません。設計資料にも記載が無かったり、そもそもストアドプロシージャでやってるのか.NETでやってるのかも資料上明確でないという状況。

というわけで、結構細かい修正を行う改修プロジェクトがリリース作業を行おうとすると、「えっと、何を変更したっけ?」という状況になってしまうという悲しい環境で作業中です。

というわけで、SQL Serverを使った案件で、開発サーバーと本番サーバーのストアドプロシージャの差異を洗い出す必要があるのですが、いつもやり方を聞かれたりして面倒なのでメモっておきます。

ちなみに本件の対象はSQL Server 2008 R2を想定しています。バージョンが違うと設定項目等も変わりますので適宜読み替えてください。

差異の洗い出し方針

サーバー間のストアドプロシージャ差異を洗い出すのに一番シンプルな方法は、全部のストアドプロシージャソースをテキストファイルとして抽出し、差分比較ツールにかけることですね。というわけでこの方針で作業するための「ストアドプロシージャのソースをテキストファイルに出す」という手順を以下に紹介しておきます。

ストアドプロシージャのソースをテキストファイルに出す

  1. SQL Server Management Studioを開く。
  2. 左のツリー表示からDBを選択、右クリック⇒[タスク]⇒[スクリプトの生成]
  3. [オブジェクト選択]⇒[特定のデータベースオブジェクトの選択]⇒[ストアドプロシージャ]
  4. [スクリプト作成オプションの設定]に移る。
  5. [ファイルに保存]⇒[オブジェクトごとに1つのファイル]を選択。保存先フォルダを指定。
  6. [詳細設定]ボタンを押し、下記の設定を行う。
    • 全般/USE DATABSEのスクリプトを作成 → False
    • 全般/説明用ヘッダーを含める → False
  7. ウィザードを次に進め、出力完了させる。

手順6にある設定を行わないと、サーバーごとのUSE Database宣言と、出力年月日時刻が入ってしまい、差異比較の際に「全部差異あり」となってしまいます。

SQL Server 2012の教科書 開発編

SQL Server 2012の教科書 開発編