Windows

每晚備份數據庫

  • February 12, 2016

**問題:**是否可以將每晚將一個完整的數據庫處理到同一台伺服器上的開發數據庫中的過程自動化?

軟體: Windows Server、SQL、SQL Server Management Studio、ColdFusion

**背景:**我有一個開發數據庫,我想用生產數據庫中的數據進行刷新。如果可能的話,我希望每天晚上都發生這種情況。這樣,開發站點只會落後一天,對數據所做的任何更改都將在每天晚上被覆蓋

是否有某種計劃任務或儲存處理可以處理這種請求?

每晚備份數據庫

我有一個開發數據庫,我想用生產數據庫中的數據進行刷新。如果可能的話,我希望每天晚上都發生這種情況。這樣,開發站點只會落後一天,對數據所做的任何更改都將在每天晚上被覆蓋

以下是應該可以正常工作的概述步驟,但您顯然需要為您的環境插入變數。如果需要,所有這些也可以使用 SQLCMD 完成,但假設您有 SQL Server 和 SSMS,我將假設您在此實例上也有 SQL 代理作業,並且您對它有些熟悉。

通過 SSMS 在 SQL Server 中創建備份設備:

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

通過 SSMS 創建 SQL 代理作業並安排在指定時間執行備份:

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

通過 SSMS 創建 SQL 代理作業並安排恢復完整備份 DB 指定時間:

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 實例上完成數據庫備份(否則請與您的 DBA 聯繫)。
  2. 這假設您正在創建一個新的完整備份文件,但如果您可以使用現有的備份文件,那麼我建議使用完整的數據庫生產備份文件來完成數據庫刷新到開發,然後將其超時以確保沒有重疊等。 (如果需要,請與 DBA 聯繫)
  3. 如果您還沒有或者如果您還不是 DBA,我建議您與您的數據庫管理員聯繫,不管談論這個。DBA 可以通過相應地授予您對 msdb SQL 代理角色的訪問權限來授予您創建您擁有的 SQL 代理作業的權限。

引用自:https://serverfault.com/questions/750922