如何利用xp_cmdshell和共享文件夹在Sql server 2008 R2中设置跨服务器的数据库自动备份?请提供详细的步骤和Transact-SQL脚本。
时间: 2024-11-25 08:33:57 浏览: 7
要在Sql server 2008 R2中设置跨服务器的数据库自动备份,你可以使用xp_cmdshell扩展存储过程来执行网络映射和备份命令,并将备份文件存储在远程服务器的共享文件夹中。以下是具体的步骤和Transact-SQL脚本:
参考资源链接:[Sql server 2008 R2远程异地备份教程:配置与脚本操作](https://wenku.csdn.net/doc/2t2fesn2y4?spm=1055.2569.3001.10343)
1. **启用xp_cmdshell扩展存储过程**:
- 打开Sql Server Management Studio。
- 连接到你的SqlServer 2008 R2服务器。
- 在一个新的查询窗口中,执行以下命令以启用xp_cmdshell:
```sql
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
```
2. **创建共享文件夹**:
- 在远程服务器上(如***.***.*.*),创建一个共享文件夹(如C:\data),用于存放备份文件。
- 确保本地服务器(如***.***.*.*)上的SqlServer服务账户对远程共享文件夹有读写权限。
3. **编写Transact-SQL脚本进行自动备份**:
- 在Sql Server Management Studio中,编写一个Transact-SQL脚本来创建备份作业。以下是示例脚本:
```sql
USE master;
GO
-- 创建备份数据库作业
EXEC msdb.dbo.sp_add_job
@job_name = N'跨服务器备份MSGC',
@description = N'远程备份MSGC数据库到共享文件夹',
@enabled = 1,
@start_step_id = 1,
@category_name = N'Database Maintenance';
GO
-- 添加作业步骤,网络映射并执行备份
EXEC msdb.dbo.sp_add_jobstep
@job_name = N'跨服务器备份MSGC',
@step_name = N'网络映射并备份',
@subsystem = N'TSQL',
@command = N'
USE master;
EXEC xp_cmdshell ''net use Z: \\***.***.*.*\C$\data /user:username password'';
BACKUP DATABASE MSGC TO DISK = ''Z:\MSGC.bak'';
EXEC xp_cmdshell ''net use Z: /delete'';',
@on_success_action = 2,
@retry_attempts = 5,
@retry_interval = 5;
GO
-- 将作业步骤分配给作业
EXEC msdb.dbo.sp_add_jobserver @job_name = N'跨服务器备份MSGC', @server_name = N'(local)';
GO
-- 启动作业执行
EXEC msdb.dbo.sp_start_job @job_name = N'跨服务器备份MSGC';
GO
```
- 请注意将上述脚本中的`username`和`password`替换为实际的远程服务器账户用户名和密码。
4. **调度作业**:
- 如果需要定期执行备份,可以通过Sql Server Management Studio的作业调度器来设置执行时间。
通过上述步骤,你可以实现Sql Server 2008 R2中的跨服务器自动备份。这一过程不仅确保了数据的安全性,也提供了异地数据冗余和灾难恢复能力。如果想要深入学习关于SqlServer备份策略的更多细节,请参考《Sql server 2008 R2远程异地备份教程:配置与脚本操作》。这本书详细介绍了配置远程备份的每个步骤和脚本操作,不仅有助于解决你的当前问题,也能提供更全面的备份解决方案。
参考资源链接:[Sql server 2008 R2远程异地备份教程:配置与脚本操作](https://wenku.csdn.net/doc/2t2fesn2y4?spm=1055.2569.3001.10343)
阅读全文