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把备份设备放到这个文件夹里面