Importación y exportación de datos de SQL Server por otros métodos - Amazon Relational Database Service

Importación y exportación de datos de SQL Server por otros métodos

A continuación, puede encontrar información acerca del uso de instantáneas para importar sus datos de Microsoft SQL Server a Amazon RDS. También puede encontrar información sobre el uso de instantáneas para exportar sus datos desde una instancia de base de datos de RDS que ejecuta SQL Server.

Si es posible en su situación concreta, lo más sencillo es importar y exportar los datos de Amazon RDS utilizando las funciones de backup y restauración nativas. Para obtener más información, consulte Importación y exportación de bases de datos de SQL Server por copias de seguridad y restauración nativas.

nota

Amazon RDS para Microsoft SQL Server no admite la importación de datos en la base de datos msdb.

Importación de datos a RDS para SQL Server utilizando una instantánea

Para importar datos a una instancia de base de datos SQL Server utilizando una instantánea
  1. Cree una instancia de base de datos. Para obtener más información, consulte Creación de una instancia de base de datos de Amazon RDS.

  2. Detenga el acceso de las aplicaciones a la instancia de base de datos de destino.

    Si impide el acceso a la instancia de base de datos durante la importación, la transferencia de datos será más rápida. Además no tiene que preocuparse por que se produzcan conflictos durante la carga de datos si otras aplicaciones no pueden escribir al mismo tiempo en la instancia de base de datos. Si hay algún problema y es necesario volver a una instantánea anterior de la base de datos, los únicos cambios que se perderán serán los datos importados. Puede volver a importar estos datos tras resolver el problema.

    Para obtener más información sobre el control del acceso a la instancia de base de datos, consulte Control de acceso con grupos de seguridad.

  3. Cree una instantánea de la base de datos de destino.

    Si la base de datos de destino ya contiene datos, es recomendable obtener una instantánea de ella antes de importar nuevos datos. Si hay algún problema en la importación o desea descartar los cambios, podrá utilizar la instantánea para devolver a la base de datos su estado anterior. Para obtener más información acerca de la creación de instantáneas de base de datos, consulte Creación de una instantánea de base de datos para una instancia de base de datos single-AZ para Amazon RDS.

    nota

    Al obtener una instantánea de base de datos, las operaciones de E/S de la base de datos se suspenden durante un momento (milisegundos), mientras se efectúa una copia de seguridad.

  4. Deshabilite los backups automatizados en la base de datos de destino.

    La deshabilitación de los backups automatizados en la base de datos de destino mejora el rendimiento de la importación de datos, ya que con los backups automáticos deshabilitados Amazon RDS no registra las transacciones. Sin embargo, hay algunos aspectos que se deben considerar. Se precisa que las copias de seguridad automatizadas realicen una recuperación en un momento dado. Por lo tanto, no puede restaurar la base de datos a un momento específico mientras importa los datos. Además, las copias de seguridad automatizadas creadas en la instancia de base de datos se borran a no ser que elija conservarlos.

    Optar por retener las copias de seguridad automatizadas puede ayudarlo a protegerse contra la eliminación accidental de datos. Amazon RDS también guarda las propiedades de instancia de base de datos junto con cada copia de seguridad automatizada para facilitar la recuperación. Si usa esta opción, podrá restaurar una instancia de base de datos eliminada en un punto determinado dentro del período de retención de la copia de seguridad, incluso después de eliminarla. Las copias de seguridad automáticas, al igual que las de una instancia de base de datos activa, se eliminan automáticamente al final del período especificado.

    También puede usar instantáneas anteriores para recuperar la base de datos, y las instantáneas que haya obtenido continúan disponibles. Para obtener información acerca de los backups automatizados, consulte Introducción a las copias de seguridad.

  5. Deshabilite las restricciones de clave externa, en su caso.

    Si es necesario deshabilitar las restricciones de clave externa, puede hacerlo con el script siguiente.

    --Disable foreign keys on all tables DECLARE @table_name SYSNAME; DECLARE @cmd NVARCHAR(MAX); DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables; OPEN table_cursor; FETCH NEXT FROM table_cursor INTO @table_name; WHILE @@FETCH_STATUS = 0 BEGIN SELECT @cmd = 'ALTER TABLE '+QUOTENAME(@table_name)+' NOCHECK CONSTRAINT ALL'; EXEC (@cmd); FETCH NEXT FROM table_cursor INTO @table_name; END CLOSE table_cursor; DEALLOCATE table_cursor; GO
  6. Elimine los índices, en su caso.

  7. Deshabilite los disparadores, en su caso.

    Si es necesario deshabilitar los disparadores, puede hacerlo con el script siguiente.

    --Disable triggers on all tables DECLARE @enable BIT = 0; DECLARE @trigger SYSNAME; DECLARE @table SYSNAME; DECLARE @cmd NVARCHAR(MAX); DECLARE trigger_cursor CURSOR FOR SELECT trigger_object.name trigger_name, table_object.name table_name FROM sysobjects trigger_object JOIN sysobjects table_object ON trigger_object.parent_obj = table_object.id WHERE trigger_object.type = 'TR'; OPEN trigger_cursor; FETCH NEXT FROM trigger_cursor INTO @trigger, @table; WHILE @@FETCH_STATUS = 0 BEGIN IF @enable = 1 SET @cmd = 'ENABLE '; ELSE SET @cmd = 'DISABLE '; SET @cmd = @cmd + ' TRIGGER dbo.'+QUOTENAME(@trigger)+' ON dbo.'+QUOTENAME(@table)+' '; EXEC (@cmd); FETCH NEXT FROM trigger_cursor INTO @trigger, @table; END CLOSE trigger_cursor; DEALLOCATE trigger_cursor; GO
  8. Consulte la instancia SQL Server de origen para determinar los nombres de inicio de sesión que desea importar a la instancia de base de datos de destino.

    SQL Server almacena los nombres y contraseñas de inicio de sesión en la base de datos master. Amazon RDS no permite el acceso a la base de datos master, por lo que no es posible importar directamente los nombres y contraseñas de inicio de sesión en la instancia de base de datos de destino. En su lugar, debe consultar la base de datos master en la instancia SQL Server de origen para generar un archivo de lenguaje de definición de datos (DDL). Este archivo debería incluir todos los inicios de sesión y las contraseñas que desee añadir a la instancia de base de datos de destino. Este archivo también debería incluir las suscripciones y permisos de rol que desea transferir.

    Para obtener información acerca de cómo consultar la base de datos master, consulte Transferir inicios de sesión y contraseñas entre servidores SQL Server en Microsoft Knowledge Base.

    La salida del script es otro script que puede ejecutar en la instancia de base de datos de destino. El script del artículo de Knowledge Base contiene el código siguiente:

    p.type IN

    En todos los lugares donde aparezca p.type, sustitúyalo por el código siguiente:

    p.type = 'S'
  9. Importe los datos siguiendo el método indicado en Importación de los datos.

  10. Conceda a las aplicaciones acceso a la instancia de base de datos de destino.

    Cuando termine la importación de los datos, puede conceder acceso a la instancia de base de datos a las aplicaciones que bloqueó antes de la importación. Para obtener más información sobre el control del acceso a la instancia de base de datos, consulte Control de acceso con grupos de seguridad.

  11. Habilite los backups automatizados para la instancia de base de datos de destino.

    Para obtener información acerca de los backups automatizados, consulte Introducción a las copias de seguridad.

  12. Habilite las restricciones de clave externa.

    Si antes deshabilitó las restricciones de clave externa, puede habilitarlas ahora con el script siguiente.

    --Enable foreign keys on all tables DECLARE @table_name SYSNAME; DECLARE @cmd NVARCHAR(MAX); DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables; OPEN table_cursor; FETCH NEXT FROM table_cursor INTO @table_name; WHILE @@FETCH_STATUS = 0 BEGIN SELECT @cmd = 'ALTER TABLE '+QUOTENAME(@table_name)+' CHECK CONSTRAINT ALL'; EXEC (@cmd); FETCH NEXT FROM table_cursor INTO @table_name; END CLOSE table_cursor; DEALLOCATE table_cursor;
  13. Habilite los índices, en su caso.

  14. Habilite los disparadores, en su caso.

    Si antes deshabilitó los disparadores, puede habilitarlos ahora con el script siguiente.

    --Enable triggers on all tables DECLARE @enable BIT = 1; DECLARE @trigger SYSNAME; DECLARE @table SYSNAME; DECLARE @cmd NVARCHAR(MAX); DECLARE trigger_cursor CURSOR FOR SELECT trigger_object.name trigger_name, table_object.name table_name FROM sysobjects trigger_object JOIN sysobjects table_object ON trigger_object.parent_obj = table_object.id WHERE trigger_object.type = 'TR'; OPEN trigger_cursor; FETCH NEXT FROM trigger_cursor INTO @trigger, @table; WHILE @@FETCH_STATUS = 0 BEGIN IF @enable = 1 SET @cmd = 'ENABLE '; ELSE SET @cmd = 'DISABLE '; SET @cmd = @cmd + ' TRIGGER dbo.'+QUOTENAME(@trigger)+' ON dbo.'+QUOTENAME(@table)+' '; EXEC (@cmd); FETCH NEXT FROM trigger_cursor INTO @trigger, @table; END CLOSE trigger_cursor; DEALLOCATE trigger_cursor;

Importación de los datos

Microsoft SQL Server Management Studio es un cliente SQL Server gráfico incluido en todas las ediciones de Microsoft SQL Server excepto Express Edition. Microsoft ofrece SQL Server Management Studio Express como descarga gratuita. Encontrará esta descarga en el sitio web de Microsoft.

nota

SQL Server Management Studio solo está disponible como aplicación basada en Windows.

SQL Server Management Studio incluye herramientas que resultan útiles para importar datos a una instancia de base de datos SQL Server:

  • Asistente Generar y publicar scripts

  • Asistente para importación y exportación

  • Copia masiva

Asistente Generar y publicar scripts

El asistente Generar y publicar scripts crea un script que contiene el esquema de una base de datos, los datos en sí, o ambos. Puede generar un script para una base de datos en su implementación SQL Server local. Puede ejecutar el script para que transfiera la información que contiene a una instancia de base de datos de Amazon RDS.

nota

Para las bases de datos de 1 GiB o más, es más eficiente generar scripts solo para el esquema de la base de datos. Puede utilizar el asistente para la Importación y Exportación o la característica de copia masiva de SQL Server para transferir los datos.

Para obtener información detallada acerca del asistente Generar y publicar scripts, consulte la documentación de Microsoft SQL Server.

En el asistente, ponga especial atención en las opciones avanzadas de la página Establecer opciones de scripting para asegurarse de que esté seleccionado todo lo que desea incluir en el script. Por ejemplo, por defecto los disparadores de base de datos no se incluyen en el script.

Una vez generado y guardado el script, puede usar SQL Server Management Studio para conectar con la instancia de base de datos y ejecutarlo.

Asistente para importación y exportación

El Asistente para importación y exportación crea un paquete especial de servicios de integración que puede usar para copiar datos de la base de datos SQL Server local a la instancia de base de datos de destino. El asistente puede filtrar las tablas e incluso las tuplas de una tabla que se copian a la instancia de base de datos de destino.

nota

El Asistente para importación y exportación funciona bien con conjuntos de datos grandes, pero puede no ser el modo más rápido para exportar datos desde una instalación local. Para conseguir una velocidad incluso mayor, considere utilizar la función de copia masiva de SQL Server.

Para obtener información detallada acerca del Asistente para importación y exportación, consulte la documentación de Microsoft SQL Server.

En el asistente, en la página Elegir un destino, haga lo siguiente:

  • En Nombre del servidor, escriba el nombre del punto de conexión de la instancia de base de datos.

  • Elija Utilizar autenticación de SQL Server como modo de autenticación del servidor.

  • En Nombre de usuario y Contraseña, escriba las credenciales del usuario maestro que ha creado para la instancia de base de datos.

Copia masiva

La función de copia masiva de SQL Server es un modo eficiente de copiar datos de una base de datos de origen a una instancia de base de datos. La copia masiva escribe los datos que especifique en un archivo de datos, por ejemplo un archivo ASCII. A continuación puede ejecutar de nuevo la copia masiva para escribir el contenido del archivo en la instancia de base de datos de destino.

En esta sección se utiliza la herramienta bcp, que se incluye en todas las ediciones de SQL Server. Para obtener información detallada acerca las operaciones de importación y exportación masivas, consulte la documentación de Microsoft SQL Server.

nota

Antes de usar la copia masiva, debe importar el esquema de base de datos en la instancia de base de datos de destino. El asistente Generar y publicar scripts, descrito anteriormente en este tema, es una herramienta excelente para hacerlo.

El siguiente comando se conecta a la instancia SQL Server local. Genera un archivo delimitado por tabuladores a partir de una tabla especificada en el directorio C:\root de la instalación de SQL Server existente. La tabla se especifica por su nombre completo y el archivo de texto tiene el mismo nombre que la tabla que se copia.

bcp dbname.schema_name.table_name out C:\table_name.txt -n -S localhost -U username -P password -b 10000

En el código anterior se incluyen las opciones siguientes:

  • -n especifica que la copia masiva utiliza los tipos de datos nativos de los datos que se copian.

  • -S especifica la instancia SQL Server con la que conecta la utilidad bcp.

  • -U especifica el nombre de usuario de la cuenta que inicia sesión en la instancia de SQL Server.

  • -P especifica la contraseña del usuario indicado con -U.

  • -b especifica el número de filas en cada lote de datos importados.

nota

Puede haber otros parámetros importantes para cada caso de importación. Por ejemplo, puede ser necesario el parámetro -E, que se refiere a los valores de identidad. Para obtener más información, consulte la descripción completa de la sintaxis de línea de comandos de la utilidad bcp en la documentación de Microsoft SQL Server.

Por ejemplo, supongamos que una base de datos llamada store usa el esquema predeterminado dbo y contiene una tabla llamada customers. La cuenta de usuario admin, con la contraseña insecure, copia 10 000 filas de la tabla customers en un archivo llamado customers.txt.

bcp store.dbo.customers out C:\customers.txt -n -S localhost -U admin -P insecure -b 10000

Después de generar el archivo de datos, puede cargar los datos en su instancia de base de datos utilizando un comando similar. Previamente, cree la base de datos y el esquema en la instancia de base de datos de destino. Utilice el argumento in para especificar un archivo de entrada en lugar de out para especificar un archivo de salida. En lugar de especificar localhost para indicar la instancia SQL Server local, especifique el punto de conexión de la instancia de base de datos. Si usa un puerto distinto del 1433, también debe especificarlo. El nombre de usuario y la contraseña son los del usuario maestro de la instancia de base de datos. La sintaxis es la siguiente:

bcp dbname.schema_name.table_name in C:\table_name.txt -n -S endpoint,port -U master_user_name -P master_user_password -b 10000

Para continuar con el ejemplo anterior, supongamos que el nombre del usuario maestro es admin y que la contraseña es insecure. El punto de conexión de la instancia de base de datos es rds.ckz2kqd4qsn1.us-east-1.rds.amazonaws.com y se usa el puerto 4080. El comando es el siguiente:

bcp store.dbo.customers in C:\customers.txt -n -S rds.ckz2kqd4qsn1.us-east-1.rds.amazonaws.com,4080 -U admin -P insecure -b 10000
nota

Especifique una contraseña distinta de la que se muestra aquí como práctica recomendada de seguridad.

Exportación de datos de RDS para SQL Server

Se puede elegir una de las siguientes opciones para exportar datos desde una instancia de base de datos de RDS para SQL Server:

Asistente para importación y exportación de SQL Server

Se puede utilizar el asistente para importación y exportación de SQL Server para copiar una o varias tablas, vistas o consultas de una instancia de base de datos RDS para SQL Server a otro almacén de datos. Esta es la mejor opción cuando el almacén de datos de destino no es SQL Server. Para obtener más información, consulte Asistente para importación y exportación de SQL Server en la documentación de SQL Server.

El asistente para importación y exportación de SQL Server está disponible como parte de SQL Server Management Studio. Es un cliente SQL Server gráfico incluido en todas las ediciones de Microsoft SQL Server excepto Express Edition. SQL Server Management Studio solo está disponible como aplicación basada en Windows. Microsoft ofrece SQL Server Management Studio Express como descarga gratuita. Encontrará esta descarga en el sitio web de Microsoft.

Para usar el Asistente para importación y exportación de SQL Server para exportar datos
  1. En SQL Server Management Studio, conéctese con la instancia de base de datos RDS para SQL Server. Para obtener más detalles sobre cómo hacerlo, consulte Conexión de una instancia de base de datos que ejecuta el motor de base de datos de Microsoft SQL Server.

  2. En el Explorador de objetos, expanda Bases de datos, abra el menú contextual (clic con el botón derecho) para la base de datos de origen, elija Tareas y, a continuación, elija Exportar datos. Aparecerá el asistente.

  3. En la página Elija un origen de datos, haga lo siguiente:

    1. Para Origen de datos, elija SQL Server Native Client 11.0.

    2. Asegúrese de que el cuadro Nombre del servidor muestre el punto de conexión de la instancia de base de datos RDS para SQL Server.

    3. Seleccione Utilizar autenticación de SQL Server. En Nombre de usuario y Contraseña, escriba el nombre y la contraseña del usuario maestro de la instancia de la base de datos.

    4. Compruebe que en el cuadro Base de datos aparece la base de datos desde la que desea exportar datos.

    5. Elija Siguiente.

  4. En la página Elija un destino, haga lo siguiente:

    1. Para Destino: elija SQL Server Native Client 11.0.

      nota

      Hay disponibles otros orígenes de datos de destino disponibles. Estos incluyen .NET Framework, clientes nativos SQL Server, ADO.NET, Microsoft Office Excel, Microsoft Office Access y el origen Archivo sin formato. Si elige como destino uno de estos orígenes de datos, omita el recordatorio del paso 4. Para obtener detalles la siguiente información de conexión que proporcionar, consulte Elija un destino en la documentación de SQL Server.

    2. En Nombre del servidor, escriba el nombre del servidor de la instancia de base de datos SQL de destino.

    3. Elija el tipo de autenticación adecuado. Escriba un nombre de usuario y una contraseña si es necesario.

    4. En Base de datos, elija el nombre de la base de datos de destino, o bien elija Nueva para crear una base de datos nueva para contener los datos exportados.

      Si elige Nueva, consulte Crear base de datos en la documentación de SQL Server para obtener detalles sobre la información de base de datos que debe proporcionar.

    5. Elija Siguiente.

  5. En la página Copia de tabla o consulta, elija Copiar los datos de una o más tablas o vistas o Escribir una consulta para especificar los datos que se van a transferir. Elija Siguiente.

  6. Si elige Escribir una consulta para especificar los datos que se van a transferir, aparecerá la página Proporcionar una consulta de origen. Escriba o pegue una consulta SQL y, a continuación, elija Analizar para comprobarla. Una vez validada la consulta, elija Siguiente.

  7. En la página Seleccionar tablas y vistas de origen, haga lo siguiente:

    1. Seleccione las tablas y vistas que desea exportar o compruebe que está seleccionada la consulta que ha especificado.

    2. Elija Editar asignaciones y especifique la información de la base de datos y de asignación de columnas. Para obtener más información, consulte Mapeos de columnas en la documentación de SQL Server.

    3. (Opcional) Para ver una vista previa de los datos que se van a exportar, seleccione la tabla, vista o consulta y elija Vista previa.

    4. Elija Siguiente.

  8. En la página Ejecutar paquete, compruebe que está seleccionado Ejecutar inmediatamente. Elija Siguiente.

  9. En la página Finalización del asistente, compruebe que los detalles de la exportación de datos son los que espera. Seleccione Finalizar.

  10. En la página Ejecución completada con éxito, elija Cerrar.

Asistente Generar y publicar scripts de SQL Server y utilidad bcp

Puede usar el asistente Generar y publicar scripts de SQL Server para crear scripts referidos a toda una base de datos o solo a objetos seleccionados. A continuación puede ejecutar esos scripts en una instancia de base de datos SQL Server de destino para volver a crear los objetos especificados. Entonces puede usar la herramienta bcp para una exportación masiva de los datos de los objetos seleccionados a la instancia de base de datos de destino, Esta es la mejor opción cuando se desea transferir una base de datos completa (incluyendo los objetos que no son tablas) o grandes cantidades de datos entre dos instancias de base de datos SQL Server. Para obtener una descripción completa de la sintaxis de línea de comandos de bcp, consulte bcp (utilidad) en la documentación de Microsoft SQL Server.

El asistente Generar y publicar scripts de SQL Server está disponible como parte de SQL Server Management Studio. Es un cliente SQL Server gráfico incluido en todas las ediciones de Microsoft SQL Server excepto Express Edition. SQL Server Management Studio solo está disponible como aplicación basada en Windows. Microsoft ofrece SQL Server Management Studio Express como descarga gratuita.

Para usar el asistente Generar y publicar scripts y la utilidad bcp de SQL Server para exportar datos
  1. En SQL Server Management Studio, conéctese con la instancia de base de datos RDS para SQL Server. Para obtener más detalles sobre cómo hacerlo, consulte Conexión de una instancia de base de datos que ejecuta el motor de base de datos de Microsoft SQL Server.

  2. En el Explorador de objetos, expanda el nodo Bases de datos y seleccione la base de datos que desee incluir en el script.

  3. Siga las instrucciones indicadas en Asistente Generar y publicar scripts en la documentación de SQL Server para crear un archivo de script.

  4. En SQL Server Management Studio, conecte con la instancia de base de datos SQL Server de destino.

  5. Con la instancia de base de datos de SQL Server de destino seleccionada en Object Explorer (Explorador de objetos), elija Open (Abrir) en el menú File (Archivo), elija File (Archivo) y, luego, abra el archivo de script.

  6. Si ha realizado scripts en toda la base de datos, revise la instrucción CREATE DATABASE en el scripts. Asegúrese de que la base de datos se crea en la ubicación y con los parámetros que desea, Para obtener más información, consulte CREATE DATABASE en la documentación de SQL Server.

  7. Si va a crear usuarios de base de datos con el script, compruebe si los nombres de inicio de sesión en el servidor existen para esos usuarios en la instancia de base de datos. Si no existen, cree nombres de inicio de sesión para los usuarios. De no hacerlo, los comandos del script que crean los usuarios de base de datos generan un error. Para obtener más información, consulte Crear un inicio de sesión en la documentación de SQL Server.

  8. Elija !Ejecutar en el menú del Editor SQL para ejecutar el archivo de script y crear los objetos de base de datos. Cuando termine el script, compruebe que existen todos los objetos de base de datos que esperaba.

  9. Use la utilidad BCP para exportar datos de la instancia de base de datos RDS para SQL Server a archivos. Abra un símbolo del sistema y escriba el comando siguiente:

    bcp database_name.schema_name.table_name out data_file -n -S aws_rds_sql_endpoint -U username -P password

    En el código anterior se incluyen las opciones siguientes:

    • table_name es el nombre de una de las tablas que ha creado en la base de datos de destino y que ahora quiere rellenar con datos.

    • data_file es la ruta completa y el nombre del archivo de datos que se va a crear.

    • -n especifica que la copia masiva utiliza los tipos de datos nativos de los datos que se copian.

    • -S especifica la instancia de base de datos SQL Server desde la que se exporta.

    • -U especifica el nombre de usuario empleado al conectar con la instancia de base de datos SQL Server.

    • -P especifica la contraseña del usuario indicado con -U.

    El siguiente es un ejemplo del comando .

    bcp world.dbo.city out C:\Users\JohnDoe\city.dat -n -S sql-jdoe.1234abcd.us-west-2.rds.amazonaws.com,1433 -U JohnDoe -P ClearTextPassword

    Repita este paso hasta tener archivos de datos para todas las tablas que desea exportar.

  10. Prepare la instancia de base de datos de destino para la importación masiva de datos siguiendo las instrucciones indicadas en Prepararse para importar datos de forma masiva en la documentación de SQL Server.

  11. Para decidir el método de importación masiva a emplear, tenga en cuenta las consideraciones y aspectos expuestos en Acerca de las operaciones de importación y exportación masivas en la documentación de SQL Server.

  12. Importe de forma masiva los datos de los archivos de datos que ha creado utilizando la utilidad bcp. Para hacerlo, siga las instrucciones facilitadas en Importar y exportar datos de forma masiva con la utilidad bcp o en Importar de forma masiva datos mediante BULK INSERT u OPENROWSET(BULK...) en la documentación de SQL Server, dependiendo de lo que haya decidido en el paso 11.