Práticas recomendadas para importação e exportação de dados

Esta página informa as práticas recomendadas para importar e exportar dados com o Cloud SQL. Para instruções passo a passo sobre como importar dados para o Cloud SQL, consulte Importar dados. Para instruções passo a passo sobre como exportar seus dados, seja no Cloud SQL ou em uma instância que você gerencia, consulte Exportar dados.

Práticas recomendadas para importação e exportação

Veja a seguir as práticas recomendadas a serem consideradas ao importar e exportar dados:

Não use os buckets dos pagamentos do solicitante do Cloud Storage

Não é possível usar um bucket do Cloud Storage que tem a opção Pagamentos do solicitante ativada para operações de importação e exportação do Cloud SQL.

Compacte dados para reduzir custos

O Cloud SQL permite a importação e exportação de arquivos compactados e não compactados. A compactação pode economizar um espaço de armazenamento significativo no Cloud Storage e reduzir os custos com armazenamento, principalmente durante a exportação de grandes instâncias.

Ao exportar um arquivo BAK, use uma extensão de arquivo .gz para compactar os dados. Ao importar um arquivo com uma extensão de .gz, ele é descompactado automaticamente.

Reduzir processos de importação e exportação de longa duração

A conclusão das importações para o Cloud SQL e as exportações para fora dele pode levar muito tempo, dependendo do tamanho dos dados que estão sendo processados. Esse processo pode ter os seguintes impactos:

  • Não é possível interromper uma operação de instância do Cloud SQL de longa duração.
  • Será possível executar apenas uma operação de importação ou exportação por vez para cada instância, e uma importação ou exportação de longa duração bloqueará outras operações, por exemplo, backups automatizados diários.

É possível diminuir o tempo necessário para concluir cada operação usando a função de importação ou exportação do Cloud SQL com lotes menores de dados.

Para migrações de banco de dados inteiras, geralmente é necessário usar arquivos BAK em vez de arquivos SQL para importações. Geralmente, a importação de um arquivo SQL leva muito mais tempo do que a importação de um arquivo BAK.

Use o SqlPackage para importar e exportar dados.

É possível importar e exportar dados no Cloud SQL usando SqlPackage. Ele permite exportar um banco de dados SQL, incluindo dados de usuários e esquemas de banco de dados, para um arquivo BACPAC (.bacpac) e importar o esquema e os dados da tabela de um arquivo BACPAC para um novo banco de dados do usuário.

O SqlPackage usa suas credenciais para se conectar ao SQL Server e realizar importações e exportações de bancos de dados. Ele disponibiliza migrações para todos os usuários do Cloud SQL. Para realizar operações de importação e exportação, é necessário ter o seguinte:

  • Uma estação de trabalho conectada à sua instância, em que é possível executar o SqlPackage. Para saber mais sobre as opções de conectividade, consulte o artigo Sobre as opções de conexão.

  • O SqlPackage está instalado no sistema. Para saber mais sobre o download e a instalação do SqlPackage, consulte a documentação da Microsoft.

  • Credenciais configuradas para acessar sua instância. Para saber mais sobre a configuração de credenciais, consulte Como autenticar no Cloud SQL.

.

Exemplos

Importar

Para importar dados para um banco de dados AdventureWorks2017, execute o seguinte 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

Aqui,

  • mySourceFile é um arquivo de origem que você quer usar como origem da ação do armazenamento local. Se você usar esse parâmetro, nenhum outro parâmetro de origem será válido.
  • myTargetServer é o nome do servidor que hospeda o banco de dados de destino.
  • myUsername é o nome de usuário do SQL Server que você quer usar para acessar o banco de dados alvo.
  • myPassword é sua senha nas credenciais.

Para saber mais, consulte a documentação da Microsoft.

Exportar

Para exportar dados de um banco de dados AdventureWorks2017, execute o seguinte 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

Aqui,

  • myTargetFile é o arquivo alvo (um arquivo .dacpac) que você quer usar como destino da ação, em vez de um banco de dados. Se você usar esse parâmetro, nenhum outro parâmetro alvo será válido. Esse parâmetro é inválido para ações que oferecem suporte apenas a alvos de banco de dados.
  • myUsername é o nome de usuário do SQL Server que você quer usar para acessar o banco de dados de origem.
  • mySourceServer é o nome do servidor que hospeda o banco de dados de origem.
  • myPassword é sua senha nas credenciais.

Para saber mais, consulte a documentação da Microsoft.

Use o utilitário bcp para importar e exportar dados

Outra opção para importar e exportar dados no Cloud SQL é usar o utilitário de cópia em massa do programa (bcp). Ao usar o utilitário bcp, é possível exportar dados de um banco de dados do SQL Server para um arquivo de dados e importar dados de um arquivo de dados para um banco de dados do SQL Server. O utilitário bcp usa suas credenciais para se conectar ao SQL Server para realizar importações e exportações de bancos de dados. Ele disponibiliza as transferências para todos os usuários do Cloud SQL. Para realizar operações de importação e exportação, é necessário ter o seguinte:

  • Uma estação de trabalho em que é possível executar o utilitário bcp. Ela tem conectividade com a instância do Cloud SQL. Para saber mais sobre as opções de conectividade, consulte o artigo Sobre as opções de conexão.

  • O utilitário bcp instalado no seu sistema. Para saber mais sobre como fazer o download e instalar o bcp, consulte a documentação da Microsoft.

  • Credenciais configuradas para acessar sua instância. Para saber mais sobre a configuração de credenciais, consulte Como autenticar no Cloud SQL.

Exemplos

Importar

Para importar dados do arquivo person.csv para a tabela Person do banco de dados AdventureWorks2017, execute o seguinte comando:

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

Aqui,

  • myLoginID é o ID de login usado para se conectar ao SQL Server.
  • myServer é a instância do SQL Server a que você quer se conectar. Se você não especificar um servidor, o utilitário bcp se conectará à instância padrão do SQL Server no computador local.

Para saber mais, consulte a documentação da Microsoft.

Exportar

Para exportar dados da tabela Person do banco de dados AdventureWorks2017 para o arquivo person.dat, execute o seguinte comando:

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

Aqui,

  • myLoginID é o ID de login usado para se conectar ao SQL Server.
  • myServer é a instância do SQL Server a que você quer se conectar. Se você não especificar um servidor, o utilitário bcp se conectará à instância padrão do SQL Server no computador local.

Para saber mais, consulte a documentação da Microsoft.

Usar a inserção em massa para importar dados

Com a inserção em massa, é possível importar dados para o banco de dados do Cloud SQL para SQL Server de um arquivo armazenado no Cloud Storage.

Esta seção descreve:

Papéis e permissões necessárias

Para configurar a inserção em massa, você precisa do seguinte:

  • A permissão CONTROL no banco de dados para onde você quer importar os dados.
  • Uma chave de acesso HMAC e um secret mapeado para uma conta do IAM com as seguintes permissões:

    • storage.buckets.get
    • storage.objects.create e storage.multipartUploads.create para gravar registros de erro e exemplos de dados inválidos.

    Como alternativa, você também pode usar os seguintes papéis:

    • Storage Object Viewer
    • Storage Object Creator para gravar registros de erros e exemplos de dados inválidos.

Para usar a inserção em massa, você precisa do seguinte:

  • A permissão EXECUTE no procedimento armazenado msdb.dbo.gcloudsql_bulk_insert. O Cloud SQL cria o procedimento armazenado depois que a inserção em massa é ativada na instância. O Cloud SQL concede a permissão EXECUTE à conta de administrador sqlserver por padrão.
  • A permissão INSERT no objeto para onde você quer importar os dados.

Para mais informações sobre como criar usuários para inserção em massa, consulte Criar e gerenciar usuários.

Considerações ao usar a inserção em massa

Esta seção apresenta recomendações para lidar com segurança, desempenho e confiabilidade em instâncias ao usar a inserção em massa.

Segurança

O Cloud SQL criptografa e armazena a chave de acesso e o secret do HMAC em uma instância como uma credencial com escopo de banco de dados. Não será possível acessar os valores depois que eles forem salvos. É possível excluir a chave e o secret de uma instância descartando a credencial com escopo do banco de dados usando um comando T-SQL. Se você fizer um backup enquanto a chave e o secret estiverem armazenados na instância, esse backup conterá essa chave e chave secreta. Também é possível tornar a chave inválida desativando e excluindo a chave HMAC.

As operações a seguir podem transferir acidentalmente a chave de acesso e o secret e disponibilizá-los:

  • Clonar a instância: a chave e o secret ficam disponíveis na instância clonada.
  • Criação de uma réplica de leitura: a chave e o secret estão disponíveis na réplica de leitura criada.
  • Restauração de um backup: a chave e o secret estão disponíveis na instância restaurada de um backup.

Recomendamos que você descarte a chave e o secret da instância de destino após realizar essas operações.

A inserção em massa pode gravar dados que não pode analisar em um arquivo armazenado em um bucket do Cloud Storage. Se você quiser proteger os dados aos quais a inserção em massa tem acesso, configure o VPC Service Controls.

Desempenho

Recomendamos que você faça o seguinte para reduzir os impactos no desempenho ao usar a inserção em massa:

  • Teste e defina um valor apropriado para @batchsize porque, por padrão, todos os dados são importados em um único lote.
  • Em caso de inserções grandes, desative os índices temporariamente para acelerar a inserção de dados.
  • Se possível, use a opção @tablock, porque isso pode reduzir a contenção e aumentar o desempenho do carregamento de dados.
  • Use o parâmetro @ordercolumnsjson para especificar os dados classificados na ordem do índice em cluster. Isso ajuda a melhorar o desempenho da instância.
Confiabilidade

Recomendamos que você faça o seguinte para reduzir o impacto na confiabilidade da instância ao usar a inserção em massa:

  • Se ocorrer uma falha e o @batchsize for usado, isso poderá levar a dados parcialmente carregados. Talvez seja necessário limpar manualmente esses dados na instância.
  • Use a opção @errorfile para manter um registro de erros e exemplos de dados incorretos detectados durante o processo de carregamento. Isso facilita a identificação das linhas que apresentaram falha no carregamento.

Realizar a inserção em massa

Você pode executar a operação de inserção em massa usando o seguinte procedimento armazenado:

msdb.dbo.gcloudsql_bulk_insert

Para mais informações, consulte Procedimento armazenado para usar a inserção em massa.

Exemplo: importar dados de um arquivo no Cloud Storage e especificar um arquivo de erro
1. Ativar a inserção em massa

Para ativar a inserção em massa na instância, ative a sinalização cloud sql enable bulk insert.

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

Substitua INSTANCE_NAME pelo nome da instância que você quer usar para a inserção em massa.

Para mais informações, consulte Configurar sinalizações do banco de dados.

Depois de ativar essa sinalização na instância, o Cloud SQL instala o procedimento armazenado de inserção em massa na instância e concede à conta de administrador sqlserver permissões para execução.

2. Criar uma chave HMAC

Você precisa de uma chave HMAC para acessar seu bucket do Cloud Storage. Recomendamos que você crie uma chave HMAC para uma conta de serviço e conceda permissões à conta de serviço aos buckets que você quer usar para inserção em massa. Para mais informações e considerações sobre segurança, consulte Considerações ao usar a inserção em massa.

3. Criar dados de amostra para importar
  1. Usando um editor de texto, crie um arquivo com codificação ANSI ou UTF-16 que tenha os seguintes dados de amostra. Salve o arquivo no bucket do Cloud Storage e nomeie-o como bulkinsert.bcp, por exemplo.

    1,Elijah,Johnson,1962-03-21
    2,Anya,Smith,1982-01-15
    3,Daniel,Jones,1990-05-21
    
  2. Crie um arquivo de formato usando os dados de amostra a seguir. Salve o arquivo no bucket do Cloud Storage e nomeie-o como bulkinsert.fmt, por exemplo. Para mais informações sobre arquivos em formatos XML e não XML no SQL Server, consulte Criar um arquivo 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. Executar o procedimento armazenado
  1. Conecte-se à sua instância usando o usuário sqlserver e crie um banco de dados e uma tabela de amostra para inserção em massa.

    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. Crie uma chave mestra do banco de dados, uma credencial com escopo do banco de dados e uma fonte de dados externa. Defina a identidade 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. Execute o procedimento armazenado de inserção em massa para importar os dados de amostra.

    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"}]'
    
    

Visualizar os dados importados

É possível visualizar os dados importados usando um dos seguintes métodos:

  • Execute a seguinte consulta:

    SELECT * FROM dbo.myfirstimport
    
  • O Cloud SQL adiciona um registro desse procedimento ao registro de erros do SQL. É possível visualizar isso no Cloud Logging. Também é possível ver isso nos dados de registro de erros do SQL no SQL Server Management Studio (SSMS).

Desativar a inserção em massa

Para desativar a inserção em massa, remova a sinalização cloud sql enable bulk insert:

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

Substitua INSTANCE_NAME pelo nome da instância de que você quer remover a inserção em massa.

Como alternativa, é possível executar o seguinte comando para limpar todas as sinalizações do banco de dados:

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

Substitua INSTANCE_NAME pelo nome da instância de que você quer remover a inserção em massa.

Usar importação e exportação distribuídas

Ao realizar uma importação ou exportação distribuída, você reduz o tempo necessário para que a operação seja concluída e permite que bancos de dados maiores que 5 TB sejam importados e exportados. Para mais informações, consulte Exportar e importar usando arquivos BAK.

Verificar o banco de dados importado

Após a conclusão de uma operação de importação, conecte-se ao seu banco de dados e execute os comandos apropriados para garantir que o conteúdo esteja correto. Por exemplo, conecte-se e liste os bancos de dados, tabelas e entradas específicas.

Limitações conhecidas

Para ver uma lista de limitações conhecidas, consulte Problemas com importação e exportação de dados.

Como automatizar operações de exportação

Embora o Cloud SQL não forneça uma maneira integrada de automatizar exportações de banco de dados, é possível criar sua própria ferramenta de automação usando vários componentes do Google Cloud. Para saber mais, consulte este tutorial.

Solução de problemas

Como solucionar problemas com as operações de importação

Problema Solução de problemas
HTTP Error 409: Operation failed because another operation was already in progress. Já existe uma operação pendente para sua instância. Só é permitida uma operação por vez. Tente fazer o pedido após a conclusão da operação atual.
A operação de importação está demorando muito. Muitas conexões ativas podem interferir nas operações de importação.

Feche operações não usadas. Verifique o uso de CPU e da memória da instância do Cloud SQL para garantir que haja muitos recursos disponíveis. A melhor maneira de garantir o máximo de recursos para a importação é reiniciar a instância antes de começar a operação.

Uma reinicialização:

  • fecha todas as conexões;
  • encerra todas as tarefas que possam estar consumindo recursos.
Uma operação de importação pode falhar quando um ou mais usuários referenciados no arquivo dump não existem. Antes de importar um arquivo dump, todos os usuários do banco de dados que têm objetos ou receberam permissões nos objetos no banco de dados despejado precisam existir no banco de dados de destino. Caso contrário, a operação de importação não recriará os objetos com a propriedade ou as permissões originais.

Crie os usuários do banco de dados antes de importar.

Incompatibilidade de LSN A ordem da importação de backups de registro de transações está incorreta ou a cadeia de registro de transações está corrompida.
Importe os backups de registro de transações na mesma ordem da tabela de conjuntos de backups.
Interrupção cedo demais Esse erro indica que o primeiro registro no arquivo de registro de transações é posterior ao carimbo de data/hora StopAt. Por exemplo, se o primeiro registro no arquivo de registro de transações estiver em 2023-09-01T12:00:00 e o campo StopAt tiver o valor 2023-09-01T11:00:00, o Cloud SQL retornará esse erro.
Use o carimbo de data/hora StopAt e o arquivo de registro de transações corretos.

Como solucionar problemas com as operações de exportação

Problema Solução de problemas
HTTP Error 409: Operation failed because another operation was already in progress. Já existe uma operação pendente para sua instância. Só é permitida uma operação por vez. Tente fazer o pedido após a conclusão da operação atual.
HTTP Error 403: The service account does not have the required permissions for the bucket. Verifique se o bucket existe e se a conta de serviço da instância do Cloud SQL (que está fazendo a exportação) tem o papel Storage Object Creator (roles/storage.objectCreator) para permitir a exportação para o bucket. Consulte Papéis do IAM para o Cloud Storage.
Você quer que as exportações sejam automatizadas. O Cloud SQL não oferece uma maneira de automatizar exportações.

É possível criar seu próprio sistema de exportação automatizada usando produtos do Google Cloud, como Cloud Scheduler, Pub/Sub e funções do Cloud Run, semelhante a este artigo sobre como automatizar backups.

A seguir