全てのDBをFailoverするT-SQL

SQL Server 2008 上で Mirroring されている複数の DB を一度に Failover する T-SQL です。

PRINCIPAL になっているサーバー上で実行すると全ての DB が Mirror になります。

DECLARE @DBNAME nvarchar(256)
DECLARE @SQLstring nvarchar(1256)

DECLARE Mirrord_Database CURSOR FOR
SELECT db_name(database_id) FROM sys.database_mirroring WHERE mirroring_role_desc = 'PRINCIPAL';
OPEN Mirrord_Database;
FETCH NEXT FROM Mirrord_Database INTO @DBNAME;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLstring = 'ALTER DATABASE ' + @DBNAME + ' SET PARTNER FAILOVER'
exec sp_executesql @SQLstring
FETCH NEXT FROM Mirrord_Database INTO @DBNAME;
END;
CLOSE Mirrord_Database;
DEALLOCATE Mirrord_Database;
GO

Mirroringされている複数のDBがある時には便利じゃないかと思います。
SQLジョブに登録しておくと便利かも。

2008上で作ったので、他のバージョンで動くのかは不明ですが、2005くらいなら動くかな?
分かりません。。。

もっとスマートなやり方があるかもですが、久しぶりなので勘弁してください。
変数定義の部分とかは完全にやっつけです。。。

何年も使ってないと T-SQL なんて完全に忘れますね。
疲れました。