今日は趣向を変えて DBCC PAGE でストアドプロシージャを見てみたいと思います。
# あまり趣向変わってないのではという突っ込みは全力でスルーします。
■DBCC PAGE でストアドプロシージャを表示
ストアドプロシージャは sp_helptext で中身を表示することが可能です。
sp_helptext の内容を sp_helptext で表示するクエリだと以下の形式になります。
sp_helptext ‘sp_helptext’ |
これと似たようなことを DBCC PAGE で実行してみようというのが本日のお題です。
ストアドプロシージャも SQL Server のデータですので、データページ / インデックスページ等と同じようにページに格納がされます。
テストで以下のクエリを実行してストアドを作ってみます。
CREATE PROCEDURE usp_pagetest |
ストアドを作成するためのクエリを実行しているのですが、[LOP_INSERT_ROWS] という操作がいくつか現れています。
INSERT_ROWS と出ているようにストアドもページに格納されます。
今回であれば、[0001:00000080] というページに格納されています。
ということで DBCC PAGE を使ってみてみたいと思います。
トランザクションログの [Page ID] は 16 進数で表示されていますので、ページ番号は 10 進数に直す必要があります。
DBCC TRACEON(3604) |
先ほど作成したストアドと同じものがページに格納されているのが確認できますね。
ちなみにほかに [LOP_INSERT_ROWS] となっていたものですが以下のテーブルになります。
Page ID | Object Name |
0001:000000a1 | sysschobjs |
0001:00000108 | sysschobjs |
0001:00000156 | sysschobjs |
0001:000000b6 | sysschobjs |
すべて、[sysschobjs] になるようですね。
さらに踏み込んでみるためにこのテーブルのデータを確認してみたいと思います。
[sysschobjs] ですが、通常の接続では内容を確認することができません。
このテーブルを検索するためには DAC で接続をする必要があります。
ということで、サーバー名に [ADMIN:] をつけて接続をして検索します。
SELECT |
161 ページ以外がデータページではないようで、取得できたのは以下の行だけでした。
# 他のページは [INDEX_RECORD] が格納されているページのようです。
ログからページを割り出しているのであまりスマートではないのですが、DBCC PAGE でもストアドを見ることができることを実験してみました。