スポンサーサイト

一定期間更新がないため広告を表示しています

[Google PR]

Twitterはじめました。プラプラ | Twitter

【SQLServer】2008以降のManagement Stadioではスクリプトのデバッグ実行が可能!

SQLServerでT-SQLを使用した開発時、何が困るかっていうと、
デバッグ環境が貧弱であることでしょうか。

VBAのいたれりつくせりのデバッグ環境になれていると、
ほんとそう思います。

特にステップ実行できないのが歯がゆいなあと思っていました。
たしかに、SQLServer2005ではステップ実行が可能ではありました。
しかしながら、別途VisualStudioの有料版が必要でしたので
使えなかったのです。(悲)
しょうがないので、
ストアド実行時に処理途中の変数の値を確認したい場合、
デバッグ用のコードを入れて再コンパイルした上で実行、
その値を確認していました。

そして、SQLServer2008になってもSQLServer2005の時と同じように
がりがり原始的なデバッグをしていたのですが、
実はSQLServer2008から、
標準のManagement Studioの機能でデバッグできるように
なっていたようです。

この情報を知ったのは以下のブログ。すばらしい!
ぶりりあんとろーど(仮) | [MSSQL]ストアドのデバッグ

これは知りませんでした。

で、実際試してみると、前からやりたかった、
ステップ実行やリアルタイムでの変数の値の確認、
ついでに動的SQLを実行した場合、別タブで動的SQLが表示されるなど
必要十分な機能があるではないですか!
これは使わない手はありません。

・T-SQL(Transact-SQL)デバッグのための準備


1) ファイアウォールの設定について


SQLServerManagementStudio(マネジメントスタジオ)でデバッグを行う場合、
データベースサーバー側とクライアント側、双方の
ファイアウォールの設定が必要です。
必要なファイアウォール設定は以下のとおり。

(サーバー側)
TCP ポート 135 を例外の一覧に追加
プログラム sqlservr.exe を例外の一覧に追加
注:ドメインのポリシーにより IPSec 経由でネットワーク通信を行う必要がある場合は、UDP ポート 4500 と UDP ポート 500 も例外の一覧に追加する必要があります。

(クライアント側)
TCP ポート 135 を例外の一覧に追加
プログラム ssms.exe (SQL Server Management Studio) を例外の一覧に追加

ちなみにファイアウォールを開いていない場合、
Windows7のローカル環境にいれたDBで試した際には、
デバッグ実行時、ファイアウォールを開くかどうかの確認メッセージが
表示されました。ただし、管理者としてManagement Studioを
実行していない場合、エラーが発生し、ファイアウォールを開くことが
できませんでした。(管理者として実行するとOKでした。)

2) 実行権限について


さらにファイアウォール以外の条件として、
デバッグの実行には sysadmin 権限が必要となります。

(2013/06/11 追記) ----------------------
SQLServer認証でリモートサーバー上でデバッグを行うには、
SQLServerアカウントに加えて、
クライアントのWindowsログインユーザーが、
sysadminとして登録されている必要があります。
(参考)
リモート デバッグのアクセス許可

たぶん、@ITの以下の質問もここでひっかかっていると思います。
SQL Server2008のリモートデバッグ
(2013/06/11 追記おわり) ----------------------

また、デバッグは、本番環境ではなくテスト環境で
実施することが推奨
されています。
(理由)
いくつかの Transact-SQL ステートメントの処理を調査するときに、デバッグ セッションが長時間に及ぶことがあります。セッションによって取得されたロック (たとえば更新ロック) が、セッションが終了するかトランザクションがコミットまたはロールバックされるまで、長時間保持される場合があります。

以上、T-SQLデバッグ環境の準備を簡単にまとめましたが、
詳細はmsdnで確認してください。
Transact-SQL デバッガの構成および起動


・T-SQL(Transact-SQL)デバッグの実行方法


デバッグ実行ではステップイン、ステップオーバー、
さらにブレークポイントを設定することにより任意のステップで
実行を一時停止することが可能です。

さて、既存のストアドプロシージャをデバッグする場合、
どのように実行させればよいのでしょうか。

このような場合、クエリウインドでストアド呼び出しを記述し、
ここからデバッグを実行します。
ストアドのパラメータが多い場合は手書きするのは
少し面倒なので、Management Studioで自動作成すると便利です。

作成方法は、対象のストアドプロシージャを選択し、右クリック。
リストの「ストアドプロシージャをスクリプト化(S)」
→「EXECUTE(E)」→「新しいクエリエディターウインドウ」
で自動作成できます。

作成したストアド呼び出しのウインドからデバッグを実行。
実行は、ショートカットでは、F11で可能です。


・T-SQL(Transact-SQL)デバッグの雰囲気


では、実際にためしてみます。

サンプルのストアドプロシージャはこんな感じ。
SQLを動的に作成する必要性は全くないのですが、サンプルなので。
(動的なSQLの場合のほうがデバッグ環境の必要性がより
高いと思います。構文エラーがあってもコンパイルは
通ってしまいますので。)
内容は、パラメータを受け取り、受け取ったパラメータを
テーブルへ書き込むという処理です。

SSMSデバッグ説明_1


次にこのストアドを呼び出す記述を自動作成します。
対象ストアドを選択し、「ストアドプロシージャをスクリプト化(S)」
→「EXECUTE(E)」→「新しいクエリエディターウインドウ」

SSMSデバッグ説明_2


こんな感じでストアド呼び出し部が作成されます。
パラメータの値は手書き。

SSMSデバッグ説明_3

そしてここでデバッグ実行。
F11キー(ステップイン)もしくは、Alt+F5(デバッグ開始)。
ちなみにVBAとはショートカットキーが異なります。

開始後はF11キーでステップをすすめていきます。
ステップ毎ですすめるのではなく、ブレークポイントを設定し、
その部分まで処理を一気にすすめるといったことも可能です。

下部ウインドでは現在変数に設定されている値が
リアルタイムで確認できます。
SSMSデバッグ説明_4


動的SQL実行部分では別ウインドが立ち上がります。
*EXEC 内で変数を連結していないと立ち上がらないようです。
サンプル内では空文字を連結しています。

SSMSデバッグ説明_5


いやー、これは便利ですね。
動的SQLや、カーソルをぐるぐるまわすようなストアドをデバッグする
時に重宝するかと思います。
(まあ動的SQLやカーソルというのはT-SQLであまり推奨されたものでは
ありませんが、使わざるをえない場合もありますよね。)

以下、若干気になる点もあります。
(もしかして、SQLServer2012のSSMSでは改善されているかも?未検証)
・ステップを戻ることができない。
・ステップを飛ばすことはできない。(ブレークポイントまで飛ばすではなく)
・実行途中で変数の値を書き換えることができない。
・実行途中でコードを書き換えることができない。(さすがに無理でしょうね。)
・ステップインでデバッグが開始されてしまうので、
 ステップイン連打で確認していると、最終行まで実行された後、
 再度実行してしまう。


ストアドデバッグの方法、知っておくと便利かと思います。

以上、SQLSever2008以降のSSMSは、優秀(?とまではいいすぎか)な
T-SQLデバッガ機能が標準搭載されておりましたというお話でした。


T-SQLのバイブル。バイブルなので高いです。6090円
それだけの価値があるかないかはあなた次第。
(このシリーズ、2008以降はでていません。残念。)
>>SQL Server 2005 ストアドプロシージャプログラミング (SQL Server Books)

[Google PR]

Twitterはじめました。プラプラ | Twitter

スポンサーサイト

[Google PR]

Twitterはじめました。プラプラ | Twitter

<< 【デジモノ】XperiaAって「エクスペリアエース」と読めました?ケースや保護シートがもりもり発売開始。
【デジモノ】狙うならお得な在庫分。円安の影響でiPodTouch,iPad,iPadminiの価格が上がるようです。 >>

[関連エントリ 最新5]

[Google PR]


[最新エントリ 5]

>>トップページ

コメント
データベースエンジンインスタンスと同じコンピュータ上でのデバッグは動きました。ですが、リモートから接続してのデバッグだと、FWの設定などしても「T-SQLデバッグを開始できません。..」がでてしまい未だできていません。。

みなさんはできているのだろうか...
  • PX
  • 2013/06/07 4:44 PM
PXさま
コメントありがとうございます。返信遅れてすみません。

さて、「T-SQLデバッグを開始できません。」のエラーが発生し、
デバッグできないとのことですが、
このメッセージが表示されているのであれば、
とりあえずファイアウォールの設定はOKかと思います。

ちょっと調べてみたところ、
SQLServer認証の場合、
リモートサーバー上でデバッグする際には
SQLServerのアカウントおよび、接続するWindowsアカウントの両方に
sysadminの権限が必要なようです。
http://msdn.microsoft.com/ja-jp/library/vstudio/z3bxds0s%28v=vs.100%29.aspx

こちらの環境では、上記設定によりリモートサーバー上で
デバッグできました。
(SQLServer認証&ワークグループ環境)

一度、お試しください。
ありがとうございます!

>接続するWindowsアカウントの両方に
sysadminの権限が必要

ここでしたね。
ドメインユーザをSQLサーバ側のログインに登録し、それにsysadminの権限を与え、かつサーバ接続時の認証に”Windows認証”を選択してみたところ、無事リモートでのデバッグが出来ました!

良い情報を流して頂きありがとです。
  • PX
  • 2013/06/11 9:39 AM
PXさま
無事成功したとのこと、よかったです。
コメントする(お気軽にどうぞ)









この記事のトラックバックURL
トラックバック
カテゴリー
プロフィール
links
recent comment
  • 【Access】コンボボックス対応版。超簡単な帳票フォームでの矢印上下キー行移動。
    山田 裕樹 (04/28)
  • 【Access】vbaでhmacが正しく計算できた!!
    まさ (06/01)
  • 【Access】AccessReportMailメール送信時のポートを25から587へ
    わら (05/31)
  • 【SQLServer】超シンプル!再帰CTE(共通テーブル式)で連続データを作成する。
    sazi (09/08)
  • 【あまっちゃお】Amazon商品検索「あまっちゃお」プロジェクト始動。Ver00-06-00 β
    カメちゃん (07/31)
  • 【Access】あれ?DoCmd.RunCommand acCmdSaveRecordの内部仕様が変わった?
    花姉 (03/17)
  • 【Access】実行中のmdb(自分自身)をバックアップコピーする方法。
    亀 (02/06)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    管理人 (01/31)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    あ (01/31)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    K (11/13)
recent trackback
  • 【Access】2003安全でない式がブロックされていませんとセキュリティーレベル。
    awgs Foundry (10/29)
  • 【VAIOtypeP】液晶保護シートは、新車のカバーではない。レイアウト社液晶/天板保護フィルムセットRT-VP1FS1
    XMLがキライ。 (04/09)
  • Vistaから、LinkStation(NAS)にアクセスできません。
    そのほかいろいろ (09/06)
sponsored links