Назад | Перейти на главную страницу

Резервное копирование базы данных каждую ночь

Вопрос: Можно ли автоматизировать процесс копирования полной базы данных каждую ночь в базу данных разработки на том же сервере?

Программное обеспечение: Windows Server, SQL, SQL Server Management Studio, ColdFusion

Задний план: У меня есть база данных разработки, которую я хотел бы обновить данными из производственной базы данных. Я бы хотел, чтобы это происходило каждый вечер, если возможно. Таким образом, сайт разработки будет отставать всего на один день, и любые изменения, внесенные в данные, будут перезаписываться каждый вечер.

Есть ли какая-то запланированная задача или хранимая обработка, которая может обрабатывать такого рода запросы?

Резервное копирование базы данных каждую ночь

У меня есть база данных разработки, которую я хотел бы обновить данными из производственной базы данных. Я бы хотел, чтобы это происходило каждый вечер, если возможно. Таким образом, сайт разработки будет отставать всего на один день, и любые изменения, внесенные в данные, будут перезаписываться каждый вечер.

Ниже приведены описанные шаги, которые должны работать нормально, хотя вам, очевидно, необходимо подключить переменные для вашей среды. Все это также можно сделать с помощью SQLCMD, если необходимо, но если у вас есть SQL Server и SSMS, я предполагаю, что у вас также есть задания агента SQL в этом экземпляре, и что вы в некоторой степени знакомы с ним.

Создайте устройство резервного копирования в SQL Server через SSMS:

EXEC master.dbo.sp_addumpdevice  @devtype = N'disk', @logicalname = N'DBName', @physicalname = N'S:\MSSQL.1\MSSQL\Backup\DBName.bak'

Создайте задание агента SQL через SSMS и запланируйте запуск резервного копирования в назначенное время:

Backup database DBName to DBName with description = 'DBName Backup', skip, init

Создайте задание агента SQL через SSMS и запланируйте его для восстановления полной резервной копии БД в назначенное время:

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'

Вы можете сделать все это как одно задание агента SQL, используя следующую логику:

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'

Одно задание агента SQL без необходимости резервного устройства:

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'

НОТЫ

  1. Предполагается, что у вас есть разрешения на выполнение резервного копирования базы данных на экземпляре SQL Server (в противном случае обратитесь к администратору баз данных).
  2. Предполагается, что вы создаете новый файл полной резервной копии, но если вы можете использовать существующий, то я бы предложил использовать полный производственный резервный файл БД для завершения обновления БД для разработчика и просто тайм-аут, чтобы исключить перекрытие и т. Д. (при необходимости обратитесь к администратору базы данных)
  3. Я бы посоветовал поговорить об этом с администратором базы данных, если вы еще этого не сделали или вы еще не являетесь администратором баз данных. Администратор базы данных может предоставить вам доступ для создания собственных заданий агента SQL, предоставив вам доступ к базе данных msdb. Роли агента SQL соответственно.