文章目录
环境介绍
a)Sql Server 2008 R2 服务器
b)10.99.12.9为服务器a,10.99.236.162为服务器b
c)需要将服务器a数据库dangan远程备份到服务器b上
步骤
在服务器b上建立共享文件夹
在服务器b建立共享文件夹命名为SQLbf
在服务器a数据库做如下操作
数据库master中建立存储过程procbakup_DataBase
USE [master]
GO
/****** Object: StoredProcedure [dbo].[procbakup_DataBase] Script Date: 06/05/2019 10:03:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[procbakup_DataBase]
as
Declare @strCmdShell varchar(300)
Declare @strDataBaseName varchar(20)
Declare @FlagDel varchar(20)
Declare @SQLNetCon varchar(500)
Declare @addDBName varchar(500)
Declare @delDBName varchar(500)
Declare @delDBName2 varchar(500)
Declare @ToFilePath varchar(500)
Set @strDataBaseName='dangan'--填写数据库名称
Set @addDBName=@strDataBaseName+ '_db_' + replace(replace(convert(char(20),getdate(),20),':','-'),' ','-')
--备份的文件命名规则:yyyy-mm-dd hh:mi:ss.bak
Set @delDBName=@strDataBaseName + '_db_' +replace(replace(convert(char(20),getdate()-7,23),':','-'),' ','-')
--7天前的文件命名规则:yyyy-mm-dd.bak
Set @ToFilePath='H:\'+@addDBName+'.BAK'
Set @FlagDel='True'--填写True表示删除备份文件,填写False或其他字符不删除
Set @SQLNetCon='net use H: \\10.99.236.162\SQLbf 用户密码/user:用户账号'
--exec master..xp_cmdshell'net use h: \\远程IP\ 远程共享目录"用户密码" /user: 远程IP \Administrator'
--注意H后有空格
Set @delDBName2 ='del ' + 'H:\'+ @delDBName+ '*.BAK'
exec Master..xp_cmdshell 'net use * /d /y'--删除旧链接
exec Master..xp_cmdshell @SQLNetCon --建立新连接
BackUp DataBase @strDataBaseName To Disk= @ToFilePath with init
--备份数据库到映射的H盘
if (@FlagDel ='True')exec master.. xp_cmdshell @delDBName2
--执行删除本地的备份临时文件
exec Master..xp_cmdshell 'net use * /d /y'--删除链接
GO
启动SQL Server代理服务
数据库建立维护计划
打开SQL Server 企业管理器,在指定需要备份的数据库上面,新建一个维护计划。可按需要设定将来运行这个维护计划的时间/周期。
选择“执行T-SQL 语句任务”
选择语句任务,右击——编辑
输入:EXECUTE master.dbo.bakup_DataBase,确定即可
测试
找到相应的维护计划,右击——执行
作业完成后,服务器b可以看到生成的数据备份
点击作业执行后出现出操作系统错误 5(拒绝访问)
数据库权限设定
首先找到该数据库文件的mdf和ldf,右击属性–安全–编辑,添加everyOne用户,并勾选完全控制,保存
硬盘权限设定
如果设定数据库权限后不能解决问题,应该是由于备份目标驱动器的分区的文件系统是NTFS,权限设置不足造成的
需在要备份的硬盘上右击->属性->安全,添加Users用户,赋给所有的权限,问题解决。
完成以上设置后找到对应维护计划,执行即可。~~!!