Den*_*one 5 windows database scheduled-task sql-server ssms
问题:是否可以将每天晚上将完整数据库复制到同一服务器上的开发数据库的过程自动化?
软件: 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'
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)
笔记