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
- Comprime los datos para reducir los costos.
- Reduce los procesos de importación y exportación de larga duración
- Usa la utilidad bcp para importar y exportar datos.
- Usa la inserción masiva para importar datos
- Usa SqlPackage para importar y exportar datos
- Utiliza la importación y la exportación seccionadas
- Verifica la base de datos importada
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
- Consideraciones para usar la inserción masiva
- Realiza la inserción masiva
- Consulta los datos importados
- Inhabilita la inserción masiva
Roles 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
ystorage.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 almacenadomsdb.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 permisoEXECUTE
a la cuenta de administradorsqlserver
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
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
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
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 );
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 );
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:
|
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?
- Obtén más información para importar y exportar datos mediante archivos BAK.
- Obtén información sobre cómo importar datos mediante archivos de volcado de SQL.
- Obtén más información sobre cómo habilitar las copias de seguridad automáticas.
- Más información sobre cómo restablecer desde una copia de seguridad