用存储过程实现MSSQL数据的网络异地备份
2006-10-11 14:09
337 查看
MSSQL的异地远程存储,SQLServer备到FileServer上
环境:win2k+sqlserver 2K SP3
backup database msdb to disk=’computer estfilename.bak’ --(注意大小写)
如果SQL异地备份失败,归根结底是权限问题! H
那么你的SQLServer的启动用户必须在FileServer上有足够的权限!
1、SQLServer上新建一SQLUser用户权限大一点。
2、FileServer上建同一用户对某一文件夹有足够权限,就是在两台机器上建相同的用户名和密码,然后与这个用户名登入电脑。
3、两机的SQLUser密码相同(方便一点)
4、将SQLServer改为SQLUser启动
(管理工具-->服务-->mssql项-->属性-->指定用户及密码,是计算机的登入用户名)
5、backup database 数据库 to disk=’192.168.*.*文件夹ShareBak.Bak’就可以了。
作业:db_backup2pc @databaseName='databaseName',@filepath='filepath'
CREATE PROCEDURE dbo.db_backup2pc
@databaseName nvarchar(100) = null, --数据库名
@filepath nvarchar(125) = null --文件保存路径(IP+隐藏共享+)
AS
BEGIN
DECLARE
@year1 varchar(4),
@month1 varchar(2),
@day1 varchar(2),
@flag varchar(255),
@proc_result tinyint, /**//*返回系统存储过程xp_cmdshell运行结果*/
@sqlstr varchar(2000),
@createdir varchar(255) /**//*建立文件备份的目录*/
begin
-- Get year & month &day fromat of the day before yesterday
-- SET @year1 = substring(convert(varchar,datepart(yyyy,getdate()-2)),3,2)
SET @month1 =substring(convert(varchar,datepart(mm,getdate())),1,2)
SET @day1=substring(convert(varchar,datepart(dd,getdate())),1,2)
-- if len(@month1)<2 set @month1 = '0' + @month1 /* 不足两位的前面加零 */
-- if len(@day1)<2 set @day1 = '0' + @day1
set @sqlstr='dir '+@filepath+@databaseName+'_'+@month1+'-'+@day1
EXEC @proc_result = master..xp_cmdshell @sqlstr,no_output
if (@proc_result<>0) /**//*系统存储过程xp_cmdshell返回代码值:0(成功)或1(失败)*/
begin
set @createdir='md '+@filepath+@databaseName+'_'+@month1+'-'+@day1 /**//*建立文件备份的目录*/
EXEC master..xp_cmdshell @createdir,no_output
set @sqlstr='backup database '+@databaseName+' to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+''+@databaseName+'.bak''' --+' with init'
Execute (@sqlstr) /**//* 备份databaseName数据 */
set @sqlstr='backup database master to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+'master.bak'''
Execute (@sqlstr) /**//* 备份 master 数据 */
set @sqlstr='backup database msdb to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+'msdb.bak'''
Execute (@sqlstr) /**//* 备份 msdb 数据 */
set @flag='Backup database successful.'
end
else
set @flag='The directory "'+@databaseName+'_'+@month1+'-'+@day1+'" has been in, backup database unsuccessful.'
print @flag
END
END
GO
作业:delete_db_backupfile2pc @databaseName='databaseName',@filepath='filepath'
CREATE PROCEDURE dbo.delete_db_backupfile2pc
@databaseName nvarchar(100)=null,
@filepath nvarchar(125)=null
AS
DECLARE
@year1 varchar(4),
@month1 varchar(2),
@day1 varchar(2),
@sqlstr varchar(2000),
@flag varchar(255),
@proc_result tinyint /**//*返回系统存储过程xp_cmdshell运行结果*/
begin
if @databaseName = null or @filepath = null
set @flag='Variable Error!'
else
begin
--保存7天的数据
SET @month1 =substring(convert(varchar,datepart(mm,getdate()-7)),1,2)
SET @day1=substring(convert(varchar,datepart(dd,getdate()-7)),1,2)
-- if len(@month1)<2 set @month1 = '0' + @month1 /* 不足两位的前面加零 */
-- if len(@day1)<2 set @day1 = '0' + @day1
set @sqlstr='dir '+@filepath+@databaseName+'_'+@month1+'-'+@day1
EXEC @proc_result = master..xp_cmdshell @sqlstr,no_output
if (@proc_result=0) /**//*系统存储过程xp_cmdshell返回代码值:0(成功)或1(失败)*/
begin
set @sqlstr='del '+@filepath+@databaseName+'_'+@month1+'-'+@day1+' /q'
exec master..xp_cmdshell @sqlstr,no_output --删除目录下的文件
set @sqlstr='rd '+@filepath+@databaseName+'_'+@month1+'-'+@day1
exec master..xp_cmdshell @sqlstr,no_output --删除目录
set @flag='Delete file successful!'
end
else
set @flag='Can not find "'+@filepath+@databaseName+'_'+@month1+'-'+@day1+'" file!'
end
print @flag
end
GO
环境:win2k+sqlserver 2K SP3
backup database msdb to disk=’computer estfilename.bak’ --(注意大小写)
如果SQL异地备份失败,归根结底是权限问题! H
那么你的SQLServer的启动用户必须在FileServer上有足够的权限!
1、SQLServer上新建一SQLUser用户权限大一点。
2、FileServer上建同一用户对某一文件夹有足够权限,就是在两台机器上建相同的用户名和密码,然后与这个用户名登入电脑。
3、两机的SQLUser密码相同(方便一点)
4、将SQLServer改为SQLUser启动
(管理工具-->服务-->mssql项-->属性-->指定用户及密码,是计算机的登入用户名)
5、backup database 数据库 to disk=’192.168.*.*文件夹ShareBak.Bak’就可以了。
作业:db_backup2pc @databaseName='databaseName',@filepath='filepath'
CREATE PROCEDURE dbo.db_backup2pc
@databaseName nvarchar(100) = null, --数据库名
@filepath nvarchar(125) = null --文件保存路径(IP+隐藏共享+)
AS
BEGIN
DECLARE
@year1 varchar(4),
@month1 varchar(2),
@day1 varchar(2),
@flag varchar(255),
@proc_result tinyint, /**//*返回系统存储过程xp_cmdshell运行结果*/
@sqlstr varchar(2000),
@createdir varchar(255) /**//*建立文件备份的目录*/
begin
-- Get year & month &day fromat of the day before yesterday
-- SET @year1 = substring(convert(varchar,datepart(yyyy,getdate()-2)),3,2)
SET @month1 =substring(convert(varchar,datepart(mm,getdate())),1,2)
SET @day1=substring(convert(varchar,datepart(dd,getdate())),1,2)
-- if len(@month1)<2 set @month1 = '0' + @month1 /* 不足两位的前面加零 */
-- if len(@day1)<2 set @day1 = '0' + @day1
set @sqlstr='dir '+@filepath+@databaseName+'_'+@month1+'-'+@day1
EXEC @proc_result = master..xp_cmdshell @sqlstr,no_output
if (@proc_result<>0) /**//*系统存储过程xp_cmdshell返回代码值:0(成功)或1(失败)*/
begin
set @createdir='md '+@filepath+@databaseName+'_'+@month1+'-'+@day1 /**//*建立文件备份的目录*/
EXEC master..xp_cmdshell @createdir,no_output
set @sqlstr='backup database '+@databaseName+' to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+''+@databaseName+'.bak''' --+' with init'
Execute (@sqlstr) /**//* 备份databaseName数据 */
set @sqlstr='backup database master to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+'master.bak'''
Execute (@sqlstr) /**//* 备份 master 数据 */
set @sqlstr='backup database msdb to disk='''+@filepath+@databaseName+'_'+@month1+'-'+@day1+'msdb.bak'''
Execute (@sqlstr) /**//* 备份 msdb 数据 */
set @flag='Backup database successful.'
end
else
set @flag='The directory "'+@databaseName+'_'+@month1+'-'+@day1+'" has been in, backup database unsuccessful.'
print @flag
END
END
GO
作业:delete_db_backupfile2pc @databaseName='databaseName',@filepath='filepath'
CREATE PROCEDURE dbo.delete_db_backupfile2pc
@databaseName nvarchar(100)=null,
@filepath nvarchar(125)=null
AS
DECLARE
@year1 varchar(4),
@month1 varchar(2),
@day1 varchar(2),
@sqlstr varchar(2000),
@flag varchar(255),
@proc_result tinyint /**//*返回系统存储过程xp_cmdshell运行结果*/
begin
if @databaseName = null or @filepath = null
set @flag='Variable Error!'
else
begin
--保存7天的数据
SET @month1 =substring(convert(varchar,datepart(mm,getdate()-7)),1,2)
SET @day1=substring(convert(varchar,datepart(dd,getdate()-7)),1,2)
-- if len(@month1)<2 set @month1 = '0' + @month1 /* 不足两位的前面加零 */
-- if len(@day1)<2 set @day1 = '0' + @day1
set @sqlstr='dir '+@filepath+@databaseName+'_'+@month1+'-'+@day1
EXEC @proc_result = master..xp_cmdshell @sqlstr,no_output
if (@proc_result=0) /**//*系统存储过程xp_cmdshell返回代码值:0(成功)或1(失败)*/
begin
set @sqlstr='del '+@filepath+@databaseName+'_'+@month1+'-'+@day1+' /q'
exec master..xp_cmdshell @sqlstr,no_output --删除目录下的文件
set @sqlstr='rd '+@filepath+@databaseName+'_'+@month1+'-'+@day1
exec master..xp_cmdshell @sqlstr,no_output --删除目录
set @flag='Delete file successful!'
end
else
set @flag='Can not find "'+@filepath+@databaseName+'_'+@month1+'-'+@day1+'" file!'
end
print @flag
end
GO
相关文章推荐
- 大亚湾区“智慧医疗”数据与网络安全异地容灾备份二期建设项目
- MSSQL · 最佳实践 · 利用文件组实现冷热数据隔离备份方案
- 第二章 数据备份和恢复技术 --基于mkCDrec的核心网网络运维系统的备份和恢复的研究与实现
- 使用IMP导出数据备份并简单FTP实现异地存储
- MSSQL · 最佳实践 · 利用文件组实现冷热数据隔离备份方案
- MSSQL · 最佳实践 · 利用文件组实现冷热数据隔离备份方案
- 使用SQL Server 2008数据库复制实现异地数据备份
- MSSQL · 最佳实践 · 利用文件组实现冷热数据隔离备份方案
- Linux 网络文件系统的数据备份及恢复机制实现
- 邮政金融计算机网络系统容灾系统全国异地数据备份工程集成项目技术服务
- MSSQL · 最佳实践 · 利用文件组实现冷热数据隔离备份方案
- {网络编程}和{多线程}应用:基于UDP协议【实现多发送方发送数据到同一个接收者】--练习
- Android之MVP模式实现登录和网络数据加载
- [导入]用任务计划实现数据库的异地备份
- 实现小数据量和海量数据的通用分页显示存储过程
- 不要把所有鸡蛋都放在一个篮子里——使用RoboCopy实现网络备份
- Jsoup实现网络爬虫抓取数据
- rsync+inotify实现数据的实时备份
- 用任务计划实现数据库的异地备份
- 网络游戏中,玩家数据同步的一种简单实现