¿Cómo puedo hacer una copia de seguridad de una base de datos remota de SQL Server en una unidad local?

241

Necesito copiar una base de datos de un servidor remoto a uno local. Intenté usar SQL Server Management Studio, pero solo se realiza una copia de seguridad en una unidad en el servidor remoto.

Algunos puntos:

  • No tengo acceso al servidor remoto de manera que pueda copiar archivos;
  • No tengo acceso para configurar una ruta UNC a mi servidor;

¿Alguna idea de cómo puedo copiar esta base de datos? ¿Tendré que usar herramientas de terceros?

Fernando
fuente
1
Creo que si no tienes acceso a la estructura del directorio, tendrás el desafío de hacerlo.
JNK
3
¿Solo intenta copiar la base de datos en lugar de hacer una copia de seguridad específica? Si es así, puede usar el Asistente para copiar bases de datos o (en SQL Server 2008) usar la opción "Generar guiones" para guiar el esquema y los datos. Redgate SQL Compare y Data Compare también pueden ser útiles aquí.
Martin Smith
1
@ MartininSmith De acuerdo con su sugerencia, generé script usando la Generate and Publish Scriptsopción. Obtengo todas las tablas y el esquema, pero no obtuve ningún dato con tablas. Cómo puedo arreglar esto.
eres realmente amigo

Respuestas:

182

En Microsoft SQL Server Management Studio, puede hacer clic con el botón derecho en la base de datos que desea respaldar y hacer clic en Tareas -> Generar secuencias de comandos.

Esto abre un asistente donde puede configurar lo siguiente para realizar una copia de seguridad decente de su base de datos, incluso en un servidor remoto :

  • Seleccione la base de datos que desea respaldar y presione siguiente,
  • En las opciones que te presenta:
    1. En 2010: en las Opciones de tabla / vista, cambie 'Datos de script' e 'Índices de script' a Verdadero y presione siguiente,
    2. En 2012: en 'General', cambie 'Tipos de datos a script' de 'Solo esquema' a 'Esquema y datos'
    3. En 2014: la opción de guiar los datos ahora está "oculta" en el paso "Establecer opciones de guiones", debe hacer clic en "Avanzado" y establecer "Tipos de datos para guiar" en el valor "Esquema y datos"
  • En las siguientes cuatro ventanas, presione 'seleccionar todo' y luego, a continuación,
  • Elija guiar a una nueva ventana de consulta

Una vez que haya terminado, tendrá una secuencia de comandos de copia de seguridad lista frente a usted. Cree una nueva base de datos local (o remota) y cambie la primera instrucción 'USE' en el script para usar su nueva base de datos. Guarde el script en un lugar seguro y continúe y ejecútelo en su nueva base de datos vacía. Esto debería crear una base de datos local (casi) duplicada que luego puede respaldar como desee.

Si tiene acceso total a la base de datos remota, puede optar por marcar 'script de todos los objetos' en la primera ventana del asistente y luego cambiar la opción 'Base de datos de script' a True en la siguiente ventana. Sin embargo, tenga cuidado, deberá realizar una búsqueda completa y reemplazar el nombre de la base de datos en el script por una nueva base de datos que en este caso no tendrá que crear antes de ejecutar el script. Esto debería crear un duplicado más preciso, pero a veces no está disponible debido a restricciones de permisos.

Daniel Gill
fuente
99
En SQL Server Management Studio 2012 no existe una opción como 'Datos de secuencia de comandos', por lo que en las versiones más recientes haga lo siguiente para el paso 2: en 'General', cambie 'Tipos de datos a secuencia de comandos' de 'Solo esquema' a 'Esquema y datos ".
berezovskyi
1
Lo revisé en SQL Server 2008 R2 y funcionó a la perfección. En el cuidado de usarlo para la estrategia de respaldo, necesito un trabajo adicional por mí mismo, pero creo que es mejor que usar algunas herramientas de terceros como RedGate, etc. Quizás tenga paranoia, pero creo que la mayoría de las herramientas de terceros tienen código adicional y obtendrán mi controlar y reducir la simplicidad y la clarificación del guión. Muchas gracias.
QMaster
2
@ShaunLuttin Si se asegura de cambiar 'Tipos de datos a script' de 'Solo esquema' a 'Esquema y datos en el segundo paso (en 2012), deberían aparecer las instrucciones INSERT.
Daniel Gill
66
En SSMS 2014, la opción de cambiar de esquema solo a esquema y datos ahora está oculta detrás de un "Avanzado" al seleccionar dónde guardar el script.
MushinNoShin
2
Cuando intento ejecutar un script usando este método, recibo un error del estudio de administración del servidor SQL sobre "Memoria insuficiente para continuar la ejecución del programa. (Mscorelib)"
Rob
51

Primero, otorgue permisos de control total a una ruta local en su máquina (como se muestra a continuación) con Todos. (O, alternativamente, otorgue permisos específicamente a la cuenta del Agente SQL Server).

Segundo, ejecute lo siguiente:

BACKUP DATABASE [dev] TO  DISK = N'\\myMachine\c\dev.bak' WITH COPY_ONLY, INIT;
T. Webster
fuente
14
Esta es la respuesta a la pregunta. Esto "hará una copia de seguridad de una base de datos remota de SQL Server en una unidad local" y no "tablas y datos de script". Alguien: Marque esta respuesta como aceptada y elimine la respuesta incorrecta de Daniel Gill
Henrik Holmgaard Høyer
Si bien creo que esta es la mejor respuesta, la pregunta es "¿Alguna idea de cómo puedo copiar esta base de datos?" no específicamente de respaldo.
Oliver Townshend
11
Esto supone que la máquina remota tiene acceso a sus archivos de máquinas locales, lo cual no es el caso general.
Anders Lindén
Ojalá pudiera votarte más de una vez. Esta es la respuesta perfecta, y es algo que he querido hacer durante años. Tan simple ... tan perfecto. No resolverá todos los casos del mundo, pero funcionó perfectamente para el mío, donde estoy conectado a una máquina, pero no la máquina que tiene SQL Server.
Wade Hatler
Esto también tiene trabajo para mí. Simplemente comparta la carpeta local temporalmente con todos , realice la copia de seguridad y luego desactive compartir. También creo que esta debería ser la respuesta correcta.
Fred Rogers
51

Para copiar datos y esquemas solamente (no copiará procedimientos almacenados, funciones, etc.), use el Asistente de importación y exportación de SQL Server, y elija Nuevo ... al elegir la base de datos de destino.

Haga clic con el botón derecho en Base de datos> Tareas> Importar datos.

Elija una fuente de datos

  • Fuente de datos : SQL Server Native Client
  • Nombre del servidor : el servidor remoto
  • Autenticación :
  • Base de datos : el nombre de la base de datos

Elige un destino

  • Fuente de datos : SQL Server Native Client
  • Nombre del servidor : el servidor local
  • Autenticación :
  • Base de datos :New...

El resto es sencillo.

Shaun Luttin
fuente
2
Esto funcionó mucho mejor para mí que la respuesta aceptada. Maneja las relaciones entre tablas de manera mucho más limpia.
MushinNoShin
77
Welp. Desafortunadamente, no establece identidades y restricciones predeterminadas. :(
MushinNoShin
1
Esta es una forma mucho mejor que generar scripts. Los guiones pueden ser bastante grandes a veces. Preferencia personal. Sin ofender :)
Vikas
Esto es mucho más simple y sería mi opción, pero si por alguna razón necesita columnas como object_id, create_data, modifique la fecha TAL CUAL en sys.tables, solo recuerde que se modificarán después de la creación.
Crismograma el
@MushinNoShin puede generar scripts primero y luego importar / exportar datos habilitando la inserción de identidad en el paso de mapeo.
HasanG
29

No puedes crear una copia de seguridad desde un servidor remoto en un disco local, simplemente no hay forma de hacerlo. Y tampoco hay herramientas de terceros para hacer esto, que yo sepa.

Todo lo que puede hacer es crear una copia de seguridad en la máquina del servidor remoto y que alguien la cierre y se la envíe.

marc_s
fuente
55
Estoy en desacuerdo. En muchas circunstancias, puede usar el comando 'Generar secuencias de comandos' de MS SQL Server Management Studio para crear una secuencia de comandos que se pueda ejecutar para generar una base de datos local que luego puede hacer como desee. Vea mi respuesta a continuación o el comentario de Martin Smith sobre la pregunta.
Daniel Gill
19
@Rafid: sí, pero eso NO es una verdadera COPIA DE SEGURIDAD - es una exportación de script / datos .....
marc_s
2
@marc_s ¿Qué hay en una "copia de seguridad verdadera" que es diferente de una copia exportada? ¿El registro? ¿Algo más?
Dronz
31
@Dronz: ¡SÍ! La exportación del script reproducirá la estructura y posiblemente incluso los datos en una tabla, pero no puede incluir cosas como registros de transacciones y estadísticas y otras partes vitales de una base de datos de SQL Server.
marc_s
1
@ShaunLuttin, puede incluir los datos.
Erwin Rooijakkers
17

Sé que esta es una respuesta tardía, pero tengo que hacer un comentario sobre la respuesta más votada que dice usar la opción generar scripts en SSMS.

El problema con esto es que esta opción no necesariamente genera un script en el orden de ejecución correcto porque no tiene en cuenta las dependencias.

Para bases de datos pequeñas, esto no es un problema, pero para las más grandes ciertamente lo es porque requiere reordenar manualmente ese script. Pruebe eso en la base de datos de 500 objetos;)

Desafortunadamente, en este caso, la única solución son las herramientas de terceros.

Utilicé con éxito herramientas de comparación de ApexSQL (Diff y Data Diff) para tareas similares, pero no puede equivocarse con ninguna otra que ya se mencione aquí, especialmente Red Gate.

Phill C
fuente
1
no estoy de acuerdo, para mí sql siempre ordena las dependencias correctamente, ¿tiene un ejemplo específico de cómo reproducir el comportamiento que ha mencionado?
Sawe
Además, hay una opción para tener en cuenta este asunto
Gaspa79
13

Puede probar SQLBackupAndFTP . Creará scripts para crear todos los objetos en su base de datos e instrucciones INSERT para todas las filas en sus tablas. En cualquier base de datos, puede ejecutar este archivo de script y se volverá a crear toda la base de datos.

adinas
fuente
44
Secundado Tuve que instalar una nueva versión de sql server management studio y no pude hacer el script como solía hacerlo. Esta herramienta se encargó rápidamente y sin problemas, incluso sin tener acceso total al servidor remoto (complemento appharbor sqlserver)
Daniel Gill
1
Tenga en cuenta que este software utiliza muchos recursos.
Demencial
Además de tener errores y no estoy completamente seguro de que esto funcione correctamente. ¿Puede conectarse sin problemas a un servidor remoto a través de PHP, pero esto no puede? Cuando tengo la configuración adecuada en el servidor en sí. Así que ... sigue adelante.
Shawn Rebelo
7

Mira este blog para obtener una descripción de cómo copiar una base de datos remota:

Copia de seguridad de una base de datos de SQL Server 2008 desde un entorno de alojamiento compartido

Marcel W
fuente
1
Este enfoque explica cómo crear una secuencia de comandos de la estructura de la base de datos, crearla localmente y luego usar herramientas de administración de SQL para copiar datos entre una base de datos local y remota.
Drew Noakes
1
Puede cambiar la opción 'Datos de script' a True para también escribir los datos de una vez.
Daniel Gill
Copia y copia de seguridad son dos cosas diferentes.
Anders Lindén
Esto fue perfecto porque necesito trabajar en una base de datos de 2016 usando el servidor SQL 2012 y no puedo usar una copia de seguridad de 2016 en 2012.
majjam
6

Existe la solución del 99% para obtener el archivo bak del servidor sql remoto a su PC local. Lo describí allí en mi publicación. http://www.ok.unsode.com/post/2015/06/27/remote-sql-backup-to-local-pc

En general se verá así:

  • ejecutar script SQL para generar archivos bak

  • ejecute el script sql para insertar cada archivo bak en la tabla temporal con el tipo de campo varbinary y seleccione esta fila y descargue datos

  • repetir anterior paso tantas veces como tenga archivos bak

  • ejecutar script SQL para eliminar todos los recursos temporales

eso es todo, tienes tus archivos bak en tu PC local.

okarpov
fuente
5

Puede usar Copiar base de datos ... haga clic derecho en la base de datos remota ... seleccione tareas y use copiar base de datos ... le preguntará sobre el servidor de origen y el servidor de destino. que su origen es el remoto y el destino es su instancia local del servidor sql.

es fácil

Pouyan
fuente
La base de datos de copia requiere privilegios de SysAdmin. Esta no es una solución para usuarios habituales de la base de datos.
Buggieboy
En mi número de hoy, nuestro equipo de desarrollo tiene privilegios de administrador de sistemas. Entonces usaré el enfoque de Pouyan.
Códigos con Hammer
pero necesito hacerlo a diario y necesito un script para lograr esto
clarificador
3

La pandilla AppHarbor ha estado luchando con esto y ha desarrollado una solución temporal utilizando objetos de administración del servidor SQL y SqlBulkCopy.

Echa un vistazo a su publicación de blog al respecto, o ve directamente al código .

Solo lo han probado con AppHarbor, pero puede valer la pena echarle un vistazo.

Daniel Gill
fuente
3

Las respuestas anteriores simplemente no son correctas. Un script SQL incluso con datos no es una copia de seguridad. Una copia de seguridad es un archivo BAK que contiene la base de datos completa en su estructura actual, incluidos los índices.

Por supuesto, un archivo BAK que contiene la copia de seguridad completa con todos los datos e índices de una base de datos remota de SQL Server se puede recuperar en un sistema local.

Esto se puede hacer con software comercial, para guardar directamente un archivo BAK de respaldo en su máquina local, por ejemplo, este creará directamente una copia de seguridad desde una base de datos SQL remota en su máquina local.

Matías
fuente
Necesita permisos de administrador de sistemas para hacer esto.
LarryBud
Correcto. La cuenta (Windows o servidor SQL) utilizada para conectarse de forma remota a la instancia del servidor SQL necesita permisos de administrador del sistema para recuperar los archivos basura de copia de seguridad y almacenarlos en su máquina local. La herramienta mencionada de FIDA Software encripta y comprime el tráfico de red desde y hacia el servidor sql mientras recupera los archivos basura de respaldo. Una vez que tenga el archivo bak en su máquina, puede restaurarlo donde lo desee.
Matthias
1

Como dijo Martin Smith, si no tiene acceso a la máquina o al sistema de archivos, necesitará usar herramientas de terceros, como Red Gate o Adept para hacer una comparación en los sistemas de origen y destino. Las herramientas de Red Gate le permitirán copiar los objetos y esquemas Y los datos.

Vinnie
fuente
1

De cualquier manera, podría realizar una copia de seguridad desde una instancia remota de SQL Server en su unidad local, dado que se cumple la siguiente condición:

  1. Tiene una carpeta compartida en su disco local.
  2. Se puede acceder a la carpeta compartida desde el cuadro SQL Server.

Ahora, al especificar el comando de copia de seguridad, use la ruta de la carpeta compartida al especificar la opción de disco.

Naresh
fuente
¿Y en qué se diferencia tu respuesta de la de @Vivek?
Martin Schröder
1

solo prueba este:

1) Comparta una carpeta con permiso completo en su computadora

2) en su servidor SQL: panel de control -> herramientas administrativas -> servicios -> haga clic derecho en todos los servicios SQL

en la pestaña de inicio de sesión debe comenzar con su administrador de dominio

3) en el asistente de mantenimiento del servidor SQL, coloque la ubicación y la carpeta de copia de seguridad (\ yourcomputername \ sharedfoldernam)

Hice una copia de seguridad remota en 8 servidores de SQL Server 2008 en nuestra empresa

Parsaria
fuente
1

Me sorprende que nadie haya mencionado la solución de copia de seguridad con guiones ofrecida por Ola Hallengren que absolutamente le permite hacer una copia de seguridad de un DB desde un servidor remoto a una ruta UNC en su red de forma gratuita (en realidad lo estoy usando mientras escribo hacer una copia de seguridad de una base de datos desde un servidor de desarrollo al que no tengo acceso remoto que no sea a través de SSMS a un recurso compartido en mi PC de desarrollo). Esto ha estado disponible desde 2008 y funciona en SQL Server 2005 hasta 2014.

Debe asegurarse de que el recurso compartido que configuró tenga acceso suficiente: tiendo a permitir la lectura / escritura completa en el grupo de AD 'Todos' durante el proceso de copia de seguridad porque soy demasiado vago para descubrir algo más restrictivo, pero eso es Decisión personal.

Está bien utilizado, bien documentado y es muy flexible. Tiendo a poner los procs y la tabla de registro en su propia pequeña base de datos de utilidades y luego iniciarla. Si todo está en su dominio de AD y no es remoto en el sentido de que está en un servidor compartido o algo así, esto funciona muy bien.

Disculpas por agregar a un hilo muy antiguo, pero me encontré con esto cuando buscaba algo más y pensé que era una adición valiosa para cualquiera que buscara este tema.

Steve Pettifer
fuente
1

Para 2019, recomendaría usar mssql-scripter si desea una copia de seguridad local real. Sí, son secuencias de comandos, pero puede ajustarlo para incluir lo que desee, que puede incluir todos los datos. Escribí un script bash para hacer copias de seguridad diarias automáticas usando esto en una máquina Linux. Mira mi esencia:

https://gist.github.com/tjmoses/45ee6b3046be280c9daa23b0f610f407
Tim Moses
fuente
0

Podría hacerlo una vez ... Para hacer esto, debe tener un recurso compartido abierto en el servidor remoto. entonces puede colocar directamente la copia de seguridad en el recurso compartido en sí, que la ubicación predeterminada ...

Por lo general, el administrador toma la copia de seguridad y la comparte con nosotros en alguna carpeta compartida. Intenté si eso funcionaría si coloco la copia de seguridad allí. Funcionó.

Vivek
fuente
0

Si utiliza Generar secuencias de comandos en SSMS, haga clic en el botón Avanzado. En la opción 'Generar secuencias de comandos para los objetos dependientes', haga clic en Verdadero. Al hacer clic en eso, las dependencias de cada objeto también se incluirán en el orden correcto.

usuario2684
fuente
Verdadero es el valor predeterminado en SSMS v17.8.1.
Chris Catignani
0

Algunos programas de respaldo de terceros permiten configurar la transferencia de archivos con permisos de red específicos. Es muy útil cuando el servicio de SQL Server se ejecuta bajo una cuenta restringida y no tiene suficientes permisos de red. Intente usar EMS SQL Backup que resuelve esta tarea.

curandero
fuente
0

Utilizo las herramientas Redgate Backup Pro 7 para este propósito. puede crear un espejo desde el archivo de copia de seguridad en crear mosaico en otra ubicación. y puede copiar el archivo de copia de seguridad después de crearlo en la red y en el almacenamiento del host automáticamente.

mehdi lotfi
fuente
0

Cree una carpeta compartida local, con privilegios de lectura / escritura para "todos"

Conéctese a la base de datos de destino, inicie la copia de seguridad y señale el recurso compartido como se muestra a continuación

\ mymachine \ shared_folder \ mybackup.bak

(Probado en el entorno de dominio de Windows)

Rajesh Thampi
fuente
0

Sé que esta es una publicación anterior, pero para lo que vale, he descubierto que la solución "más simple" es simplemente hacer clic derecho en la base de datos y seleccionar "Tareas" -> "Exportar aplicación de nivel de datos". Es posible que esta opción solo esté disponible porque el servidor está alojado en Azure (por lo que recuerdo haber trabajado con Azure en el pasado, el formato .bacpac era bastante común allí).

Una vez hecho esto, puede hacer clic con el botón derecho en la lista de "Bases de datos" de su servidor local y usar la "Importar aplicación de nivel de datos" para llevar los datos a su máquina local utilizando el archivo .bacpac.

Solo tenga en cuenta que la exportación podría llevar mucho tiempo. La mina tardó aproximadamente dos horas en finalizar la exportación. Sin embargo, la parte de importación es mucho más rápida.

Kiran Ramaswamy
fuente
-1

Si está en una red local, puede compartir una carpeta en su máquina local y usarla como carpeta de destino para la copia de seguridad.

Ejemplo:

  • Carpeta local:

    C:\MySharedFolder -> URL: \\MyMachine\MySharedFolder

  • Servidor SQL remoto:

    Select your database -> Tasks -> Back Up -> Destination -> Add -> Apply '\\MyMachine\MySharedFolder'

Tonatio
fuente