Back up a database nightly
I have a development database that I would like to refresh with the data from the Production database. I would like for this to happen every evening if possible. This way the development site will only be one day behind and any changes made to the data will be overwritten every evening
Abaixo estão os passos descritos que devem funcionar bem, você obviamente precisa conectar as variáveis para o seu ambiente. Tudo isso também pode ser feito com SQLCMD, se necessário, mas supondo que você tenha SQL Server e SSMS, vou assumir que você também tem trabalhos do SQL Agent nesta instância, e que você está familiarizado com isso.
Crie um dispositivo de backup no SQL Server via SSMS:
EXEC master.dbo.sp_addumpdevice @devtype = N'disk', @logicalname = N'DBName', @physicalname = N'S:\MSSQL.1\MSSQL\Backup\DBName.bak'
Crie um trabalho do SQL Agent por meio do SSMS e programe-o para executar o backup no horário designado:
Backup database DBName to DBName with description = 'DBName Backup', skip, init
Crie um trabalho do SQL Agent por meio do SSMS e programe-o para restaurar a hora designada do banco de dados com backup completo:
ALTER DATABASE DB_Name SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE DB_Name SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
RESTORE DATABASE [DB_Name]
FROM DISK =N'S:\MSSQL.1\MSSQL\Backup\DBName.bak' WITH REPLACE,
MOVE N'LogicalLogFileName' TO N'L:\Path\Log\PhysicalLogFileName.ldf',
MOVE N'LogicalDataFileName' TO N'X:\Path\Data\PhysicalDataFileName.mdf'
Você pode fazer tudo como um trabalho do SQL Agent com a lógica abaixo também:
Backup database DBName to DBName with description = 'DBName Backup', skip, init
ALTER DATABASE DBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE DBName SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
RESTORE DATABASE [DB_Name]
FROM DISK =N'S:\MSSQL.1\MSSQL\Backup\DBName.bak' WITH REPLACE,
MOVE N'LogicalLogFileName' TO N'L:\Path\Log\PhysicalLogFileName.ldf',
MOVE N'LogicalDataFileName' TO N'X:\Path\Data\PhysicalDataFileName.mdf'
Um trabalho do SQL Agent sem necessidade de dispositivo de backup:
DECLARE @BackupFileName varchar(256)
SET @BackupFileName = 'S:\MSSQL.1\MSSQL\Backup\DBName.bak'
BACKUP DATABASE [DBName] TO DISK=@BackupFileName WITH skip, init
GO
ALTER DATABASE DBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE DBName SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
RESTORE DATABASE [DB_Name]
FROM DISK =N'S:\MSSQL.1\MSSQL\Backup\DBName.bak' WITH REPLACE,
MOVE N'LogicalLogFileName' TO N'L:\Path\Log\PhysicalLogFileName.ldf',
MOVE N'LogicalDataFileName' TO N'X:\Path\Data\PhysicalDataFileName.mdf'
NOTAS
- Isso pressupõe que você tenha permissões para concluir um backup de banco de dados na instância do SQL Server (use seu DBA de outra forma).
- Isso pressupõe que você esteja criando um novo arquivo de backup completo, mas se você puder usar um existente, sugiro usar o arquivo de backup completo de produção do DB para concluir a atualização do banco de dados para dev e expirar para garantir que não haja sobreposição , etc. (obtenha DBA, se necessário)
- Eu sugiro que você entre em contato com o administrador do banco de dados, independentemente de falar sobre isso, se ainda não tiver feito isso, ou se não for também o DBA. O DBA pode conceder acesso a você para criar trabalhos do SQL Agent que você possui concedendo acesso ao msdb Funções do SQL Agent de acordo.