TOP
PROFILE
MUSIC TUNE
BBS
LINK

2006年10月26日

SQLCLRの不思議

現在ITフェーズ用にDB環境を自動で構築するスクリプトを組んでいるのだが、CLRストアドプロシージャ用のアセンブリをリモートの端末へ登録するスクリプトではまった・・というのもCreate AssemblyのFROM句の後に物理パス(またはUNCパス)を記述してもアクセス拒否になって登録できないのである。
もちろんユーザはAdmin権限のWIndows認証だし、最後はSQLServerサービスにも同じユーザを設定したがNG・・しょうがないのでメンバーにGoogleで調べてもらってたら、同様の問題が2件英語で見つかった(どちらも未解決)。
その後、VS2005がリモートに配置出来ているのだから、Profilerで追跡してみるとなんかFROM句にバス名ではなくてバイナリ配列が入っているではないか・・なんじゃこりゃ?ってことで調べてみると、CLRプロシージャ用のアセンブリのバイナリ配列を設定すればリモートに登録できることがわかった。

ではアセンブリからどうやってこの配列を取得するのかというと、一度ローカル端末に登録を行い、それからスクリプトの生成を行えば良いということが分かったのである。
(もちろんVS2005の配置処理をProfilerでキャッチしても良い)
これについては以下にも記述がある。
CLR データベースオブジェク
トの配置

最初は権限周りだと思い込み、あらゆる手を尽くしたが結局バイナリ配列を設定せよとはなんちゅうこったい・・まぁほかにもいったんXCOPYでリモート端末の共有フォルダ内にアセンブリを置いて、そこへのパスをFROM句に記述してもうまくいったが、これが常に許されるかどうかは運用次第なのでなんともね。

ちなみにどうも信用が置けなかったSBであるが、QueueUserWorkItemの負荷テストも兼ねて、試しに1回の処理で50個のワーカースレッドを起こし、各スレッドからキューを投げてやる処理を3000回繰り返してやってみた。
キューを送信するストアドはWAIT FORで2秒待機させているので、結構スレッドキュー、SBキューともにたまっている(最終的には15万件)と思うが、どちらも問題なく機能していた(^^)
なんかいろいろとやってる内にSBの利用用途やら潜在(顕在?)能力やらが少しずつ見えてきたような気がするなぁ。

Posted by GAMMARAY at 2006年10月26日 01:26 | TrackBack
Comments
Post a comment









Remember personal info?