sql 异地自动备份


 

公司数据库要作异地备份提高容灾性,做到异地自动备份。经过多日查询尝试终于成功。

具体环境如下。

数据库服务器:主机A 用户名lujia  密码 jjjj  数据库KK

文件服务器: 主机B  用户名cy   密码 cykingdee  机器名为cy0efd410de

前期工作: 主机b上新建一个文件夹backup 将其设置为共享属性可写

编写作业计划declare @sql varchar(500)
select @sql='//192.168.0.2/backup/kk'+'_db_'+convert(varchar(10),getdate(),112)+substring(convert(varchar(20),getdate(),108) ,1,2)+'.bak'

exec master..xp_cmdshell 'net use //192.168.0.2/backup

backup database kk to disk=@sql   --执行远程备份
go

declare @sql varchar(500)

select @sql='del'+'//192.168.0.2/backup/kk'+'_db_'+convert(varchar(10),dateadd(day,-7,getdate()),112)+
substring(convert(varchar(20),dateadd(day,-7,getdate()),108) ,1,2)+'.bak'

exec master..xp_cmdshell @sql --删除七天前作的备份。
go

 

备注:1:xp_cmdshell :是SQLSERVER的扩展存储过程。

                            作用,以操作系统命令行解释器的方式执行给定的命令字符串 并以文本行方式返回任何输出。     

语法:参见SQLSERVER联机帮助

      2:net use      : 是WINDOWS内部的网络命令。

                            作用,将计算机与共享资源连接或断开,或者显示关于计算机连接的信息。该命令还控制持久网络连接。

3.convert(varchar(10),getdate(),112) 目的是将日前时间转换成字符串格式,其中varchar(10) 代表转化的类型为可变长的字符

型,getdate()表示取得当前的时间,112为数据转化的类行。(详见下文对convert的具体的解释)

4.substring函数的用法: substring(abcdefgh,2,3)=cde

表示提取字符串abcdefgh,从第二个字符开始,连续3个。

5.dateadd函数的用法:dateadd(interval,number,date) interval表示要加上的时间间隔(类似于单位如年,月,日)

,number 表示的是要加上的数值,date是时间。

dateadd(day,-7,getdate()) 假定目前的时间是2007-06-08-10:20:35

结果应该为2007-06-08-10:20:35

 

格式:

CONVERT(data_type,expression[,style])

说明:

此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)

相互转换的时候才用到.

例子:

SELECT CONVERT(varchar(30),getdate(),101) now

结果为:

now

 

 

// 更细致的写法~!

1--------------
master..xp_cmdshell 'net use  [url=file:PCName/BAK]//PCName/BAK[/url] passwd /user:username'
备份数据库
backup database book to disk='//PCName/BAK/DataBaseB.bak'
在企业管理器中新建作业把以上两个语句加到步骤里,再在调度中做备份调度,即可
还原的操作也很简单语句如下
restore database book from disk='//PCName/BAK/DataBaseB.bak'
2------------------
建数据库sql2000定时异地备份与还原
master..xp_cmdshell 'net use  [url=file:PCName/BAK]//PCName/BAK[/url] passwd /user:username'
备份数据库
backup database book to disk='//PCName/BAK/DataBaseB.bak'
在企业管理器中新建作业把以上两个语句加到步骤里,再在调度中做备份调度,即可
还原的操作也很简单语句如下
restore database book from disk='//PCName/BAK/DataBaseB.bak'

3----------------------------------------------
--第一步:在SQL server中做映射网络盘
--192.168.60.203为远程备份机
--administrator为远程备份机登录用户名
--111111为远程机器密码
--bak为完全共享的文件夹
--注意:(Z:后面要有一个空格)
exec
master..xp_cmdshell

'net use z: [url=file:192.168.60.203/bak]//192.168.60.203/bak[/url]   111111   /user:192.168.60.203/administrator'

--第二步:进行数据库备份
--DIFFERENTIAL为差量数据备份,在进行差量备份前要先做一次完全备份
backup database dbname to disk='z:/back.dat' with DIFFERENTIAL

--第三步:备份完成后删除映射
exec master..xp_cmdshell 'net use z: /delete'
如再有不清楚可QQ联系我:39867529

4-------------------
1、在域中是最好解决了,EXEC sp_addumpdevice 'disk', 'networkdevice',
'//servername/sharename/path/filename.ext',这个通过域用户最好办。
2、第二种方法,适用于所有环境(Windows),比如说服务器上有一个
Windows用户user1,密码是123,你首先在查询分析器里面通过xp_cmdshell
'net share ...'命令来共享这个文件夹sql,然后xp_cmdshell 'net use ...../USER:user1/123'
把远程的文件夹映射过来,
然后在查询分析器里面

 sp_addumpdevice ‘disk’,‘//servername/sql/back_database.bak,然后sp_addumpdevice把备份设备放到这个文件夹里面