Não são raros os momentos em que um DBA precisa gerar script dos objetos de uma base de dados, seja para a criação de novos objetos, documentação ou até mesmo criação de novas bases de dados. O SQL Server nos oferece vários caminhos para gerar script dos objetos, entre eles, no Enterprise Manager podemos selecionar o menu Tools|Generate SQL Script, podemos clicar com o botão direito sobre a bse de dados, selecionar All Task e também teremos a opção Generate SQL Script. O problema é que este processo requer atenção e muitas das vezes o scripts devem ser gerados objeto a objeto, caso contrário poderemos ter problemas de dependências no momento de utilização dos scripts.
Bom, e se eu disser que existe um utilitário do SQL Server 7 e 2000 que permite gerar script de todos os objetos de uma base de forma simples e rápida?
O UTILITÁRIO SCPTXFR.EXE
O utilitário SCPTXFR.EXE é um utilitário de linha de comando disponível no SQL Server 7.0 e 2000. Em uma instalação padrão, ele pode ser encontrado no caminho C:/Program Files/Microsoft SQL Server/MSSQL/Upgrade. Com ele podemos gerar um script completo (tabelas, procedures, trigger, views, índices, usuários, permissões, etc…) de uma base de dados de forma automática.
Originalmente o SCPTXFR.EXE foi criado para facilitar ou permitir a migração de bases de dados do SQL Server 6.5 para o SQL Server 7.0 ou 2000, mas como veremos, ele pode ser muito útil em nosso dia-a-dia. Podendo inclusive ser utilizado para gerar scripts de databases do SQL Server 2005.
Nota: Caso o utilitário não esteja em sua instalação padrão, é possível copiá-lo do CD de instalação do SQL Server 2000 (qualquer edição) no caminho x86/upgrade. Neste caso, pode ser preciso copiar também o arquivo SCPTXFR.rll localizado no caminho x86/upgrade/res/1033. Se preferir, baixe o utilitário aqui.
COMO USAR O UTILITÁRIO
A utilização do utilitário SCPTXFR.EXE é muito simples. Para os exemplos abaixo, estarei assumindo que ele está localizado no caminho padrão C:/Program Files/Microsoft SQL Server/MSSQL/Upgrade.
O utilitário possui várias parâmetros os quais podem ser visualizados digitando SCPTXFR /? ou SCPTXFR -?. Os principais são:
/s <nome> Especifica o nome do servidor onde se encontra a base da qual será gerado o script
/d <nome> Especifica o nome da base da qual será gerado o script
/I Usa segurança integrada do Windows, utiliza as permissões o usuário logado no windows (trusted connections).
/P Especifica a senha para o login ‘sa’. Note que se a opção /I não for usada, o login ID sempre será ‘sa’.
/r Inclui a opção de DROP dos objetos no script
/F <caminho> Cria um arquivo separado para cada tipo de objeto. <caminho> deve finalizar com o nome do diretório onde os scripts deverão ser criados. Ao usar esta opção, o utilitário criará um arquivo para cada tipo de objeto no formato <servidor>.<database>.<extensão>. As principais extensões estão relacionadas no final deste artigo.
/f <nome> Cria um arquivo contendo o script de todos os objetos. <nome> deve finalizar com o nome do arquivo sobre o qual os scripts deverão ser salvos.
Nota: Esteja atendo a deixar sempre um espaço entre a opção e o parâmetro, caso contrário, a execução do comando falhará com a mensagem abaixo:
“Invalid command arguments”
Exemplo:
SCPTXFR /sSERVIDOR_X … — erro
SCPTXFR /s SERVIDOR_X … — correto
EXEMPLOS:
Segue abaixo alguns exemplos de utilização do utilitário.
Exemplo 1: Este exemplo gera o scripts de todos os objetos da base pubs no arquivo script_pubs.txt, incluindo o statement para exclusão dos objetos caso eles já existam.
C:/Program Files/Microsoft SQL Server/MSSQL/Upgrade/scptxfr.exe /s SERVSQL2000 /I /r /d pubs /f C:/temp/script_pubs.txt
Você também pode executar o utilitário via QA como no exemplo abaixo:
master..xp_cmdshell ‘”C:/Program Files/Microsoft SQL Server/MSSQL/Upgrade/scptxfr.exe” /s SERVSQL2000 /I /r /d pubs /f C:/temp/script_pubs.txt’
Exemplo 2: Este exemplo gera script de todos os objetos da base pubs no diretório C: emp, criando um arquivo separados para cada tipo de objeto.
C:/Program Files/Microsoft SQL Server/MSSQL/Upgrade/scptxfr.exe /s SERVSQL2000 /I /r /d pubs /F C:/temp
Você também pode executar o utilitário via QA como no exemplo abaixo:
master..xp_cmdshell ‘”C:/Program Files/Microsoft SQL Server/MSSQL/Upgrade/scptxfr.exe” /s SERVSQL2000 /I /r /d pubs /F C:/temp’
Exemplo 3: Assumindo que podemos executar o utilitário via QA, que tal uma procedure para gerar script de todas as bases do servidor? O exemplo abaixo cria um procedure que gera o script de todos os objetos para cada banco de dados existentes no servidor. Será criado um arquivo para cada banco de dados no formato <banco>_<data>.txt
CREATE PROCEDURE sp_usrscriptgeral @dbname sysname
as
declare @command varchar(1000)
declare @texttime varchar(10)
set @texttime = convert(varchar, getdate(), 102)
set @command = ‘”C:/Program Files/Microsoft SQL Server/MSSQL/Upgrade/scptxfr.exe” /s SERVSQL2000 /I /r /d ‘ + @dbname + ‘ /f C:/temp’ + @dbname + ‘_’ + @texttime + ‘.txt /r’
print @command
exec master..xp_cmdshell @command
— Executa a procedure para cada banco do servidor
exec sp_MSForeachDB “exec sp_usrscriptgeral ?”
EXTENSÕES DE ARQUIVOS GERADAS PELO UTILITÁRIO
Como dito acima, se você utilizar a opção /F, o utilitário estará gerando um arquivo separado para cada tipo de objeto existente no database. Ou seja, um arquivo para tabela com o script de DROP/CREATE das tabelas e assim para todos os demais objetos.
A lista abaixo relaciona a extensão dos principais tipos de objetos:
DEF: Script das defaults
DP1..n: Script de Drop das stored procedures
DR1: Script de Drop para objetos que não sejam stored procedures
FKY: Script das foreign keys
ID1..n: Script dos indexes
PRC: Script para criação das stored procedures
RUL: Script para criação das rules
TAB: Script para criação das tabelas
TRG: Script para criação das triggers
UDF: Script para criação das funções
UDT: Script para criação das User Defined types
USR: Script para criação dos usuários
VIW: Script para criação das views
LOG: Log de erros
Como vimos, o utilitário SCPTXFR.EXE é uma “mão na roda”. Além de permitir a geração dos scripts de forma simples e rápida, com sua utilização não temos aqueles problemas de dependências que normalmente temos quando geramos os scripts pelo método convencional.
Uma boa prática aqui poderia ser a criação de um job, pois assim será possível manter uma documentação completa de todas as bases do servidor. Para isto, basta utilizar a procedure acima e agendá-la para execução nos horários que acharem conveniente.
Um abraço a todos
Nilton Pinheiro

