2009-05-11 8 views

答えて

10
ALTER DATABASE database-name SET OFFLINE 

あなたは、ユーザーまたはプロセスが接続されている一方でALTER DATABASEコマンドを実行すると、しかし、あなたはNO_WAITオプションでステートメントを実行することができ、コマンドがブロックされることを望むものではありません。これにより、コマンドはエラーで失敗します。

ALTER DATABASE database-name SET OFFLINE WITH NO_WAIT 

対応するオンライン:

ALTER DATABASE database-name SET ONLINE 
2

はここだけ、あなたに非常に便利かもしれませんノートです: それはGUIが舞台裏TSQLwiseをやっているかを見るために、ほとんど常に可能です。

C:http://www.mssqltips.com/tip.asp?tip=1505

+1

Nod Peter - 私はそのボタンを(スクリプトをつかむために)常時使用しています。その良い例は、テーブル構造/スキーマを変更したいときです.30秒以上かかりますタイムアウトエラーが発生する前に待機時間)..私は変更スクリプトをつかんで手動でそれを実行する必要があります。 –

2
-- Take all user databases offline 
CREATE PROCEDURE SP_TakeOfflineAllDatabase AS 
BEGIN 
    DECLARE @db sysname, @q varchar(max); 
    DECLARE cur_db CURSOR FOR 
     SELECT name FROM sys.databases WHERE owner_sid<>0x01; 
    OPEN cur_db; 
    WHILE 1=1 
    BEGIN 
     FETCH NEXT FROM cur_db INTO @db; 
     IF @@FETCH_STATUS <> 0 
      BREAK; 
     SET @q = N'ALTER DATABASE [' + @db + N'] SET OFFLINE WITH NO_WAIT'; 
     EXEC(@q); 
    END; 
    CLOSE cur_db; 
    DEALLOCATE cur_db; 
END; 

再起動の手順を実行する前にサーバー。これは、データベースへの既存の接続を閉じます。

1

私はこれが古い投稿だと知っていますが、誰かがこの解決策に遭遇し、実行しないでスクリプトを返すノンカーソルメソッドを好むでしょう。 私は以前のソリューションを採用し、結果に基づいて構築されたselectに変換しました。

DECLARE @SQL VARCHAR(8000) 

SELECT @SQL=COALESCE(@SQL,'')+'ALTER DATABASE '+name+ N' SET OFFLINE WITH NO_WAIT; 
    ' 
FROM sys.databases 
WHERE owner_sid<>0x01 
PRINT @SQL 
関連する問題