Generar Script automático para hacer Attach de las bases en un servidor

by Maxi Accotto 8. julio 2011 02:09

 

Cuando necesitamos por ejemplo hacer una migración , ya sea a un nuevo equipamiento y/o a una nueva versión, una de las técnicas para pasar las bases de datos de un lugar al otro es el método Attach / Detach.

Ahora bien, si tenemos pocas bases de datos no hay ningún problema porque hacer el Attach no llevaría mucho tiempo.

Ahora que sucede si tenemos muchas bases de datos? es una tarea bastante engorrosa hacer una por una, yo utilizo para esto un script que generar el código de attach con las ubicaciones de los Data y Log de cada base de datos.

Este script es el que utilizo al hacer este tipo de trabajos y la verdad que no solo me hace ahorrar mucho tiempo sino también cometer menos errores cuando hay una cantidad de bases de datos grande en nuestra instancia.

Aquí les dejo el código y el adjunto del script, espero les sea útil como me fue a mi Sonrisa

 

DECLARE @dbid int
 DECLARE @name varchar(50)
 DECLARE @file varchar(150)
 DECLARE @IDFILE INT
 DECLARE @CMD VARCHAR(4000)
 SET @CMD = ''
 SET @IDFILE = 1

DECLARE cAttach CURSOR
 READ_ONLY
 FOR SELECT dbid, name FROM 
 sysdatabases 
 where name not in 
 ('master','tempdb','model','msdb','northwind', 'pubs','distribution' )
 
OPEN cAttach
 
FETCH NEXT FROM cAttach INTO @dbid, @name
 WHILE (@@fetch_status <> -1)
 BEGIN
 IF (@@fetch_status <> -2)
 BEGIN
 
 -- buscamos los archivos
 DECLARE archivos CURSOR
 READ_ONLY FOR
 select [filename] FROM  sysaltfiles 
                   where dbid = @dbid
                   order by fileid 
 
 OPEN archivos
 FETCH NEXT FROM archivos INTO @file
 WHILE (@@fetch_status <> -1)
 begin
 
 BEGIN
   
   SET @CMD = @CMD +  ',@FILENAME' +CONVERT(varchar(10),@IDFILE) + '=' 
   + '''' + rtrim(@file) + '''' + CHAR(13)
   set @IDFILE = @IDFILE + 1
 end
 FETCH NEXT FROM archivos INTO @file
end
 CLOSE archivos
 DEALLOCATE archivos
 
print '';
 print 'EXEC sp_attach_db @dbname = ''' + (@name) + '''' ;

 print @cmd + ';'
 
 SET @CMD = ''
 SET @IDFILE = 1

END
 FETCH NEXT FROM cAttach INTO @dbid, @name
 END
 
CLOSE cAttach
 DEALLOCATE cAttach
 GO

Tags:

How To | Administracion

Agregar Comentario




biuquote
  • Comentario
  • Vista Previa
Loading


Maximiliano Damian Accotto