以前见过备份方式是说从备份到本地,然后再考到异地机器上,这样比较费劲,这种方法如下:
,--SQL如何备份数据库到异机
写成存储过程,建立作业定时备份~~~
--在sql中映射一下就可以了
exec master..xp_cmdshell 'net use z: //yizhi/D$ "密码" /user:yizhi/administrator'
/*--说明:
exec master..xp_cmdshell 'net use z: //xz/c$ "密码" /user:xz/administrator'
z:是映射网络路径对应本机的盘符,与下面的备份对应
//xz/c$是要映射的网络路径
xz/administrator
xz是远程的计算机名,
administrator是登陆的用户名
密码 面指定的administrator用户的密码
--*/
--备份;with init覆盖 |noinit添加
backup database 库名 to disk='E:/H_BACKUP.bak' with init
--COPY
exec master..xp_cmdshell 'copy E:/H_BACKUP.bak z:'
--删除(这句可以去掉)
--exec master..xp_cmdshell 'del E:/H_BACKUP.bak'
--完成后删除映射
exec master..xp_cmdshell 'net use z: /delete'
如果数据文件很大,会比较浪费时间,备份和考拷都会消费不少时间成本。 MSSQL SERVER 2000在WIN2K环境下的实现方法如下:
最重要的是注意权限问题:
如:
SQLServer备到FileServer上
那你的SQLServer的启动用户必须在FileServer上有足够的权限!
--------------------^^^---------------------------------
1、SQLServer上新建一SQLUser用户权限大一点。
2、FileServer上建同一用户对某一文件夹有足够权限。
3、两机的SQLUser密码相同(方便一点)
4、将SQLServer改为SQLUser启动
(管理工具-->服务-->mssql项-->属性-->指定用户及密码)
5、//192.168.*.*/文件夹/ShareBak.Bak就可以了
-----------------------------------------------------------
简单一点就是:
如果你两台都是windows2ks
你的机器也用同样的Administrator密码,且sql服务器用administrator启动
那你写设备时就可以写://ip/.......
如果对方是98那你要完全共享一下!
你写设备时就可以写://ip/....... 写语句 backup database 数据库名 to disk='//计算机名//共享目录名/备份文件名' 即可以
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
MSSQL2005则更要简单一些
1:在SQL Server服务器中以域用户帐户启动SQL Server服务以及SQL Server Agent服务。
本实验中直接使用administrator帐户,可以根据实际环境切换其它域用户帐户。
2:在文件备份服务器中建立一个共享文件夹,共享权限中删除everyone用户,加入administrator用户,权限设置如下图。
3:在SQL Server服务器中,打开企业管理器,新建数据库维护计划:
4:在维护计划向导中,选择计划备份的数据库,设置好数据库优化信息和检查完整性等步骤。
5:在向导的“指定数据库备份计划”设置好调度计划。
6:在“指定备份磁盘目录”界面,手动输入文件备份服务器共享文件夹UNC路径。
7:在“事务日志备份计划”界面,根据实际环境决定如何备份。
8:按向导设置好其它步骤,完成异地备份维护计划。
三:测试异地备份是否成功。
1:检查共享文件夹中备份文件是否存在。
2:如果没有备份成功,请查看SQL Server日志,并检查权限设置以及用户名和密码是否完全一致。