公司考虑到数据的安全性,除了在数据库服务器本地做备份外,要求弄个异地备份,也就是将服务器上的数据库定时备份到另外指定的服务器上。
我就考虑使用定时任务来完成这个异地备份要求。
一,备份服务器端
1.在备份服务器上空出一个磁盘,用来存放备份数据。例如G盘;
2.在该磁盘里建个文件夹用于存放备份文件,并将文件夹设置为共享
(如将G盘,DB_BC设置为共享)
设置共享用户,这里指定sqladmin用户(后面会用到这个用户)
二.数据库服务器端
在数据库服务器上新建一个作业,来执行如下远程备份语句
--打开允许执行xp_cmdshell
EXEC sp_configure 'xp_cmdshell',1
exec master..xp_cmdshell 'net use \\10.11.12.13\DB_BC password /user:10.11.12.13\username'
backup database xxx to disk='\\10.11.12.13\DB_BC\BC.bak' with init
exec master..xp_cmdshell 'net use \\10.11.12.13\DB_BC /delete'
--关闭允许执行xp_cmdshell
EXEC sp_configure'xp_cmdshell', 0
--关闭多用户连接 在cmd执行 net use*/del/y
其中:
10.11.12.13-----是备份服务器的 IP地址;
DB_BC----------是在备份服务器上设置了共享用于存放备份文件的文件夹名称
username,password-----指的是能登陆服务器的用户名和密码(设置共享文件是必须指定这个用户,如sqladmin)
xxx--------------是要备份的数据库名称
BC.bak----------是备份后文件名
正常情况下,如上操作就能完成远程备份功能了。
如果执行远程备份报错 可以尝试排查以下情况:
1.xp_cmdshell是不是没有开启
2.任务所有者与当前用户不统一,则改为统一