SQL SERVER 数据库跨服务器备份
原文:https://www.cnblogs.com/jaday/p/6088200.html
需求介绍:每天备份线上正式库并且把备份文件复制到测试服务器,测试服务器自动把数据库备份文件还原。
方案介绍:
第1步:在正式库上创建存储过程用来备份数据库和复制到测试服务器,然后新建作业每天定时执行创建的存储过程。
第2步:在测试服务器数据库上创建存储过程用来还原数据库,然后新建作业每天定时执行创建的存储过程。
准备:
在正式服务器上共享备份文件的文件夹,并且给文件夹everyone的权限。
在测试服务器上创建共享文件夹,并且给文件夹everyone的权限。
正式库备份数据库和复制数据库代码:
--开启 xp_cmdshell sp_configure 'show advanced options',1 reconfigure go sp_configure 'xp_cmdshell',1 reconfigure go
USE [master] GO /****** Object: StoredProcedure [dbo].[backup_db_ksedu] Script Date: 11/22/2016 08:41:23 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --备份数据库 Create proc [dbo].[backup_db_ksedu] as Declare @strPsw varchar(50) Declare @strUsr varchar(50) Declare @strCmdShell varchar(300) Declare @strDataBaseName varchar(20) Declare @FullFileName Varchar(200) Declare @FullFileName1 Varchar(200) Declare @FullFileName2 Varchar(200) Declare @FileFlag varchar(50) Declare @FileFlag2 varchar(50) DECLARE @FileFlag3 varchar(50) Declare @ToFileName varchar(200) Declare @SQLStr varchar(500) Declare @SQLStr2 varchar(500) Declare @SQLStr3 varchar(500) Declare @FlagDel varchar(20) --定义备份的数据库名称 Set @strDataBaseName='数据库名' --定义本地备份文件的名称 Set @FileFlag=@strDataBaseName + '_db_' + replace(convert(char(20),getdate(),112),' ','') --定义本地1天前的备份文件名称 --Set @FileFlag3=@strDataBaseName + '_db_' + replace(convert(char(20),getdate()-1,112),' ','') --定义远程服务器3天前的备份文件名称 --Set @FileFlag2=@strDataBaseName + '_db_' + replace(convert(char(20),getdate()-3,112),' ','') --设置远程服务器的登录域和用户名 Set @strUsr='ZONGHEGUANLI-SQ\Administrator' --设置远程服务器登录密码 Set @strPsw='abc123' --设置远程服务器连接 Set @strCmdShell= 'net use \\xx.xxx.x.xxx\db_backup ' + @strPsw + ' /user:' +@strUsr --设置本地备份文件名称 Set @FullFileName='e:\bak\'+@FileFlag+'.bak' --设置本地1天前的备份文件名称 --set @FullFileName1='D:\Backup\'+@FileFlag3+'.bak' --设置远程服务器3天前的备份文件名称 --set @FullFileName2='\\172.17.1.10\j$\db_backup\'+@FileFlag2+'.BAK' --设置远程服务器保存备份文件目录 Set @ToFileName='\\xx.xxx.x.xxx\db_backup\' --Set @ToFileName='e:\Backup\' --设置为True时,即删除备份,设置为False时,即不删除备份文件 --Set @FlagDel='False' --设置从本地复制备份文件至远程服务器的语句 Set @SQLStr='copy '+@FullFileName+' '+@ToFileName --设置删除本地1天前的备份文件 --Set @SQLStr2='del ' +@FullFileName1 --设置删除远程服务器3天前的备份文件 --Set @SQLStr3='del ' +@FullFileName2 --备份数据库 压缩备份 BACKUP DATABASE @strDataBaseName TO DISK = @FullFileName WITH INIT, STATS = 20 --连接远程服务器 exec master..xp_cmdshell @strCmdShell --复制备份文件至远程服务器 exec Master..xp_cmdshell @SQLStr --删除1天前本地的备份文件 --if (@FlagDel ='True') --exec master.. xp_cmdshell @SQLStr2 ----删除3天前远程服务器备份文件 --if (@FlagDel ='True') --exec master.. xp_cmdshell @SQLStr3
测试库还原数据库代码:
USE [master] GO /****** Object: StoredProcedure [dbo].[restore_db_ksedu] Script Date: 11/22/2016 08:40:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[restore_db_ksedu] AS Declare @strDataBaseName varchar(50) Declare @FileFlag varchar(50) --定义备份的数据库名称 Set @strDataBaseName='数据库名' Set @FileFlag='d:\db_backup\'+@strDataBaseName + '_db_' + replace(convert(char(20),getdate(),112),' ','')+'.bak' --加上这句防止数据库正在使用导致执行不成功 ALTER DATABASE [数据库名] SET OFFLINE WITH ROLLBACK IMMEDIATE restore database [数据库名] from disk=@FileFlag with file=1, REPLACE, recovery ALTER database [数据库名] set online
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本