以前见过备份方式是说从备份到本地,然后再考到异地机器上,这样比较费劲,这种方法如下:

,--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帐户,可以根据实际环境切换其它域用户帐户。


             

sql SERVER 备份到 映射服务器 sqlserver备份到异地_sql


 


    2:在文件备份服务器中建立一个共享文件夹,共享权限中删除everyone用户,加入administrator用户,权限设置如下图。


           

sql SERVER 备份到 映射服务器 sqlserver备份到异地_数据库_02


 


    3:在SQL Server服务器中,打开企业管理器,新建数据库维护计划:


 


             

sql SERVER 备份到 映射服务器 sqlserver备份到异地_sqlserver_03


 


  4:在维护计划向导中,选择计划备份的数据库,设置好数据库优化信息和检查完整性等步骤。
  5:在向导的“指定数据库备份计划”设置好调度计划。
  6:在“指定备份磁盘目录”界面,手动输入文件备份服务器共享文件夹UNC路径。


                      

sql SERVER 备份到 映射服务器 sqlserver备份到异地_sqlserver_04


 


         7:在“事务日志备份计划”界面,根据实际环境决定如何备份。
         8:按向导设置好其它步骤,完成异地备份维护计划。


 


三:测试异地备份是否成功。
         1:检查共享文件夹中备份文件是否存在。


                   

sql SERVER 备份到 映射服务器 sqlserver备份到异地_数据库_05


 


          2:如果没有备份成功,请查看SQL Server日志,并检查权限设置以及用户名和密码是否完全一致。