Prácticas recomendadas para importar y exportar
A continuación se indican algunas prácticas recomendadas que se deben tener en cuenta a la hora de importar y exportar datos:
- No uses segmentos de pagos del solicitante de Cloud Storage
- Comprimir datos para reducir costes.
- Reducir los procesos de importación y exportación de larga duración
- Usar la utilidad bcp para importar y exportar datos
- Usar la inserción en bloque para importar datos
- Usar SqlPackage para importar y exportar datos
- Usar la importación y exportación de franjas
- Verificar la base de datos importada
No uses segmentos de Cloud Storage con la opción Peticionario paga
No puedes usar un segmento de Cloud Storage que tenga habilitada la opción Pago por el solicitante para importar y exportar datos de Cloud SQL.
Comprimir datos para reducir costes
Cloud SQL admite la importación y exportación de archivos comprimidos y sin comprimir. La compresión puede ahorrar una cantidad significativa de espacio de almacenamiento en Cloud Storage y reducir los costes de almacenamiento, sobre todo cuando exportas instancias grandes.
Cuando exportes un archivo BAK, usa una .gz
extensión de archivo para comprimir los datos. Cuando importas un archivo con la extensión .gz
, se descomprime automáticamente.
Reducir los procesos de importación y exportación de larga duración
Las importaciones en Cloud SQL y las exportaciones desde Cloud SQL pueden tardar mucho tiempo en completarse, dependiendo del tamaño de los datos que se estén procesando. Esto puede tener los siguientes efectos:
- No puedes detener una operación de instancia de Cloud SQL de larga duración.
- Solo puedes realizar una operación de importación o exportación a la vez en cada instancia. Además, las importaciones o exportaciones de larga duración bloquean otras operaciones, como las copias de seguridad automáticas diarias.
Puedes reducir el tiempo necesario para completar cada operación usando 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, generalmente debe usar archivos BAK en lugar de archivos SQL para las importaciones. Por lo general, la importación desde un archivo SQL tarda mucho más que la importación desde un archivo BAK.
Usar SqlPackage para importar y exportar datos
Puede importar y exportar datos en Cloud SQL mediante SqlPackage. Te permite exportar una base de datos SQL, incluidos el esquema de la base de datos y los datos de usuario, a un archivo BACPAC (.bacpac) e importar el esquema y los datos de la tabla de un archivo BACPAC a una nueva base de datos de usuario.
SqlPackage usa tus credenciales para conectarse a SQL Server y realizar importaciones y exportaciones de bases de datos. Permite que todos los usuarios de Cloud SQL puedan realizar migraciones. Para realizar operaciones de importación y exportación, debes tener lo siguiente:
Una estación de trabajo conectada a tu instancia en la que puedas 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 cómo configurar las credenciales, consulta el artículo Cómo autenticarse en 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
Aquí
mySourceFile
es un archivo de origen que quieres usar como origen de la acción del almacenamiento local. Si usa este parámetro, no se puede usar ningún otro parámetro de origen.myTargetServer
es el nombre del servidor que aloja la base de datos de destino.myUsername
es el nombre de usuario de SQL Server que quieres 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
Aquí
myTargetFile
es el archivo de destino (un archivo .dacpac) que quieres usar como destino de la acción en lugar de una base de datos. Si usa este parámetro, no se puede usar ningún otro parámetro de destino. Este parámetro no es válido para las acciones que solo admiten destinos de bases de datos.myUsername
es el nombre de usuario de SQL Server que quieres 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.
Usar la utilidad bcp para importar y exportar datos
Otra opción para importar y exportar datos en Cloud SQL es usar la utilidad del programa de copia masiva (bcp). Con la utilidad bcp, puede exportar datos de una base de datos de SQL Server a un archivo de datos e importar datos de un archivo de datos a una base de datos de SQL Server. La utilidad bcp usa tus credenciales para conectarse a SQL Server y realizar importaciones y exportaciones de bases de datos. Permite que todos los usuarios de Cloud SQL puedan hacer transferencias. Para realizar operaciones de importación y exportación, debes tener 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 cómo configurar las credenciales, consulta el artículo Cómo autenticarse en 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
Aquí
myLoginID
es el ID de inicio de sesión que se usa para conectarse a SQL Server.myServer
es la instancia de SQL Server a la que quieres conectarte. Si no especifica un servidor, la utilidad bcp se conecta a la instancia predeterminada de SQL Server en el equipo 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
Aquí
myLoginID
es el ID de inicio de sesión que se usa para conectarse a SQL Server.myServer
es la instancia de SQL Server a la que quieres conectarte. Si no especifica un servidor, la utilidad bcp se conecta a la instancia predeterminada de SQL Server en el equipo local.
Para obtener más información, consulta la documentación de Microsoft.
Usar la inserción en bloque 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:
- Roles y permisos necesarios
- Consideraciones al usar la inserción en bloque
- Realizar inserciones en bloque
- Ver los datos importados
- Inhabilitar la inserción masiva
Roles y permisos necesarios
Para configurar la inserción en bloque, necesitas lo siguiente:
- El permiso
CONTROL
en la base de datos a la que quieras 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.
También puedes usar los siguientes roles:
Storage Object Viewer
Storage Object Creator
para escribir registros de errores y ejemplos de datos incorrectos.
Para usar la inserción en bloque, necesitas lo siguiente:
- El permiso
EXECUTE
en el procedimiento almacenadomsdb.dbo.gcloudsql_bulk_insert
. Cloud SQL crea el procedimiento almacenado después de que se habilite la inserción masiva en la instancia. Cloud SQL concede el permisoEXECUTE
a la cuenta de administradorsqlserver
de forma predeterminada. - El permiso
INSERT
en el objeto al que quieras importar los datos.
Para obtener más información sobre cómo crear usuarios para la inserción en bloque, consulta Crear y gestionar usuarios.
Consideraciones al usar la inserción masiva
En esta sección se ofrecen recomendaciones para gestionar la seguridad, el rendimiento y la fiabilidad de las instancias al usar la inserción masiva.
Seguridad
Cloud SQL encripta y almacena la clave de acceso y el secreto de HMAC en una instancia como credencial de ámbito de base de datos. No se puede acceder a sus valores una vez que se han guardado. Para eliminar la clave y el secreto de una instancia, puedes eliminar la credencial con ámbito de base de datos mediante un comando T-SQL. Si creas alguna copia de seguridad mientras la clave y el secreto están almacenados en la instancia, esa copia de seguridad contendrá la clave y el secreto. También puedes invalidar la clave desactivándola y eliminándola.
Las siguientes operaciones pueden transferir por error 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.
- Restauración a partir de una copia de seguridad: la clave y el secreto están disponibles en la instancia restaurada a partir de una copia de seguridad.
Te recomendamos que elimines 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 segmento de Cloud Storage. Si quieres proteger los datos a los que tiene acceso la inserción masiva, configura Controles de Servicio de VPC.
Rendimiento
Te recomendamos que hagas lo siguiente para mitigar los efectos en el rendimiento al usar la inserción masiva:
- Pruebe y defina un valor adecuado para
@batchsize
porque, de forma predeterminada, todos los datos se importan en un solo lote. - En el caso de las inserciones de gran tamaño, inhabilita los índices temporalmente para acelerar la inserción de datos.
- Si es posible, usa la opción
@tablock
, ya que puede reducir la contención y aumentar el rendimiento de la carga de datos. - Usa el parámetro
@ordercolumnsjson
para especificar los datos ordenados según el orden del índice agrupado. Esto ayuda a mejorar el rendimiento de las instancias.
Fiabilidad
Te recomendamos que hagas lo siguiente para mitigar el impacto en la fiabilidad de las instancias al usar la inserción masiva:
- Si se produce un error y se usa
@batchsize
, los datos se cargarán parcialmente. Puede que tengas que limpiar estos datos manualmente en tu instancia. - Usa la opción
@errorfile
para mantener un registro de los errores y ejemplos de datos incorrectos detectados durante el proceso de carga. De esta forma, es más fácil identificar las filas que no se han cargado.
Realizar inserciones en bloque
Puede realizar la operación de inserción en bloque con el siguiente procedimiento almacenado:
msdb.dbo.gcloudsql_bulk_insert
Para obtener más información, consulta Procedimiento almacenado para usar la inserción masiva.
Ejemplo: Importar datos de un archivo de Cloud Storage y especificar un archivo de errores
1. Habilitar la inserción en bloque
Para habilitar la inserción en bloque 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
Sustituye INSTANCE_NAME
por el nombre de la instancia que quieras usar para la inserción en bloque.
Para obtener más información, consulta el artículo sobre cómo configurar marcas de bases 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 de ejecución a la cuenta de administrador sqlserver
.
2. Crear una clave HMAC
Necesitas una clave HMAC para acceder a tu segmento de Cloud Storage. Te recomendamos que crees una clave HMAC para una cuenta de servicio y que le concedas permisos a la cuenta de servicio para los segmentos que quieras usar para la inserción masiva. Para obtener más información y conocer las consideraciones de seguridad, consulta Consideraciones al usar la inserción en bloque.
3. Crear datos de muestra para importar
Con un editor de texto, crea un archivo con codificación ANSI o UTF-16 que contenga los siguientes datos de ejemplo. Guarda el archivo en tu segmento de Cloud Storage y asígnale el nombre
bulkinsert.bcp
, por ejemplo.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 segmento de Cloud Storage y asígnale el nombre
bulkinsert.fmt
, por ejemplo. Para obtener más información sobre los archivos en formato XML y no XML en SQL Server, consulta el artículo Crear 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. Ejecutar el procedimiento almacenado
Conéctate a tu instancia con el usuario
sqlserver
y crea una base de datos y una tabla de ejemplo para la inserción en bloque.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 de ámbito de base de datos y una fuente de datos externa. Define 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 almacenado de inserción en bloque para importar los datos de ejemplo.
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"}]'
Ver los datos importados
Para ver los datos importados, puede usar uno de los siguientes métodos:
Ejecuta la siguiente consulta:
SELECT * FROM dbo.myfirstimport
Cloud SQL añade un registro de este procedimiento al registro de errores de SQL. Puedes ver esto en Cloud Logging. También puedes consultar esta información en los datos del registro de errores de SQL en SQL Server Management Studio (SSMS).
Inhabilitar la inserción en bloque
Para inhabilitar la inserción en bloque, quite la marca cloud sql enable bulk insert
:
gcloud sql instances patch INSTANCE_NAME --database-flags="cloudsql enable bulk insert"=off
Sustituye INSTANCE_NAME
por el nombre de la instancia en la que quieras quitar la inserción masiva.
También puedes ejecutar el siguiente comando para borrar todas las marcas de la base de datos:
gcloud sql instances patch INSTANCE_NAME --clear-database-flags
Sustituye INSTANCE_NAME
por el nombre de la instancia en la que quieras quitar la inserción masiva.
Usar la importación y exportación segmentadas
Cuando realizas una importación o exportación segmentada, reduces el tiempo que tarda en completarse la operación y puedes importar y exportar bases de datos de más de 5 TB. Para obtener más información, consulta Exportar e importar con archivos BAK.
Verificar la base de datos importada
Una vez que se haya completado la operación de importación, conéctate a tu base de datos y ejecuta los comandos de base de datos adecuados para asegurarte de que el contenido sea correcto. Por ejemplo, conecta y muestra las bases de datos, las tablas y las entradas específicas.
Limitaciones conocidas
Para ver una lista de las limitaciones conocidas, consulta el artículo Problemas al importar y exportar datos.
Automatizar las operaciones de exportación
Aunque Cloud SQL no ofrece una forma integrada de automatizar las exportaciones de bases de datos, puedes crear tu propia herramienta de automatización con varios Google Cloud componentes. Para obtener más información, consulta este tutorial.
Solución de problemas
Solucionar problemas con operaciones de importación
Problema | Solución de problemas |
---|---|
HTTP Error 409: Operation failed because another operation was already in progress . |
Ya hay una operación pendiente en tu instancia. Solo se puede realizar una operación a la vez. Prueba a enviar la solicitud después de que se complete la operación en curso. |
La operación de importación está tardando demasiado. | Demasiadas conexiones activas pueden interferir en las operaciones de importación.
Cierra las operaciones que no se utilicen. Comprueba el uso de CPU y memoria de tu instancia de Cloud SQL para asegurarte de que hay suficientes recursos disponibles. La mejor forma de asegurarte de que dispones del número máximo de recursos para llevar a cabo la importación es reiniciar la instancia antes de comenzar la operación. Reiniciar:
|
Una operación de importación puede fallar cuando no existen uno o varios de los usuarios a los que se hace referencia en el archivo de volcado. | Antes de importar un archivo de volcado, todos los usuarios de bases de datos que sean propietarios de objetos o a los que se les hayan concedido permisos sobre objetos de la base de datos de volcado deben existir en la base de datos de destino. Si no lo hacen, la operación de importación no podrá volver a crear los objetos con la propiedad o los permisos originales.
Crea los usuarios de la base de datos antes de importar. |
LSN no coincide | El orden de importación de las copias de seguridad del registro de transacciones es incorrecto o la cadena del registro de transacciones está dañada. Importa las copias de seguridad del registro de transacciones en el mismo orden que en la tabla de conjuntos de copias de seguridad. |
StopAt demasiado pronto | Este error indica que el primer registro del archivo de registro de transacciones es posterior a la marca de tiempo StopAt . Por ejemplo, si el primer registro del archivo de registro de transacciones es 2023-09-01T12:00:00 y el campo StopAt tiene el valor 2023-09-01T11:00:00, Cloud SQL devuelve este error.Asegúrate de usar la StopAt marca de tiempo y el archivo de registro de transacciones correctos. |
Solucionar problemas de operaciones de exportación
Problema | Solución de problemas |
---|---|
HTTP Error 409: Operation failed because another operation was
already in progress. |
Ya hay una operación pendiente en tu instancia. Solo se puede realizar una operación a la vez. Prueba a enviar la solicitud después de que se complete la operación en curso. |
HTTP Error 403: The service account does not have the required
permissions for the bucket. |
Asegúrate de que el segmento exista y de 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 segmento. Consulta los roles de gestión de identidades y accesos para Cloud Storage. |
Quieres que las exportaciones se automaticen. | Cloud SQL no ofrece ninguna forma de automatizar las exportaciones.
Puedes crear tu propio sistema de exportación automatizado con productos como Cloud Scheduler, Pub/Sub y funciones de Cloud Run, de forma similar a lo que se explica en este artículo sobre la automatización de copias de seguridad. Google Cloud |
Siguientes pasos
- Consulta cómo importar y exportar datos con archivos BAK.
- Consulta cómo importar datos con archivos de volcado de SQL.
- Consulta cómo habilitar las copias de seguridad automáticas.
- Consulta cómo restaurar datos a partir de copias de seguridad.