2009-05-11 30 views
7

MS Sql 2008'i çevrimdışı veya çevrimiçi almak istersek, GUI -> DB-Tasks-Take Online'ı veya Çevrimdışı Al'ı kullanmam gerekir.SQL Script?

Bu, bazı sql betikleri ile yapılabilir mi?

cevap

10
ALTER DATABASE database-name SET OFFLINE 

Kullanıcıların veya süreçleri bağlanır iken ALTER DATABASE komutunu çalıştırırsanız, ama sen NO_WAIT seçeneğiyle deyimi yürütebileceği, komut engellenecek istemiyoruz. Bu, komutun bir hatayla başarısız olmasına neden olur.

ALTER DATABASE database-name SET OFFLINE WITH NO_WAIT 

Sorumlu çevrimiçi:

ALTER DATABASE database-name SET ONLINE 
2

Burada sadece sizin için çok yararlı olabilecek bir not var: Bu GUI perde arkasında TSQLwise ne yaptığını görmek için hemen hemen her zaman mümkündür.

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

+1

Nod Peter - ı her zaman (komut dosyalarını kapmak için) ... Bunun iyi bir örnektir i tablo yapısı/şema değiştirmek istediğinizde, şu tuşu kullanarak ve (varsayılan fazla 30 saniye sürer zaman aşımı hatası oluşmadan önce bekleme süresi). Bu yüzden değişim betiğini almam ve el ile çalıştırmam gerekiyor. –

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; 

başlatma sunucusu önce yordamı çalıştırılır. Veritabanlarına var olan bağlantıları kapatacaktır.

1

Bunun eski bir yazı olduğunu biliyorum, ancak birisinin bu çözümle karşılaşması durumunda ve çalıştırılmayan ancak komut dosyalarını döndüren bir imleç yöntemini tercih etmemesi. Daha önceki çözümü aldım ve sonuçları temel alan bir seçime dönüştürdüm.

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