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
- Compacte dados para reduzir custos.
- Reduza processos de importação e exportação de longa duração
- Usar o utilitário bcp para importar e exportar dados
- Usar a inserção em massa para importar dados
- Usar o SqlPackage para importar e exportar dados
- Usar importação e exportação distribuídas
- Verificar o banco de dados importado
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
- Considerações ao usar a inserção em massa
- Realizar a inserção em massa
- Visualizar os dados importados
- Desativar a inserção em massa
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
estorage.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 armazenadomsdb.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ãoEXECUTE
à conta de administradorsqlserver
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.
Performance
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
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
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
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 );
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 );
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:
|
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 Cloud Functions, semelhante a este artigo sobre como automatizar backups. |
A seguir
- Saiba como importar e exportar dados usando arquivos BAK.
- Saiba como importar dados usando arquivos dump SQL.
- Saiba como ativar backups automáticos.
- Saiba como restaurar dos backups.