none
Copiar una base de datos remota

    Question

  • Tengo un problemilla un tanto complicado,

    Necesito tener todos los datos de un servidor remoto de SQL Server 2008.

    Estas son las características:

    La base de datos pesa unos 4,0 GB. (El archivo de datos .mdf)

    No tengo acceso al sistema de archivos (Windows) para copiar un backup, tampoco puedo decirle a nadie del lugar donde está el servidor remoto que me de una copia de un archivo de respaldo .bak o un archivo de datos.mdf. (Las razones no vienen a caso)

    El servidor está remoto, en otro país, tengo acceso a la base de datos de sólo lectura (y standby), tampoco puedo hacer backups, la opción está bloqueada.

    He tratado de usar la opción de importar/exportar o una tarea reporting services, pero no logro traer la bd. El ancho de banda es poco para el tamaño de la BD y el tiempo que tengo (Para completar la BD remoto se restaura casa hora con una especie de mirror y tumba las conexiones que están)

    He tratado de hacer una copia dentro del mismo servidor remoto (Para evitar lo del restore) pero me da un erro que no logro descifrar.

    No se qué opciones tengo. He pensado en tratar de copiar el archivo de datos desde transact en la misma ruta donde reside el original y tratar de zippearlo y enviarlo vía ftp, todo esto desde transact y sin saber qué tiene el SO.

    O estoy liquidado y no tengo opción?

     

     

    Thursday, August 26, 2010 2:54 PM

Answers

  • Hola.

    Veo que tienes que copiar desde el servidor de destino de un log shipping (ya sea un log shipping como tal o uno montado artesanalmente). Con lo que nos comentas, la opción de traerte la información en una hora de tiempo (con un ancho de banda insuficiente) es inviable. Sólo te queda obtener una copia de la base de datos en el servidor de origen y luego operar con ella, ya con tiempo de maniobra. 

    Se me ocurre una idea que a lo mejor funciona. Por un lado, prepara un script de la base de datos con todas sus tablas y resto de objetos que precises. Es la parte fácil. Luego, para traerte los datos, antes los copias en tempdb, realizando un "select * into tempdb..Tabla1 from Tabla1", para cada tabla. No es muy buena práctica que digamos, pero te tienen algo atado, y además sin apenas margen de tiempo. Así, preparas un script que haga el select..into de todas las tablas, poniendo un "print" entre sentencia y sentencia:

    select 'select * into tempdb..' + TABLE_NAME + ' from ' + TABLE_NAME + ';
    print ''Se copió la tabla ' + TABLE_NAME + '''' 
    from INFORMATION_SCHEMA.TABLES order by TABLE_NAME
    

    De esta forma, tienes un script que, al ejecutarlo, te va diciendo hasta qué tabla se copió, por si entre dos restores no logras copiarlo todo.

    Una vez que tienes los datos en tempdb, y mientras nadie reinicie el servidor de bases de datos, tendrás los datos ahí para traértelos mediante una importación y exportación de datos, un paquete de integration services, etc, sin tener ya la limitación de tiempo entre restaurados del log.

    Inténtalo, si no te funciona, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    Thursday, August 26, 2010 3:22 PM
    Moderator

All replies

  • He tratado de hacer una copia dentro del mismo servidor remoto (Para evitar lo del restore) pero me da un erro que no logro descifrar.

    ¿Estás usando el asistente para copiar bases de datos de SQL Server 2008? Si es así, cuando falla es normalmente por temas de permisos. La copia la realiza el Agente, por lo que la cuenta de este servicio es la que realiza todos los pasos si no modificas la tarea y le pones un Proxy.

    - Verifica que la cuenta está asociada a un Login con permisos para leer la base de datos original y para crear la de destino. (Y para hacer el detach y el attach si este es el método que seleccionas en el asistente -- es el más rápido). Puedes asignarle provisionalmente el rol de sysadmin, y luego quitárselo cuando termine la copia.

    - Verifica también que la cuenta del servicio tiene permisos para leer el directorio NTFS donde está el .mdf original, y permisos para escribir en el directorio donde grabas el .mdf de destino. Normalmente, el directorio "Data" que se usa por defecto está restringido y NO tiene permisos.

     

    Thursday, August 26, 2010 3:16 PM
  • Hola.

    Veo que tienes que copiar desde el servidor de destino de un log shipping (ya sea un log shipping como tal o uno montado artesanalmente). Con lo que nos comentas, la opción de traerte la información en una hora de tiempo (con un ancho de banda insuficiente) es inviable. Sólo te queda obtener una copia de la base de datos en el servidor de origen y luego operar con ella, ya con tiempo de maniobra. 

    Se me ocurre una idea que a lo mejor funciona. Por un lado, prepara un script de la base de datos con todas sus tablas y resto de objetos que precises. Es la parte fácil. Luego, para traerte los datos, antes los copias en tempdb, realizando un "select * into tempdb..Tabla1 from Tabla1", para cada tabla. No es muy buena práctica que digamos, pero te tienen algo atado, y además sin apenas margen de tiempo. Así, preparas un script que haga el select..into de todas las tablas, poniendo un "print" entre sentencia y sentencia:

    select 'select * into tempdb..' + TABLE_NAME + ' from ' + TABLE_NAME + ';
    print ''Se copió la tabla ' + TABLE_NAME + '''' 
    from INFORMATION_SCHEMA.TABLES order by TABLE_NAME
    

    De esta forma, tienes un script que, al ejecutarlo, te va diciendo hasta qué tabla se copió, por si entre dos restores no logras copiarlo todo.

    Una vez que tienes los datos en tempdb, y mientras nadie reinicie el servidor de bases de datos, tendrás los datos ahí para traértelos mediante una importación y exportación de datos, un paquete de integration services, etc, sin tener ya la limitación de tiempo entre restaurados del log.

    Inténtalo, si no te funciona, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    Thursday, August 26, 2010 3:22 PM
    Moderator