Script T-SQL para copiar um banco de dados

7

Eu gostaria de encontrar uma maneira baseada em script T-SQL para copiar meu banco de dados "PROD" (que é somente leitura e consiste em vários grupos de arquivos) para um banco de dados "EDIT" de leitura / gravação, que eu posso usar e editar dados em.

Eu sei sobre o Assistente de Cópia de Banco de Dados e estou usando-o agora - no entanto, prefiro automatizar isso para que um único script possa restaurar o banco de dados PROD a partir de um backup e copiá-lo para o banco de dados EDIT.

Parece que não há nenhum comando "COPY DATABASE" no T-SQL, nem posso encontrar outra maneira de fazer isso - a não ser restaurar o backup duas vezes. Mesmo? Não há melhor maneira de fazer isso?

O que eu gostaria de fazer é isto:

  1. inicie a restauração do disco em "MyPROD_Database"
  2. depois de terminar, gostaria de copiar esse banco de dados que acabei de restaurar para "MyEDIT_Database"
  3. como último passo, gostaria de definir os grupos de arquivos do meu banco de dados PROD como somente leitura

De preferência, tudo em um script T-SQL que eu possa executar a partir do SSMS e / ou sqlcmd.

O sistema é o SQL Server 2005 (de onde vem o backup) e o SQL Server 2008 (para o qual eu restauro).

O desafio está por aí - quem vai pegá-lo? : -)

Marc

    
por marc_s 26.06.2009 / 15:12

7 respostas

3

O SSIS tem uma função de banco de dados de cópia, então você teria que executar seu T-SQL via SSIS, e então você poderia ter um banco de dados de cópia como um passo nesse processo.

    
por 26.06.2009 / 17:51
7

O Assistente de Publicação do SQL Server pode ser automatizado com argumentos de linha de comando.

Na página de ajuda

The following command will script the FooDB database from the default instance on a machine named MYSERVER using SQL Server authentication with the username "Alice" and the password "7h92-v6k3" to the file C:\FooDB.sql:

sqlpubwiz script -d FooDB -S MYSERVER -U Alice -P 7h92-v6k3 C:\FooDB.sql

Portanto, depois de ter esse script, você poderá executá-lo na outra instância do banco de dados usando SQLCMD .

sqlcmd -S MYSERVER -U Alice -P 7h92-v6k3 -i C:\FooDB.sql -o 
    
por 26.06.2009 / 15:24
2

Se o login que está executando o script tiver direitos sysadmin, você poderá fazer isso:

  • restaure o banco de dados PROD
  • separe o banco de dados PROD
  • copie os arquivos do banco de dados PROD usando xp_cmdshell
  • anexar o banco de dados PROD usando os arquivos originais
  • anexar o banco de dados EDIT usando os arquivos copiados

Se você puder usar o SQLCMD ou o modo SQLCMD do Management Studio para executar o script, também poderá tirar proveito dos SQLCMDs !! sintaxe para executar um comando do sistema operacional para copiar os arquivos.

Em qualquer caso, no entanto, isso (e o assistente de banco de dados de cópia, para esse assunto) envolve colocar o banco de dados PROD offline para fazer a cópia. Se isso não for uma opção, várias restaurações podem ser sua única opção.

    
por 26.06.2009 / 17:56
1

Isso pode ajudar: link

Script out your entire database including SQL Insert statements for importing data into the database.

    
por 26.06.2009 / 15:15
1

Confira alguns desses recursos.

link

link

    
por 26.06.2009 / 16:43
1

Isso pode ser útil:

SQL Multiscript

    
por 26.06.2009 / 19:28
1

Muito mais rápido e simples para fazer um backup / restauração:

SqlCmd -E -S localhost -Q "BACKUP DATABASE mydb TO DISK='c:\temp\mydb.bak'"
REM Make Sure connections are closed
SqlCmd -E -S localhost -Q "ALTER DATABASE PIDataCopy SET SINGLE_USER WITH ROLLBACK AFTER 60"
SqlCmd -E -S localhost -Q "RESTORE DATABASE PIDataCopy FROM DISK='c:\temp\mydb.bak WITH MOVE  'mydb_Data' TO 'C:\SQLData\PIDataCopy_Data', MOVE 'mydb_Log' TO 'C:\SQLData\PIDataCopy_Log', RECOVERY,REPLACE"
SqlCmd -E -S localhost -Q "ALTER DATABASE PIDataCopy SET MULTI_USER"
    
por 13.11.2015 / 22:27