一定期間更新がないため広告を表示しています
スポンサーサイト
- 2022/06/17
- -
- -
- -
- 記事URL https://plus-sys.jugem.jp/?eid=
Twitterはじめました。プラプラ | Twitter
【SQLServer】2008以降のManagement Stadioではスクリプトのデバッグ実行が可能!
- 2013/05/26
- SQLServer
- comments(4)
- trackbacks(0)
- 記事URL https://plus-sys.jugem.jp/?eid=393
SQLServerでT-SQLを使用した開発時、何が困るかっていうと、
デバッグ環境が貧弱であることでしょうか。
VBAのいたれりつくせりのデバッグ環境になれていると、
ほんとそう思います。
特にステップ実行できないのが歯がゆいなあと思っていました。
たしかに、SQLServer2005ではステップ実行が可能ではありました。
しかしながら、別途VisualStudioの有料版が必要でしたので
使えなかったのです。(悲)
しょうがないので、
ストアド実行時に処理途中の変数の値を確認したい場合、
デバッグ用のコードを入れて再コンパイルした上で実行、
その値を確認していました。
そして、SQLServer2008になってもSQLServer2005の時と同じように
がりがり原始的なデバッグをしていたのですが、
実はSQLServer2008から、
標準のManagement Studioの機能でデバッグできるように
なっていたようです。
この情報を知ったのは以下のブログ。すばらしい!
ぶりりあんとろーど(仮) | [MSSQL]ストアドのデバッグ
これは知りませんでした。
で、実際試してみると、前からやりたかった、
ステップ実行やリアルタイムでの変数の値の確認、
ついでに動的SQLを実行した場合、別タブで動的SQLが表示されるなど
必要十分な機能があるではないですか!
これは使わない手はありません。
SQLServerManagementStudio(マネジメントスタジオ)でデバッグを行う場合、
データベースサーバー側とクライアント側、双方の
ファイアウォールの設定が必要です。
必要なファイアウォール設定は以下のとおり。
(サーバー側)
・TCP ポート 135 を例外の一覧に追加
・プログラム sqlservr.exe を例外の一覧に追加
注:ドメインのポリシーにより IPSec 経由でネットワーク通信を行う必要がある場合は、UDP ポート 4500 と UDP ポート 500 も例外の一覧に追加する必要があります。
(クライアント側)
・TCP ポート 135 を例外の一覧に追加
・プログラム ssms.exe (SQL Server Management Studio) を例外の一覧に追加
ちなみにファイアウォールを開いていない場合、
Windows7のローカル環境にいれたDBで試した際には、
デバッグ実行時、ファイアウォールを開くかどうかの確認メッセージが
表示されました。ただし、管理者としてManagement Studioを
実行していない場合、エラーが発生し、ファイアウォールを開くことが
できませんでした。(管理者として実行するとOKでした。)
さらにファイアウォール以外の条件として、
デバッグの実行には sysadmin 権限が必要となります。
(2013/06/11 追記) ----------------------
SQLServer認証でリモートサーバー上でデバッグを行うには、
SQLServerアカウントに加えて、
クライアントのWindowsログインユーザーが、
sysadminとして登録されている必要があります。
(参考)
リモート デバッグのアクセス許可
たぶん、@ITの以下の質問もここでひっかかっていると思います。
SQL Server2008のリモートデバッグ
(2013/06/11 追記おわり) ----------------------
また、デバッグは、本番環境ではなくテスト環境で
実施することが推奨されています。
(理由)
以上、T-SQLデバッグ環境の準備を簡単にまとめましたが、
詳細はmsdnで確認してください。
Transact-SQL デバッガの構成および起動
デバッグ実行ではステップイン、ステップオーバー、
さらにブレークポイントを設定することにより任意のステップで
実行を一時停止することが可能です。
さて、既存のストアドプロシージャをデバッグする場合、
どのように実行させればよいのでしょうか。
このような場合、クエリウインドでストアド呼び出しを記述し、
ここからデバッグを実行します。
ストアドのパラメータが多い場合は手書きするのは
少し面倒なので、Management Studioで自動作成すると便利です。
作成方法は、対象のストアドプロシージャを選択し、右クリック。
リストの「ストアドプロシージャをスクリプト化(S)」
→「EXECUTE(E)」→「新しいクエリエディターウインドウ」
で自動作成できます。
作成したストアド呼び出しのウインドからデバッグを実行。
実行は、ショートカットでは、F11で可能です。
では、実際にためしてみます。
サンプルのストアドプロシージャはこんな感じ。
SQLを動的に作成する必要性は全くないのですが、サンプルなので。
(動的なSQLの場合のほうがデバッグ環境の必要性がより
高いと思います。構文エラーがあってもコンパイルは
通ってしまいますので。)
内容は、パラメータを受け取り、受け取ったパラメータを
テーブルへ書き込むという処理です。
次にこのストアドを呼び出す記述を自動作成します。
対象ストアドを選択し、「ストアドプロシージャをスクリプト化(S)」
→「EXECUTE(E)」→「新しいクエリエディターウインドウ」
こんな感じでストアド呼び出し部が作成されます。
パラメータの値は手書き。
そしてここでデバッグ実行。
F11キー(ステップイン)もしくは、Alt+F5(デバッグ開始)。
ちなみにVBAとはショートカットキーが異なります。
開始後はF11キーでステップをすすめていきます。
ステップ毎ですすめるのではなく、ブレークポイントを設定し、
その部分まで処理を一気にすすめるといったことも可能です。
下部ウインドでは現在変数に設定されている値が
リアルタイムで確認できます。
動的SQL実行部分では別ウインドが立ち上がります。
*EXEC 内で変数を連結していないと立ち上がらないようです。
サンプル内では空文字を連結しています。
いやー、これは便利ですね。
動的SQLや、カーソルをぐるぐるまわすようなストアドをデバッグする
時に重宝するかと思います。
(まあ動的SQLやカーソルというのはT-SQLであまり推奨されたものでは
ありませんが、使わざるをえない場合もありますよね。)
以下、若干気になる点もあります。
(もしかして、SQLServer2012のSSMSでは改善されているかも?未検証)
・ステップを戻ることができない。
・ステップを飛ばすことはできない。(ブレークポイントまで飛ばすではなく)
・実行途中で変数の値を書き換えることができない。
・実行途中でコードを書き換えることができない。(さすがに無理でしょうね。)
・ステップインでデバッグが開始されてしまうので、
ステップイン連打で確認していると、最終行まで実行された後、
再度実行してしまう。
ストアドデバッグの方法、知っておくと便利かと思います。
以上、SQLSever2008以降のSSMSは、優秀(?とまではいいすぎか)な
T-SQLデバッガ機能が標準搭載されておりましたというお話でした。
T-SQLのバイブル。バイブルなので高いです。6090円
それだけの価値があるかないかはあなた次第。
(このシリーズ、2008以降はでていません。残念。)
>>SQL Server 2005 ストアドプロシージャプログラミング (SQL Server Books)
デバッグ環境が貧弱であることでしょうか。
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の場合のほうがデバッグ環境の必要性がより
高いと思います。構文エラーがあってもコンパイルは
通ってしまいますので。)
内容は、パラメータを受け取り、受け取ったパラメータを
テーブルへ書き込むという処理です。
次にこのストアドを呼び出す記述を自動作成します。
対象ストアドを選択し、「ストアドプロシージャをスクリプト化(S)」
→「EXECUTE(E)」→「新しいクエリエディターウインドウ」
こんな感じでストアド呼び出し部が作成されます。
パラメータの値は手書き。
そしてここでデバッグ実行。
F11キー(ステップイン)もしくは、Alt+F5(デバッグ開始)。
ちなみにVBAとはショートカットキーが異なります。
開始後はF11キーでステップをすすめていきます。
ステップ毎ですすめるのではなく、ブレークポイントを設定し、
その部分まで処理を一気にすすめるといったことも可能です。
下部ウインドでは現在変数に設定されている値が
リアルタイムで確認できます。
動的SQL実行部分では別ウインドが立ち上がります。
*EXEC 内で変数を連結していないと立ち上がらないようです。
サンプル内では空文字を連結しています。
いやー、これは便利ですね。
動的SQLや、カーソルをぐるぐるまわすようなストアドをデバッグする
時に重宝するかと思います。
(まあ動的SQLやカーソルというのはT-SQLであまり推奨されたものでは
ありませんが、使わざるをえない場合もありますよね。)
以下、若干気になる点もあります。
(もしかして、SQLServer2012のSSMSでは改善されているかも?未検証)
・ステップを戻ることができない。
・ステップを飛ばすことはできない。(ブレークポイントまで飛ばすではなく)
・実行途中で変数の値を書き換えることができない。
・実行途中でコードを書き換えることができない。(さすがに無理でしょうね。)
・ステップインでデバッグが開始されてしまうので、
ステップイン連打で確認していると、最終行まで実行された後、
再度実行してしまう。
ストアドデバッグの方法、知っておくと便利かと思います。
以上、SQLSever2008以降のSSMSは、優秀(?とまではいいすぎか)な
T-SQLデバッガ機能が標準搭載されておりましたというお話でした。
T-SQLのバイブル。バイブルなので高いです。6090円
それだけの価値があるかないかはあなた次第。
(このシリーズ、2008以降はでていません。残念。)
>>SQL Server 2005 ストアドプロシージャプログラミング (SQL Server Books)
Twitterはじめました。プラプラ | Twitter
スポンサーサイト
- 2022/06/17
- -
- -
- -
- 記事URL https://plus-sys.jugem.jp/?eid=
Twitterはじめました。プラプラ | Twitter
<< 【デジモノ】XperiaAって「エクスペリアエース」と読めました?ケースや保護シートがもりもり発売開始。
【デジモノ】狙うならお得な在庫分。円安の影響でiPodTouch,iPad,iPadminiの価格が上がるようです。 >>
【デジモノ】狙うならお得な在庫分。円安の影響で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認証&ワークグループ環境)
一度、お試しください。
-
- プラプラ
- 2013/06/11 8:18 AM
- ありがとうございます!
>接続するWindowsアカウントの両方に
sysadminの権限が必要
ここでしたね。
ドメインユーザをSQLサーバ側のログインに登録し、それにsysadminの権限を与え、かつサーバ接続時の認証に”Windows認証”を選択してみたところ、無事リモートでのデバッグが出来ました!
良い情報を流して頂きありがとです。 -
- PX
- 2013/06/11 9:39 AM
- PXさま
無事成功したとのこと、よかったです。
-
- プラプラ
- 2013/06/11 9:44 AM
- コメントする(お気軽にどうぞ)
- この記事のトラックバックURL
- トラックバック
- カテゴリー
-
- Vista (15)
- AccessTips (74)
- 雑記 (68)
- セキュリティー (23)
- おもしろいサービス (5)
- tool (12)
- あまっちゃお (4)
- コンピュータ (66)
- CakePHP (25)
- VAIOTypeP[バイオタイプピー] (12)
- SQLServer (25)
- iPad (36)
- Apple Watch (5)
- AWS認定 (1)
- Azure (4)
- e-mobile (8)
- iOSアプリ (18)
- iPhone (2)
- iPhoneX (2)
- ipod touch (3)
- kindle (18)
- Monaca (1)
- Nexus7 (11)
- VAIO PRO (1)
- VAIO X[バイオ エックス] (1)
- VAIO Z (5)
- Windows10 (1)
- Windows8 (7)
- Windows9 (1)
- XPERIA Z1 (1)
- XperiaZ (6)
- 【全記事一覧】 (1)
- おすすめ本まとめ (2)
- クラウド (1)
- セール (3)
- デジモノ (24)
- 本(BOOK) (9)
- 腕時計 (1)
- プロフィール
- 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)
- 【Access】コンボボックス対応版。超簡単な帳票フォームでの矢印上下キー行移動。
- recent trackback
-
- 【Access】2003安全でない式がブロックされていませんとセキュリティーレベル。
⇒ awgs Foundry (10/29) - 【VAIOtypeP】液晶保護シートは、新車のカバーではない。レイアウト社液晶/天板保護フィルムセットRT-VP1FS1
⇒ XMLがキライ。 (04/09) - Vistaから、LinkStation(NAS)にアクセスできません。
⇒ そのほかいろいろ (09/06)
- 【Access】2003安全でない式がブロックされていませんとセキュリティーレベル。
- sponsored links