每晚备份一个数据库

Den*_*one 5 windows database scheduled-task sql-server ssms

问题:是否可以将每天晚上将完整数据库复制到同一服务器上的开发数据库的过程自动化?

软件: Windows Server、SQL、SQL Server Management Studio、ColdFusion

背景:我有一个开发数据库,​​我想用生产数据库中的数据刷新它。如果可能的话,我希望每天晚上都发生这种情况。这样,开发站点将仅落后一天,并且对数据所做的任何更改每天晚上都会被覆盖

是否有某种计划任务或存储处理可以处理此类请求?

Pim*_* IT 6

每晚备份一个数据库

我有一个开发数据库,​​我想用生产数据库中的数据刷新它。如果可能的话,我希望每天晚上都发生这种情况。这样,开发站点将仅落后一天,并且对数据所做的任何更改每天晚上都会被覆盖

以下是应该可以正常工作的概述步骤,但您显然需要为您的环境插入变量。如果需要,所有这些也可以使用 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'
Run Code Online (Sandbox Code Playgroud)

通过 SSMS 创建 SQL 代理作业并安排在指定时间运行备份:

Backup database DBName to DBName with description = 'DBName Backup', skip, init
Run Code Online (Sandbox Code Playgroud)

通过 SSMS 创建 SQL 代理作业并安排它以恢复完整备份的数据库指定时间:

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'
Run Code Online (Sandbox Code Playgroud)

您也可以使用以下逻辑将这一切作为一项 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'
Run Code Online (Sandbox Code Playgroud)

一项无需备份设备的 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'
Run Code Online (Sandbox Code Playgroud)

笔记

  1. 这假定您有权在 SQL Server 实例上完成数据库备份(否则请与您的 DBA 联系)。
  2. 这假设您正在创建一个新的完整备份文件,但如果您可以使用现有的备份文件,那么我建议使用完整的数据库生产备份文件来完成对开发人员的数据库刷新,并使其超时以确保没有重叠等。 (如果需要,请与 DBA 联系)
  3. 如果您还没有或您不是 DBA,我建议您与您的数据库管理员联系,无论是否讨论这个问题。DBA 可以通过授予您对 msdb SQL 代理角色的访问权限来授予您创建您拥有的 SQL 代理作业的权限。