Slave側のDBをログシッピングのStandbyモードで動かしている場合、
SSMSのユーザーセッションが残っているとリストアが失敗する事がある。
会社のとあるシステムでは、15分毎にLSCOPYを行い、深夜に1回、LSRESTOREジョブが動いているが、その良く失敗する。
酷い時は週5回は失敗して、「データが更新されてない!」と利用部門からクレームが来て手動でジョブを実行していた。
接続を切って帰ってくれればいいのだが、何度言ってもダメなので、
LSRESTOREジョブにステップを追加して、当該DBへのアクセスを全てkillする事にした。
その時に動いている処理があるのかもしれないが、ムシャクシャして書いた。
[code]
SET NOCOUNT ON
CREATE TABLE #sp_who (
spid smallint
,ecid smallint
,status nchar(30)
,loginame nchar(128)
,hostname nchar(128)
,blk char(5)
,dbname nchar(128)
,cmd nchar(16)
,request_id int)
INSERT INTO #sp_who EXEC sp_who
DECLARE CUR_SPID CURSOR FOR select spid from #sp_who where dbname = ‘DB名’
DECLARE @SPID nchar(5)
OPEN CUR_SPID
FETCH NEXT FROM CUR_SPID INTO @SPID
WHILE (@@FETCH_STATUS = 0)
BEGIN
DECLARE @command nchar(128)
SET @command = N’kill ‘ + @SPID
EXEC sp_executesql @command
FETCH NEXT FROM CUR_SPID INTO @SPID
END
CLOSE CUR_SPID
DEALLOCATE CUR_SPID
DROP TABLE #sp_who
[/code]
これで、翌朝にドタバタ&イライラしなくても済みそう。