有一SQLserver服务器,有SA密码, 要对远程数据库进行异地备份,备份到客户端。
客户端为XP系统,FAT32,机器名 IT-Jet 用户名 Jet
首先,服务器要允许执行xp_cmdshell存储过程
1.共享客户端文件夹 名称为F
2.连接到数据库master执行
use master
3.登录共享机器
exec xp_cmdshell "net use //it-jet/f jet/user:it-jet/jet"
4.即可使用共享路径远程备份数据库
Backup database DBNAME to Disk='//it-jet/F/dbname.bak'
--差异备份
Backup database DBNAME to Disk='//it-jet/F/dbname.bak' WITH DIFFERENTIAL
5: 删除客户机上共享文件夹 在程序代码中调用(或者CMD窗口)
master..xp_cmdshell 'net share SqlBak /delete'
6: 恢复数据库
Restore database DBNAME from disk=''//it-jet/F/dbname.bak'
--差异还原
Restore database DBNAME from disk=''//it-jet/F/dbname.bak' WITH NORECOVERY
在远程备份过程中,曾出现一个错误:ackupMedium::ReportIoError: 在备份设备“//it-jet/f/DBNAMEbak”上 write 失败。操作系统错误 112(磁盘空间不足。)。
可是磁盘空间总量是远远大于数据库大小的。原来是FAT32最大的文件只支持4GB,大于它的就无法存储,因此将客户机的分区转换为NTFS后成功解决这个问题。