Recomendaciones para la importación y exportación de datos

En esta página, se proporcionan las prácticas recomendadas para importar y exportar datos con Cloud SQL. Si quieres obtener instrucciones, consulta Cómo importar datos a Cloud SQL. Consulta la documentación para exportar datos para ver instrucciones paso a paso al respecto, ya sea en Cloud SQL o en una instancia que administres.

Recomendaciones para importar y exportar

Las siguientes son prácticas recomendadas que se deben tener en cuenta a la hora de importar y exportar datos:

No uses los depósitos de pagos del solicitante de Cloud Storage

No puedes usar un depósito de Cloud Storage que tenga habilitados los pagos del solicitante para importaciones y exportaciones desde Cloud SQL.

Comprime los datos para reducir los costos

Cloud SQL admite la importación y exportación de archivos comprimidos y no comprimidos. Con la compresión se puede ahorrar una cantidad importante de espacio de almacenamiento en Cloud Storage, además de disminuir los costos de almacenamiento, en especial, cuando se exportan instancias grandes.

Cuando exportes un archivo BAK, usa una extensión de archivo .gz para comprimir los datos. Cuando importas un archivo con la extensión .gz, se descomprime de forma automática.

Reduce los procesos de importación y exportación de larga duración

Las importaciones en Cloud SQL y las exportaciones fuera de Cloud SQL pueden tardar mucho tiempo en completarse, según el tamaño de los datos que se procesan. Esto puede tener las siguientes consecuencias:

  • No puedes detener una operación de instancia de larga duración de Cloud SQL.
  • Solo puedes realizar una operación de importación o exportación a la vez para cada instancia, y una importación o exportación de larga duración bloquea otras operaciones, como las copias de seguridad automáticas diarias.

Puedes disminuir la cantidad de tiempo que lleva completar cada operación mediante la función de importación o exportación de Cloud SQL con lotes de datos más pequeños.

Para las migraciones de bases de datos completas, por lo general, debes usar archivos BAK en lugar de archivos SQL a fin de realizar importaciones. En general, la importación desde un archivo SQL lleva mucho más tiempo que la importación desde un archivo BAK.

Usa SqlPackage para importar y exportar datos

Puedes importar y exportar datos en Cloud SQL con SqlPackage. Te permite exportar una base de datos de SQL, incluidos el esquema de la base de datos y los datos del usuario, a un archivo BACPAC (.bacpac) e importar los datos de la tabla y el esquema de un archivo BACPAC a una base de datos de usuarios nueva.

SqlPackage usa tus credenciales para conectarse a SQL Server a fin de realizar importaciones y exportaciones de bases de datos. Permite que las migraciones estén disponibles para todos los usuarios de Cloud SQL. Para realizar operaciones de importación y exportación, debes contar con lo siguiente:

  • Una estación de trabajo conectada a tu instancia, en la que puedes ejecutar SqlPackage. Para obtener más información sobre las opciones de conectividad, consulta Acerca de las opciones de conexión.

  • SqlPackage instalado en tu sistema. Para obtener más información sobre cómo descargar e instalar SqlPackage, consulta la documentación de Microsoft.

  • Credenciales configuradas para acceder a tu instancia. Para obtener más información sobre la configuración de credenciales, consulta Cómo autenticar Cloud SQL.

Ejemplos

Importar

Para importar datos a una base de datos AdventureWorks2017, ejecuta el siguiente comando:

c:\Program Files\Microsoft SQL Server\160\DAC\bin>SqlPackage
/Action:Import /tsn:myTargetServer /tdn:AdventureWorks2017
/tu:myUsername /sf:mySourceFile
/TargetTrustServerCertificate:True /tp:myPassword

En este caso,

  • mySourceFile es un archivo de origen que deseas usar como fuente de acción desde el almacenamiento local. Si usas este parámetro, ningún otro parámetro de origen es válido.
  • myTargetServer es el nombre del servidor que aloja la base de datos de destino.
  • myUsername es el nombre de usuario de SQL Server que deseas usar para acceder a la base de datos de destino.
  • myPassword es tu contraseña en las credenciales.

Para obtener más información, consulta la documentación de Microsoft.

Exportar

Para exportar datos de una base de datos AdventureWorks2017, ejecuta el siguiente comando:

c:\Program Files\Microsoft SQL Server\160\DAC\bin>SqlPackage
/Action:Export /TargetFile:"myTargetFile"
/ssn:mySourceServer /su:myUsername /sdn:AdventureWorks2017
/SourceTrustServerCertificate:True /sp:myPassword

En este caso,

  • myTargetFile es el archivo de destino (un archivo .dacpac) que deseas usar como destino de la acción en lugar de una base de datos. Si usas este parámetro, ningún otro parámetro de destino es válido. Este parámetro no es válido para las acciones que solo admiten objetivos de base de datos.
  • myUsername es el nombre de usuario de SQL Server que deseas usar para acceder a la base de datos de origen.
  • mySourceServer es el nombre del servidor que aloja la base de datos de origen.
  • myPassword es tu contraseña en las credenciales.

Para obtener más información, consulta la documentación de Microsoft.

Usa la utilidad bcp para importar y exportar datos.

Otra opción para importar y exportar datos en Cloud SQL es usar la utilidad de programa de copia masiva (bcp). Mediante la utilidad bcp, puedes exportar datos de una base de datos de SQL Server a un archivo de datos y, también, importar datos de un archivo de datos a una base de datos de SQL Server. La utilidad bcp usa tus credenciales para conectarte a SQL Server a fin de realizar importaciones y exportaciones de bases de datos. Permite que las transferencias estén disponibles para todos los usuarios de Cloud SQL. Para realizar operaciones de importación y exportación, debes contar con lo siguiente:

  • Una estación de trabajo en la que puedas ejecutar la utilidad bcp y que tenga conectividad con tu instancia de Cloud SQL. Para obtener más información sobre las opciones de conectividad, consulta Acerca de las opciones de conexión.

  • La utilidad bcp instalada en tu sistema. Para obtener más información sobre cómo descargar e instalar bcp, consulta la documentación de Microsoft.

  • Credenciales configuradas para acceder a tu instancia. Para obtener más información sobre la configuración de credenciales, consulta Cómo autenticar Cloud SQL.

Ejemplos

Importar

Para importar datos del archivo person.csv a la tabla Person de la base de datos AdventureWorks2017, ejecuta el siguiente comando:

bcp Person.Person in "person.csv" -d AdventureWorks2017 -U myLoginID -S myServer

En este caso,

  • myLoginID es el ID de acceso que se usa para conectarse a SQL Server.
  • myServer es la instancia de SQL Server a la que deseas conectarte. Si no especificas un servidor, la utilidad bcp se conecta a la instancia predeterminada de SQL Server en la computadora local.

Para obtener más información, consulta la documentación de Microsoft.

Exportar

Para exportar datos de la tabla Person de la base de datos AdventureWorks2017 al archivo person.dat, ejecuta el siguiente comando:

bcp Person.Person out "person.dat" -U myLoginID -S myServer -d AdventureWorks2017

En este caso,

  • myLoginID es el ID de acceso que se usa para conectarse a SQL Server.
  • myServer es la instancia de SQL Server a la que deseas conectarte. Si no especificas un servidor, la utilidad bcp se conecta a la instancia predeterminada de SQL Server en la computadora local.

Para obtener más información, consulta la documentación de Microsoft.

Usa la inserción masiva para importar datos

La inserción masiva te permite importar datos a tu base de datos de Cloud SQL para SQL Server desde un archivo almacenado en Cloud Storage.

En esta sección, se describe lo siguiente:

Funciones y permisos requeridos

Para configurar la inserción masiva, necesitas lo siguiente:

  • El permiso CONTROL en la base de datos en la que deseas importar los datos.
  • Una clave de acceso HMAC y un secreto asignado a una cuenta de IAM con los siguientes permisos:

    • storage.buckets.get
    • storage.objects.create y storage.multipartUploads.create para escribir registros de errores y ejemplos de datos incorrectos.

    Como alternativa, también puedes usar las siguientes funciones:

    • Storage Object Viewer
    • Storage Object Creator para escribir registros de errores y ejemplos de datos incorrectos.

Para usar la inserción masiva, necesitas lo siguiente:

  • El permiso EXECUTE en el procedimiento almacenado msdb.dbo.gcloudsql_bulk_insert. Cloud SQL crea el procedimiento almacenado después de que la inserción masiva se habilita en la instancia. Cloud SQL otorga el permiso EXECUTE a la cuenta de administrador sqlserver de forma predeterminada.
  • El permiso INSERT en el objeto en el que deseas importar los datos.

Si deseas obtener más información para crear usuarios para la inserción masiva, consulta Crea y administra usuarios.

Consideraciones para usar la inserción masiva

En esta sección, se incluyen recomendaciones para manejar la seguridad, el rendimiento y la confiabilidad en las instancias mientras se usa la inserción masiva.

Seguridad

Cloud SQL encripta y almacena la clave de acceso y el secreto HMAC en una instancia como una credencial con alcance de base de datos. No se puede acceder a sus valores después de guardarlos. Puedes borrar la clave y el secreto de una instancia si descartas la credencial con alcance de la base de datos mediante un comando de T-SQL. Si realizas cualquier copia de seguridad mientras la clave y el secreto se almacenan en la instancia, esa copia de seguridad contendrá esa clave y ese secreto. También puedes hacer que la clave no sea válida si desactivas y borras la clave HMAC.

Las siguientes operaciones pueden transferir de forma involuntaria la clave de acceso y el secreto, y hacer que estén disponibles:

  • Clonar la instancia: La clave y el secreto están disponibles en la instancia clonada.
  • Crear una réplica de lectura: La clave y el secreto están disponibles en la réplica de lectura creada.
  • Restablecer desde una copia de seguridad: La clave y el secreto están disponibles en la instancia restablecida desde una copia de seguridad.

Te recomendamos que descartes la clave y el secreto de la instancia de destino después de realizar estas operaciones.

La inserción masiva puede escribir datos que no puede analizar en un archivo almacenado en un bucket de Cloud Storage. Si deseas proteger los datos a los que la inserción masiva tiene acceso, configura los Controles del servicio de VPC.

Rendimiento

Recomendamos hacer lo siguiente para mitigar los impactos en el rendimiento mientras usas la inserción masiva:

  • Prueba y establece un valor adecuado para @batchsize, ya que, de forma predeterminada, todos los datos se importan en un solo lote.
  • En el caso de las inserciones grandes, inhabilita los índices de forma temporal para acelerar la inserción de datos.
  • Si es posible, usa la opción @tablock porque puede reducir la contención y aumentar el rendimiento de la carga de datos.
  • Usa el parámetro @ordercolumnsjson para especificar los datos ordenados en el orden del índice agrupado. Esto ayuda a mejorar el rendimiento de las instancias.
Confiabilidad

Recomendamos hacer lo siguiente para mitigar el impacto en la confiabilidad de la instancia mientras se usa la inserción masiva:

  • Si se produce un error y se usa @batchsize, esto puede generar datos que se carguen de forma parcial. Es posible que tengas que limpiar de forma manual estos datos en tu instancia.
  • Usa la opción @errorfile para mantener un registro de errores y ejemplos de datos incorrectos detectados durante el proceso de carga. Esto facilita la identificación de las filas que no se pudieron cargar.

Realiza la inserción masiva

Puedes realizar la operación de inserción masiva con el siguiente procedimiento almacenado:

msdb.dbo.gcloudsql_bulk_insert

Si deseas obtener más información, consulta Procedimiento almacenado para usar la inserción masiva.

Ejemplo: Importa datos de un archivo en Cloud Storage y especifica un archivo de error
1. Habilita la inserción masiva

Para habilitar la inserción masiva en tu instancia, habilita la marca cloud sql enable bulk insert.

gcloud sql instances patch INSTANCE_NAME --database-flags="cloud sql enable bulk insert"=on

Reemplaza INSTANCE_NAME por el nombre de la instancia que deseas usar para la inserción masiva.

Para obtener más información, consulta Configura marcas de base de datos.

Después de habilitar esta marca en tu instancia, Cloud SQL instala el procedimiento almacenado de inserción masiva en tu instancia y otorga permisos a la cuenta de administrador sqlserver para que se ejecute.

2. Crea una clave HMAC

Necesitas una clave HMAC para acceder a tu bucket de Cloud Storage. Te recomendamos crear una clave HMAC para una cuenta de servicio y otorgar permisos a la cuenta de servicio a los buckets que deseas usar para la inserción masiva. Para obtener más información y consideraciones de seguridad, consulta Consideraciones cuando se usa la inserción masiva.

3. Crea datos de muestra para importar
  1. Con un editor de texto, crea un archivo con codificación ANSI o UTF-16 que tenga los siguientes datos de muestra. Guarda el archivo en tu bucket de Cloud Storage y asígnale el nombre bulkinsert.bcp.

    1,Elijah,Johnson,1962-03-21
    2,Anya,Smith,1982-01-15
    3,Daniel,Jones,1990-05-21
    
  2. Crea un archivo de formato con los siguientes datos de muestra. Guarda el archivo en tu bucket de Cloud Storage y asígnale el nombre bulkinsert.fmt. Para obtener más información sobre los archivos de formato XML y no XML en SQL Server, consulta Crea un archivo de formato.

    13.0
    4
    1       SQLCHAR             0       7       ","      1     PersonID               ""
    2       SQLCHAR             0       25      ","      2     FirstName            SQL_Latin1_General_CP1_CI_AS
    3       SQLCHAR             0       30      ","      3     LastName            SQL_Latin1_General_CP1_CI_AS
    4       SQLCHAR             0       11      "\r\n"   4     BirthDate             ""
    
4. Ejecuta el procedimiento almacenado
  1. Conéctate a tu instancia con el usuario sqlserver y crea una base de datos y una tabla de muestra para la inserción masiva.

    USE MASTER
    GO
    -- create test database
    DROP DATABASE IF EXISTS bulktest
    CREATE DATABASE bulktest
    GO
    
    -- create table to insert
    USE bulktest;
    GO
    CREATE TABLE dbo.myfirstimport(
    PersonID smallint,
    FirstName varchar(25),
    LastName varchar(30),
    BirthDate Date
    );
    
  2. Crea una clave maestra de base de datos, una credencial con alcance de base de datos y una fuente de datos externa. Configura la identidad como S3 Access Key.

      -- create master key
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword1';
    
    -- create database scoped credential
    CREATE DATABASE SCOPED CREDENTIAL GCSCredential
    WITH IDENTITY = 'S3 Access Key',
    SECRET = '<Access key>:<Secret>';
    
    --create external data source
    CREATE EXTERNAL DATA SOURCE GCSStorage
    WITH ( TYPE = BLOB_STORAGE,
    LOCATION = 's3://storage.googleapis.com/bulk-insert-demo/'
    , CREDENTIAL = GCSCredential
    );
    
    CREATE EXTERNAL DATA SOURCE GCSStorageError
    WITH ( TYPE = BLOB_STORAGE,
    LOCATION = 's3://storage.googleapis.com/bulk-insert-demo/'
    , CREDENTIAL = GCSCredential
    );
    
  3. Ejecuta el procedimiento de inserción masiva almacenado para importar los datos de muestra.

    EXEC msdb.dbo.gcloudsql_bulk_insert
    @database = 'bulktest',
    @schema = 'dbo',
    @object = 'myfirstimport',
    @file = 's3://storage.googleapis.com/bulk-insert-demo/bulkinsert.bcp',
    @formatfile = 's3://storage.googleapis.com/bulk-insert-demo/bulkinsert.fmt',
    @fieldquote = '"',
    @formatfiledatasource = 'GCSStorage',
    @ROWTERMINATOR = '0x0A',
    @fieldterminator = ',',
    @datasource ='GCSStorage',
    @errorfiledatasource = 'GCSStorageError',
    @errorfile = 's3://storage.googleapis.com/oom-data/bulkinsert/bulkinsert_sampleimport.log',
    @ordercolumnsjson =
    '[{"name": "PersonID","order": " asc "},{"name": "BirthDate","order": "asc"}]'
    

Visualiza los datos importados

Puedes ver los datos importados mediante uno de los siguientes métodos:

  • Ejecute la siguiente consulta:

    SELECT * FROM dbo.myfirstimport
    
  • Cloud SQL agrega un registro de este procedimiento al registro de errores de SQL. Puedes ver esto en Cloud Logging. También puedes ver esto en los datos de registro de errores de SQL en SQL Server Management Studio (SSMS).

Inhabilitar la inserción masiva

Para inhabilitar la inserción masiva, quita la marca cloud sql enable bulk insert:

  gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable bulk insert"=off
  

Reemplaza INSTANCE_NAME por el nombre de la instancia en la que deseas quitar la inserción masiva.

Como alternativa, puedes ejecutar el siguiente comando para borrar todas las marcas de base de datos:

  gcloud sql instances patch INSTANCE_NAME --clear-database-flags
  

Reemplaza INSTANCE_NAME por el nombre de la instancia en la que deseas quitar la inserción masiva.

Utiliza la importación y la exportación seccionadas

Cuando realizas una importación o exportación con franjas, reduces el tiempo que tarda la operación en completarse y habilitas las bases de datos de más de 5 TB para importar y exportar. Para obtener más información, consulta Importa y exporta con archivos BAK.

Verifica la base de datos importada

Después de completar una operación de importación, conéctate a la base de datos y ejecuta los comandos correspondientes para asegurarte de que los contenidos sean correctos. Por ejemplo, conéctate y enumera las bases de datos, tablas y entradas específicas.

Limitaciones conocidas

A fin de obtener una lista de las limitaciones conocidas, consulta Problemas para importar y exportar datos.

Automatiza las operaciones de exportación

Aunque Cloud SQL no proporciona una forma integrada de automatizar las exportaciones de bases de datos, puedes compilar tu propia herramienta de automatización con varios componentes de Google Cloud. Para obtener más información, consulta este instructivo.

Soluciona problemas

Soluciona problemas de operaciones de importación

Problema Soluciona problemas
HTTP Error 409: Operation failed because another operation was already in progress. Ya existe una operación pendiente para la instancia. Solo se permite una operación a la vez. Prueba tu solicitud después de que se complete la operación actual.
La operación de importación está tomando demasiado tiempo. Hay demasiadas conexiones activas que pueden interferir en las operaciones de importación.

Cierra las operaciones sin usar. Verifica el uso de CPU y memoria de la instancia de Cloud SQL para asegurarte de que haya muchos recursos disponibles. La mejor manera de garantizar la cantidad máxima de recursos para la importación es reiniciar la instancia antes de comenzar la operación.

Cuando se realiza un reinicio, sucede lo siguiente:

  • Se cierran todas las conexiones.
  • Finaliza cualquier tarea que pueda consumir recursos.
Una operación de importación puede fallar cuando uno o más usuarios a los que se hace referencia en el archivo de volcado no existen. Antes de importar un archivo de volcado, todos los usuarios de la base de datos que poseen objetos o que recibieron permisos sobre los objetos en la base de datos de volcado deben existir en la base de datos de destino. Si este no es el caso, la operación de importación no puede volver a crear los objetos con la propiedad o los permisos originales.

Crea los usuarios de la base de datos antes de realizar la importación.

Discrepancia de LSN El orden de importación de las copias de seguridad del registro de transacciones es incorrecto o la cadena del registro de transacciones está rota.
Importa las copias de seguridad del registro de transacciones en el mismo orden que las de la tabla de conjunto de copias de seguridad.
Filtre los datos con anticipación Este error indica que el primer registro en el archivo de registro de transacciones es después de la marca de tiempo StopAt. Por ejemplo, si el primer registro en el archivo de registro de transacciones es 2023-09-01T12:00:00 y el campo StopAt tiene un valor de 2023-09-01T11:00:00, entonces: Cloud SQL muestra este error.
Asegúrate de utilizar la marca de tiempo de StopAt correcta y el archivo de registro de transacciones correcto.

Soluciona problemas de operaciones de exportación

Problema Soluciona problemas
HTTP Error 409: Operation failed because another operation was already in progress. Ya existe una operación pendiente para la instancia. Solo se permite una operación a la vez. Prueba tu solicitud después de que se complete la operación actual.
HTTP Error 403: The service account does not have the required permissions for the bucket. Asegúrate de que el bucket exista y que la cuenta de servicio de la instancia de Cloud SQL (que realiza la exportación) tenga el rol Storage Object Creator (roles/storage.objectCreator) para permitir la exportación al bucket. Consulta Roles de IAM para Cloud Storage.
Deseas que las exportaciones sean automáticas. Cloud SQL no proporciona una forma de automatizar las exportaciones.

Podrías compilar tu propio sistema de exportación automatizado usando productos de Google Cloud, como Cloud Scheduler, Pub/Sub y funciones de Cloud Run, similar a este artículo sobre cómo automatizar las copias de seguridad.

¿Qué sigue?