### SQL数据库局域网和远程异地备份数据库方案
#### 概述
在现代企业环境中,数据备份至关重要,尤其是在面临灾难恢复、数据丢失等风险时。本文档详细介绍了如何利用SQL Server实现局域网内的数据库备份以及远程异地备份的策略。这不仅能够确保数据的安全性,还能提高业务连续性。
#### 关键技术点
1. **存储过程封装**:通过存储过程自动执行备份任务,简化备份流程。
2. **备份文件路径设置**:定义备份文件的命名规则及存储路径。
3. **使用`XP_CMDShell`执行命令**:借助`XP_CMDShell`扩展存储过程来执行文件系统操作,如创建文件夹、删除文件等。
4. **映射网络驱动器**:通过映射网络驱动器解决权限问题,便于远程备份。
5. **服务账号配置**:调整SQL Server服务的启动账号以获得必要的网络访问权限。
#### 存储过程示例
```sql
CREATE PROCEDURE RemoteBackup
AS
BEGIN
DECLARE @datestr NVARCHAR(30)
DECLARE @bakfilename NVARCHAR(50)
DECLARE @bakpath NVARCHAR(50)
-- 时间字符串
SET @datestr = CONVERT(NVARCHAR(30), GETDATE(), 121)
SET @datestr = LEFT(@datestr, 19)
SET @datestr = REPLACE(REPLACE(REPLACE(@datestr, '-', ''), ':', ''), ' ', '')
-- BAK 文件路径
SET @bakfilename = N'CITAS_GDB_' + @datestr + '.bak'
SET @bakpath = 'z:\' + @bakfilename
PRINT @bakpath
-- 开始备份
-- 注意: (Z:后面要有一个空格)
EXEC master..xp_cmdshell 'net use z:\\192.168.20.54\Share\RemoteBackup userpassword /user:computename\username'
BACKUP DATABASE CITAS_GDB TO DISK = @bakpath
EXEC master..xp_cmdshell 'net use z: /delete'
END
```
#### 本地备份方法
如果拥有足够的权限,可以在本地进行备份操作:
```sql
-- 创建共享目录
EXEC master.dbo.XP_cmdshell 'md c:\bak'
EXEC master.dbo.XP_cmdshell 'net share bak=c:\bak'
-- 进行数据备份
BACKUP DATABASE 数据库 TO DISK = 'c:\bak\备份.bak'
-- 删除备份生成的文件
EXEC master..xp_cmdshell 'del c:\bak\备份.bak'
-- 删除共享
EXEC master.dbo.XP_cmdshell 'net share c:\bak /delete /y'
EXEC master.dbo.XP_cmdshell 'rd c:\bak'
```
#### 映射网络驱动器备份方法
当需要解决权限问题时,可以通过映射网络驱动器的方式进行备份:
1. **映射网络驱动器**
```sql
EXEC master..xp_cmdshell 'net use z: \\xz\c$ "密码"/user:xz\administrator'
```
其中,`z:` 是映射网络路径对应本机的盘符,`\xz\c$` 是要映射的网络路径,`xz\administrator` 和 `密码` 分别是远程计算机名和对应的用户名及密码。
2. **进行数据库备份**
```sql
BACKUP DATABASE 数据库名 TO DISK = 'z:\备份文件名'
```
3. **删除映射**
```sql
EXEC master..xp_cmdshell 'net use z: /delete'
```
#### 注意事项
1. **服务账号配置**:SQL Server 服务默认可能不具备访问网络资源的权限。可以通过更改服务启动账号为本地管理员来解决这一问题。在Windows Server 2003及以上版本中,默认的本地系统账号已具有访问网络资源的能力。
2. **权限问题**:如果遇到无法验证备份文件位置的情况,可能是由于SQL Server服务账号权限不足导致。此时需要检查服务启动账号,并确保其具有相应的网络访问权限。
#### 总结
通过上述方案,不仅可以实现数据库的本地备份,还可以通过网络进行远程异地备份,这对于保障数据安全、实现灾备计划具有重要意义。同时,通过对服务账号的适当配置,可以有效避免权限问题,确保备份操作顺利进行。