您的位置:首页 > 数据库

sql server 远程备份

2011-05-22 20:50 260 查看
--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'

------------------------------------------------------------------------

--以下代码放在作业里做调度,自动备份、自动删除4天前备份

--创建映射
exec master..xp_cmdshell 'net use w: /DatabaseBackup$ "password"/user:Roy',NO_OUTPUT
go
-----2000用游标:
declare @s nvarchar(200),@del nvarchar(200)
select @s='',@del=''

declare datebak cursor for
select
[bak]='backup database '+quotename(Name)+' to disk =''w:'+Name+'_'+convert(varchar(8),getdate(),112)+'.bak'' with init',
[del]='exec master..xp_cmdshell '' del w:'+Name+'_'+convert(varchar(8),getdate()-4,112)+'.bak'', no_output'
from master..sysdatabases where dbid>4 --不备份系统数据库
open datebak

fetch next from datebak into @s,@del
while @@fetch_status=0
begin
exec (@del)
exec(@s)
fetch next from datebak into @s,@del
end
close datebak
deallocate datebak
go
--删除映射
exec master..xp_cmdshell 'net use w: /delete'

go

----------------------------------------------------------------------

--SQL2005以上环境可通过以下两步完成备份
-- 创建链接服务器
exec sp_addlinkedserver 'link_server_name','','SQLOLEDB','server_name or server_ip';
exec sp_addlinkedsrvlogin 'link_server_name','false','sa','sa','password';

-- 远程备份 dbname 数据库
exec('backup database dbname to disk=''c:/dbname.bak'';') at link_server_name;

-----------------------------------------------------------------------

SQLSERVER服务实例名称:192.168.0.2
需要备份的数据库名称: a
备份机器名称(Client端):192.168.0.3
备份机用户:zf 密码:123
备份机域名:domain
备份机提供备份需求的文件夹:D:/sqlbak

备份数据库

第一步: 在备份机建立共享文件夹
在程序代码中调用(或者CMD窗口) net share sqlbakup=D:/sqlbak 或者用NetShareAdd这个API
简要说明:
net share:是WINDOWS内部的网络命令。
作用:建立本地的共享资源,显示当前计算机的共享资源信息。

第二步: 建立共享信用关系
exec master..xp_cmdshell 'net use file://192.168.0.3/sqlbak 123 /user:domain/zf'
简要说明:
1:xp_cmdshell :是SQLSERVER的扩展存储过程。
作用:以操作系统命令行解释器的方式执行给定的命令字符串, 并以文本行方式返回任何输出。
语法:参见SQLSERVER联机帮助
2:net use : 是WINDOWS内部的网络命令。
作用:将计算机与共享资源连接或断开,或者显示关于计算机连接的信息。

该命令还控制持久网络连接。

第三步:备份数据库
backup database a to disk='//192.168.0.3/sqlbak/a.bak'
backup database a to disk='//192.168.0.3/sqlbak/a1.bak' WITH DIFFERENTIAL (差异备份)

第四步: 删除共享文件夹
在程序代码中调用(或者CMD窗口) net share sqlbakup/delete
或者用NetShareDel这个API

恢复数据库

restore database a from disk='//192.168.0.3/sqlbak/a.bak'

以下是差异还原
restore database scs from disk='//192.168.0.3/sqlbak/a.bak' WITH NORECOVERY
restore database scs from disk='//192.168.0.3/sqlbak/a1.bak' WITH NORECOVERY
restore database scs from disk='//192.168.0.3/sqlbak/a2.bak'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: