Não encontrou o que procurava? Dê uma olhada nessas páginas!

Blog

Compartilhando base de dados SQL através de Scripting

07 de Junho de 2017
Por Dennis Piccioni

Um dos desafios operacionais que surgem quando desenvolvemos e distribuímos aplicações DataFlex com base de dados do SQL Server é mover dados entre diferentes versões ou configurações do servidor de banco de dados da Microsoft , muitas vezes enquanto a base de dados está rodando em ambiente de produção. "Scripting" é uma técnica que pode ser utilizada para superar este desafio.

Scripting é um processo que gera um arquivo texto de script utilizando a linguagem Transact-SQL (a versão Microsoft Server do SQL), que pode ser visto e editado com o SQL Server Management Studio ou outro editor de texto qualquer e importado em qualquer instância do SQL Server. O arquivo de texto gerado pode incluir todas as partes de uma base de dados, o schema (estrutura do banco de dados) ou apenas os seus dados.

Nós veremos como utilizar o script abaixo. Aqui está um resumo do que esse script faz e alguns exemplos de situações onde eles podem ser utilizados:

  • O arquivo de texto de script gerado inclui todas as configurações padrões da instância do SQL Server onde o script é executado, o que é o que você geralmente vai querer. O script pode ser importado em outra instância do SQL Server com a mesma ou diferente configuração. Você pode, por exemplo, querer copiar uma base de dados de um PC de desenvolvimento rodando o SQL Server Express para o ambiente de homologação de um cliente que está rodando um SQL Server Enterprise, com possivelmente numerosas políticas de banco de dados implementadas pelo administrador do banco de dados. A utilização deste simples script criará a nova base de dados no servidor Enterprise utilizando todas as políticas já configuradas naquela instância do servidor.
  • As opções "Script for Server Version" e "Script for the database engine edition" fazem modificações no script para compatibilidade com instâncias do SQL Server específicas onde os dados serão instalados. Estas opções de script são úteis, já que elas podem solucionar incompatibilidades entre versões que poderiam limitar a migração de dados de uma instância nova do SQL Server para uma instância mais velha.
  • Outros ajustes podem ser feitos para variações entre servidoes de origem e destino. Por exemplo, se a base de dados atual está em uma edição paga do SQL Server e você quer importá-la em uma edição Express gratuita, durante a criação do script, você pode alterar o destino padrão de "Microsoft SQL Server Standard Edition" para "Microsoft SQL Server Express Edition".

Agora que já temos um pouco de conhecimento sobre os usos do Scripting, vamos olhar como ele é feito.

Microsoft SQL Server é o assunto deste blog. A Data Access Worldwide recomenda a instalação e uso do SQL Server Management Studio (SSMS) da Microsoft com o SQL Server, pelo menos no seu PC de desenvolvimento. É uma ótima ferramenta visual, gratuita, que funciona com todas as versões/edições do Microsoft SQL Server, incluindo a edição Express.

Gerar um Script no SQL Server Management Studio

Com o SQL Server Managament Studio, você tem uma série de opções de Scripting que podem ser selecionadas através dos seguintes passos:

  1. Abra o SQL Server Management Studio (SSMS)
  2. Expanda Databases
  3. Selecione a base de dados para o script
  4. Clique com o botão direito do mouse e selecione Tasks > Generate Scripts
  5. Na página Choose Objects, deixe a opção padrão "Script entire database and all database objects" selecionada
  6. Na página "Specify how scripts should be saved or published", clique no botão Advanced
  7. A última seleção no grupo General é "Types of data to script". Altere para "Schema and data"
  8. Se você sabe que enviará isso para alguém com uma versão mais antiga do SQL Server, altere a propriedade "Script for Server Version" para a versão do SQL Server necessária (por isso eu criei 2 versões deste script)
  9. Clique em Ok
  10. Altere o local onde você deseja gerar o script
  11. Clique em Next e depois em Next novamente. Neste ponto, o script será gerado

Se você deseja visualizar ou editar o arquivo de script, eu recomendo o uso do Management Studio, pois ele dá um controle de contexto através de cores e nele você também pode testar qualquer script (seja cuidadoso para não apagar ou sobrescrever dados que você deseja preservar).

Caminhos

Você deve ter notado que o script contém o caminho completo para os arquivos da base de dados:


CREATE DATABASE [Chinook]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N’Chinook’, FILENAME = N’C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS16\MSSQL\DATA\Chinook.mdf’ , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
LOG ON
( NAME = N’Chinook_log’, FILENAME = N’C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS16\MSSQL\DATA\Chinook_log.ldf’ , SIZE = 73728KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
GO

Embora o Transact-SQL suporte a alteração disto, o assistente que gera o script não o faz, portanto você pode alterar o script, caso o caminho seja diferente no ambiente onde você o executará.

Uma pequena alteração é substituir o script acima por:


CREATE DATABASE [Chinook]
GO

Isto irá gerar a base de dados na instância do SQL Server onde o script for executado, utilizando todas as configurações padrões daquela instância, coisa que você provavelmente quer manter.

Opções

Você pode modificar alguns dos passos, conforme necessário. Alguns exemplos:

  • Você pode modificar as opções "Script DROP and CREATE" no passo 7 do padrão "Script CREATE" para "Script DROP and CREATE". Isto mudaria o script para remover a base de dados antes de criá-la novamente, caso ela já exista no momento em que o script for executado.
  • Às vezes o script que você está gerando é destinado a múltiplas versões ou edições ou a versão ou edição não é conhecida no momento. Se a instância de destino for indefinida, sua melhor escolha é criar um script para menor denominador comum, o que significa a versão e edição mais baixa esperada.
  • Pode ser possível também que a base de dados para a qual você deseja criar o script requer uma revisão ou edição mínimas por causa de sua estrutura. Se você tentar criar o script para uma versão ou edição que não suporta a estrutura da base de dados, o processo de geração do script gerará erros. Se isto acontecer, você pode selecionar uma nova versão ou uma edição mais adequada e gerar o script baseado nesta combinação mínima.
  • Você pode também utilizar esta técnica para rapidamente duplicar uma base de dados para testes. Execute o assistente Generate Script, salve o script numa nova janela no Management Studio, substitua o nome da base de dados (substitua [Chinook] por [Chinook2], por exemplo) e execute o script.

Chinook é uma base de dados de testes bastante conhecida e disponível para download.

As coisas que você pode fazer no SQL Server com as ferramentas fornecidas e Transact-SQL são das mais diversas e podem ser também bastante complexas. Esta é uma forma simples e eficiente para possibilitar que você transfira ou mesmo faça um backup de base de dados SQL.

Limitações

Há limitações na técnica de Scripting. Por exemplo, ela pode não funcionar em base de dados muito grandes.

Mike Steffano e Sean Bamforth do Austin Programmers Group precisaram copiar uma base de dados de 5 GB do SQL Server 2016 para SQL Server 2012. Eles utilizaram o assistente de Scripting no SSMS, porém nem mesmo a versão 64-bits do SQL Server Management Studio foi capaz de carregar completamente o arquivo de script ou importar os dados no SQL Server de destino utilizando ferramentas de linha de comando. Após a tentativa de diversas soluções, incluindo ferramentas de terceiros, a solução foi gerar scripts de uma tabela por vez.

Assim como em muitas técnicas e ferramentas, nem todas as soluções funcionam em todos os cenários. Existem muita técnicas e ferramentas para trabalhar com dados SQL, tais como backup e restore, e replicação, etc.

Para as situações típicas de desenvolvimento e testes, Scripting é uma ferramenta excelente e flexível para você manter no seu cinto de utilidades.