2009-05-11 15 views

Respuesta

10
ALTER DATABASE database-name SET OFFLINE 

Si se ejecuta el comando ALTER DATABASE mientras que los usuarios o procesos están conectados, pero que no desean que el comando sea bloqueado, puede ejecutar la instrucción con la opción NO_WAIT. Esto hace que el comando falle con un error.

ALTER DATABASE database-name SET OFFLINE WITH NO_WAIT 

correspondientes en línea:

ALTER DATABASE database-name SET ONLINE 
2

Aquí hay una nota que sólo podría ser muy útil para usted: Casi siempre es posible ver lo que está haciendo la GUI TSQLwise detrás de las escenas.

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

+1

Nod Peter - yo uso ese botón (para agarrar guiones) todo el tiempo ... un buen ejemplo de ello es cuando desea cambiar la estructura de la tabla/esquema, y ​​se tarda más de 30 segundos (por defecto tiempo de espera antes de que se produzca un error de tiempo de espera) ... así que necesito tomar el script de cambio y ejecutarlo manualmente. –

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; 

Reiniciar el servidor antes de ejecutar el procedimiento. Cerrará las conexiones existentes a las bases de datos.

1

Sé que esta es una publicación anterior pero, en caso de que alguien se encuentre con esta solución, preferiría un método sin cursor que no se ejecuta pero devuelve los scripts. Acabo de tomar la solución anterior y la convertí en una selección que se basa en los resultados.

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 
Cuestiones relacionadas