R
rabo
Guest
Al loro con la jugada mas cerda que hecho en mi vida con SQL server , ha sido hoy hace escasos minutos
Primero meto esto en el analizador de consultas para la db me devuelva lo que hay que ejecutar en un bat
DECLARE @BACKUPDIR varchar(100)
SET @BACKUPDIR = 'c:\copia\'
SELECT
'osql -E -d master -Q "BACKUP DATABASE '
+ QUOTENAME(CATALOG_NAME)
+ ' TO DISK = N'''+@BACKUPDIR+''
+ CATALOG_NAME
+ '.bak'' WITH INIT, NOUNLOAD, NAME = N'''
+ CATALOG_NAME
+ 'backup'', NOSKIP , STATS = 10, NOFORMAT"'
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE CATALOG_NAME NOT IN ('master','tempdb','msdb','model','Northwind','pubs')
Esto devuelve:
osql -E -d master -Q "BACKUP DATABASE [ABANICOSRASER_COM] TO DISK = N'c:\copia\ABANICOSRASER_COM.bak' WITH INIT, NOUNLOAD, NAME = N'ABANICOSRASER_COMbackup', NOSKIP , STATS = 10, NOFORMAT"
De cada una de las BDs
Postiormente se hace un copy paste de todas las filas devueltas en un .bat y se ejecuta, con lo que se obtiene .bak de todas las bbdds en el c:\copias.
Como se restaura esto ... pues puesto a hacer el cerdo con otro bat , que pego acontinuacion.
@ECHO OFF
SET DBDIRECTORY=C:\Program Files\Microsoft SQL Server\MSSQL\Data
SET BACKUPDIR=C:\copia\
PUSHD %BACKUPDIR%
FOR %%A in (*.bak) do CALL :Sub %%A
POPD
TITLE Restaurando Bases de datos
ECHO Se supone que esta restaurado
PAUSE
GOTO:EOF
:Sub
set DBNAME=%~n1
TITLE Restaurando %DBNAME%
ECHO Restaurando %DBNAME%
osql -E -d master -Q "alter database %DBNAME% set single_user with rollback immediate"
osql -E -d master -Q "restore database %DBNAME% from disk='%~dp0\%DBNAME%.bak' WITH MOVE '%DBNAME%_Data' TO '%DBDIRECTORY%\%DBNAME%_Data.MDF', MOVE '%DBNAME%_Log' TO '%DBDIRECTORY%\%DBNAME%_Log.LDF'"
::osql -E -d %DBNAME% -Q "sp_grantdbaccess '%COMPUTERNAME%\ASPNET'"
::osql -E -d %DBNAME% -Q "sp_addrolemember 'db_owner', '%COMPUTERNAME%\ASPNET'"
osql -E -d master -Q "alter database %DBNAME% set multi_user"
GOTO:EOF
Jajaja a ver quien tiene cojones a superar esta cerdada.
Primero meto esto en el analizador de consultas para la db me devuelva lo que hay que ejecutar en un bat
DECLARE @BACKUPDIR varchar(100)
SET @BACKUPDIR = 'c:\copia\'
SELECT
'osql -E -d master -Q "BACKUP DATABASE '
+ QUOTENAME(CATALOG_NAME)
+ ' TO DISK = N'''+@BACKUPDIR+''
+ CATALOG_NAME
+ '.bak'' WITH INIT, NOUNLOAD, NAME = N'''
+ CATALOG_NAME
+ 'backup'', NOSKIP , STATS = 10, NOFORMAT"'
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE CATALOG_NAME NOT IN ('master','tempdb','msdb','model','Northwind','pubs')
Esto devuelve:
osql -E -d master -Q "BACKUP DATABASE [ABANICOSRASER_COM] TO DISK = N'c:\copia\ABANICOSRASER_COM.bak' WITH INIT, NOUNLOAD, NAME = N'ABANICOSRASER_COMbackup', NOSKIP , STATS = 10, NOFORMAT"
De cada una de las BDs
Postiormente se hace un copy paste de todas las filas devueltas en un .bat y se ejecuta, con lo que se obtiene .bak de todas las bbdds en el c:\copias.
Como se restaura esto ... pues puesto a hacer el cerdo con otro bat , que pego acontinuacion.
@ECHO OFF
SET DBDIRECTORY=C:\Program Files\Microsoft SQL Server\MSSQL\Data
SET BACKUPDIR=C:\copia\
PUSHD %BACKUPDIR%
FOR %%A in (*.bak) do CALL :Sub %%A
POPD
TITLE Restaurando Bases de datos
ECHO Se supone que esta restaurado
PAUSE
GOTO:EOF
:Sub
set DBNAME=%~n1
TITLE Restaurando %DBNAME%
ECHO Restaurando %DBNAME%
osql -E -d master -Q "alter database %DBNAME% set single_user with rollback immediate"
osql -E -d master -Q "restore database %DBNAME% from disk='%~dp0\%DBNAME%.bak' WITH MOVE '%DBNAME%_Data' TO '%DBDIRECTORY%\%DBNAME%_Data.MDF', MOVE '%DBNAME%_Log' TO '%DBDIRECTORY%\%DBNAME%_Log.LDF'"
::osql -E -d %DBNAME% -Q "sp_grantdbaccess '%COMPUTERNAME%\ASPNET'"
::osql -E -d %DBNAME% -Q "sp_addrolemember 'db_owner', '%COMPUTERNAME%\ASPNET'"
osql -E -d master -Q "alter database %DBNAME% set multi_user"
GOTO:EOF
Jajaja a ver quien tiene cojones a superar esta cerdada.
