Backup Exec 2010备份SQL Server 2008 R2:从代理安装到日志链还原
简介面向数据库管理员与系统运维人员这份doc文档专门讲解Symantec Backup Exec 2010赛门铁克备份执行软件对SQL Server 2008 R2数据库进行备份与还原的完整操作属于数据库与文档资料类学习材料。内容以图文步骤完整呈现了安装Agent、查看SQL信息、创建测试库和数据表、定义备份作业、配置资源凭据与通知方式、选择设备介质及完全备份类型、设置Microsoft SQL相关选项等关键环节还原部分则演示了删除现有数据库后还原、覆盖现有数据库还原、以另一数据库名重定向还原三种典型场景便于理解不同恢复方式的适用情形。资源为单个doc文件大小约2.46MB配有大量界面截图与操作说明可按文档顺序完成一次端到端的备份还原演练快速形成可复用的运维流程。目前已有296人学习/下载适合需要掌握企业级备份软件实操技巧的初、中级运维人员也可作为制定数据库灾备与恢复策略时的参考依据。1. Backup Exec 2010 备份 SQL Server 2008 R2先搞清备份链路再动手很多团队第一次接触 Symantec Backup Exec 2010 时习惯把 SQL Server 2008 R2 的 mdf 和 ldf 文件直接复制走以为这样就算完成了备份还原。真正恢复时才翻车要么数据库显示“可疑”要么日志链断裂无法还原到秒级。实际上Backup Exec 2010 备份 SQL Server 2008 R2 数据库走的是应用级一致链路通过 SQL VSS Writer 与实例通信生成一套可验证的备份集。这篇笔记会从安装代理、配置权限、创建备份作业到还原演练把参数、边界和坑都讲清楚。适合正在接手老环境、需要在 Backup Exec 2010 上完成数据库备份还原的运维和 DBA。2. 备份前准备Agent 安装、服务账户与 SQL Server 恢复模式2.1 选对 AgentBackup Exec 2010 针对 SQL Server 的组件Backup Exec 2010 不是装上主程序就能识别 SQL Server 数据库。它默认只会做文件级别的备份把 mdf/ldf 当作普通文件读取这样备份出来的东西在还原时几乎不可用。常见做法是在备份服务器上安装“Agent for Windows Systems”并在目标 SQL Server 机器上安装同一个代理组件同时需要启用其中的“SQL Server 支持”选项。安装介质在 Backup Exec 2010 安装目录下的 Agents 文件夹里运行 AgentSetup.exe 后选择目标服务器组件列表里会有 SQL Server 选项勾选后会自动部署。部署完成需要重启目标机上的 Backup Exec Agent 服务否则 VSS 写接口可能加载不到。目标服务器是 Windows Server 2008 R2、SQL Server 2008 R2 时这个版本的代理是兼容的。要注意 2010 版本不认更新的 Windows Server如果现在用 2016/2019 宿主机跑老域控可能要先确认兼容性。我一般会在安装前用 Backup Exec 自带的“Remote Agent Install”向导做一次推送推送失败时再手工安装原因多半是防火墙没有放开 6106 端口Backup Exec 代理通信端口或者目标机没开文件和打印机共享。代理装好后在 Backup Exec 管理控制台里能看到目标服务器显示为“已安装 Remote Agent版本 2010”这才能进入下一步。2.2 服务账户与 SQL Server 权限最小化配置备份作业能否成功很大程度取决于 Backup Exec 服务以什么身份运行。如果服务跑在 Local System 下它访问远程 SQL Server 实例时会以匿名身份执行SQL Server 那边基本不会给权限。常见做法是给 Backup Exec 服务配置一个域账户并把这个账户加入目标 SQL Server 的 sysadmin 固定角色。虽然 sysadmin 权限偏大但在 Backup Exec 2010 这种老版本上权限最小化反而容易踩坑——它需要通过 VSS 读取 SQL Writer 元数据有时还要查询 msdb 中的备份历史表只有 db_backupoperator 角色会在验证阶段报权限不足。登录 SQL Server 后执行下面的脚本检查当前实例的登录和角色USE [master]; GO CREATE LOGIN [DOMAIN\be_svc] FROM WINDOWS WITH DEFAULT_DATABASE [master]; GO EXEC sp_addsrvrolemember loginame NDOMAIN\be_svc, rolename Nsysadmin; GO这里DOMAIN\be_svc是备份服务群组里的专门账户建议不要和日常运维账户混用。参数说明sp_addsrvrolemember是 SQL Server 2008 R2 时代的固定写法如果是更新版本可以用ALTER SERVER ROLE sysadmin ADD MEMBER但在这个标题场景里还是以老语法为准。创建登录后还要确认 Backup Exec 控制台里“登录账户”设置使用的是这个域账户而不是本机 Administrator。曾经遇到过一个环境SQL 登录建好了但备份服务用的是本地 Administrator结果备份计划一直失败日志里没有任何 SQL 相关报错最后才发现是身份不对。2.3 数据库恢复模式决定能不能做日志备份SQL Server 2008 R2 的恢复模式有三档SIMPLE、FULL、BULK_LOGGED。Backup Exec 2010 支持完整备份、差异备份和事务日志备份但只有 FULL 恢复模式才允许事务日志备份。如果数据库跑在 SIMPLE 下日志会自动截断Backup Exec 中即使勾选了“事务日志”选项作业也会跳过日志部分只做完整备份。很多 DBA 不知道这一点在控制台里看到作业状态为“成功”实际日志备份从未发生过。先查每个库的恢复模式SELECT name, recovery_model_desc FROM sys.databases ORDER BY name;如果返回SIMPLE需要改成FULLALTER DATABASE YourDatabase SET RECOVERY FULL; GO参数说明recovery_model_desc返回FULL、SIMPLE、BULK_LOGGED三种字符串直接可读。改成 FULL 之后必须立刻做一次完整备份用来初始化日志备份链。这一步容易被忽略——只改模式不备份日志备份会找不到可用的基线与完整备份后续恢复时一样会报错。BULK_LOGGED 模式比较特殊它也能做日志备份但日志备份中的批量操作可能无法还原到秒级如果业务对时间点还原敏感建议统一用 FULL。3. 创建备份作业VSS 选项、介质集与完整/差异/日志组合3.1 新建备份作业选择数据库对象与 VSS 选项在 Backup Exec 2010 控制台左侧点击“Job Setup”区域选择“New Job”进入备份作业向导。向导第一步是选择服务器展开目标 SQL Server 实例节点后会看到一个“SQL Server”分类展开就能列出所有可备份的数据库。这一步要注意区分系统库和用户库master 和 msdb 必须备份但不需要做事务日志备份用户库根据业务需求勾选。勾选之后不要急着提交先进入“Properties”里的“SQL Server”标签页。这里最关键的是 VSS 选项。Backup Exec 2010 对 SQL Server 的备份默认启用 VSS它会调用 SQL Server 的 VSS Writer确保备份出来的是一致性快照。如果手工关闭 VSS代理就会回退到非应用感知模式备份文件大小可能正常但还原后数据库会处于不一致状态。我一般会保留默认的“Use Microsoft VSS”选项并在“Advanced”里勾选“Copy backup”的关闭按钮。注意不要同时启用“Snapshot”和“Backup to Disk”两者会互相干扰。3.2 备份目标与介质磁盘文件夹、磁带设备与命名管道备份目标一般有两种选择磁盘文件夹Backup-to-Disk folder和磁带设备。Backup Exec 2010 对磁带支持比较稳定但磁带机的顺序读写特性导致恢复单个数据库时速度很慢而且驱动兼容性在虚拟化环境下经常出问题。我现在的习惯是先备份到磁盘文件夹再由 Backup Exec 的“Duplicate”功能复制到磁带避免直接备份到磁带导致作业超时。磁盘文件夹需要指定一个本地或网络的 NTFS 路径。新建文件夹时可以选择“作为磁盘备份文件夹”并且为它分配空间。参数设置上“覆盖周期”指的是介质集里同一备份集的可用期一般设为 7 天“保留周期”设为 30 天。如果设得过短老备份会被自动覆盖等到你想还原一周前的数据时才发现备份集已经被回收了。最常见做法是每周备份后做一次“介质集导出”另存一份离线磁带防止磁盘损坏。3.3 备份计划完整/差异/日志备份的时间组合创建作业时可以直接定义日程。对于大部分业务库我会设置一个三层计划周日 22:00 完整备份周一至周五 22:00 差异备份日志备份每 30 分钟一次。在 Backup Exec 2010 中完整备份和差异备份可以写在同一个作业里通过“Schedule”里的“Run weekly”来区分星期日志备份需要单独建另一个作业选择“Transaction Log Backup”类型周期设为“Every 30 minutes”。组合起来有三个原因完整备份恢复最慢不能天天做差异备份只备份自上次完整备份以来的变化恢复时只需要完整备份加最后一个差异日志备份提供秒级恢复耗时最短但数量很多。参数上日志备份的“Allow overwrite”要设为“继续追加”不要设成覆盖否则历史日志备份集互相覆盖后时间点还原会缺少 LSN 链。只要有一个日志备份缺失之后的所有日志备份都无法应用。3.4 验证备份作业查看作业状态与日志提交作业后在“Job Monitor”里能看到活动任务。状态显示绿色勾不一定是好事需要点开作业属性查看“Detail”里的 SQL Server 项目。Backup Exec 2010 的日志分“Application”和“System”两个 TabSQL Server 备份具体日志会挂在“Application”下面。我会重点检查是否有“SQLVSSWriter”警告或者“VSS”错误即使整体状态成功这类警告也可能导致还原后数据库出现错误页。如果作业失败先看是否作业被锁定在“Queued”状态。这是老版本常见问题原因是服务器上另一个备份代理正在处理同一实例。解决方式是暂停无关作业等代理空闲后重新启动。另外备份作业写出的文件命名规则可以在“Properties”中修改建议加上数据库名和日期例如DB_YourDatabase_20250415.bkf这样还原时挑选备份集会清晰很多。4. 还原 SQL Server 2008 R2还原向导、重定向与孤立用户处理4.1 还原向导选择备份集与还原选项还原操作在 Backup Exec 2010 的“Restore”向导中完成。进入后选择“从介质还原”介质集会列出所有备份集。找到目标数据库后勾选最近一次完整备份再勾选需要的差异备份和事务日志备份Backup Exec 会按 LSN 顺序自动排列。还原选项中最关键的是“Commit transaction after restore”——默认勾选表示执行RESTORE ... WITH RECOVERY数据库直接可访问如果取消勾选数据库会停在RESTORING状态供你继续应用日志。后者用于需要手动控制恢复时间点的场景。参数上还有一个“Overwrite existing database”选项默认是关闭的。如果你要把备份还原到一个已存在同名数据库的实例上必须勾选否则作业会在最后一步失败。这个选项很危险它会直接覆盖目标库的现有内容所以生产环境操作前务必确认目标实例的主机名。我习惯先不勾选引导一次完整试还原到另一个实例再回头处理原库避免误操作。4.2 还原到原实例处理数据库连接和事务日志还原到原实例最常遇到的情况是目标数据库还有活动连接导致还原作业报“数据库正在使用”。SQL Server 在还原前会试图独占数据库如果连接池没释放它就会等 3 次重试后失败。解决方法是在 SQL Server Management Studio 里将库切换到单用户模式USE [master]; GO ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO这段脚本的原理是强制回滚所有未完成事务然后让数据库进入单用户模式。参数说明ROLLBACK IMMEDIATE会断开所有连接属于线上操作建议在维护时间窗口执行。执行完再回到 Backup Exec 还原向导正常提交。还原完成后记得把数据库切回多用户模式ALTER DATABASE YourDatabase SET MULTI_USER; GO这里容易踩坑还原完成后如果忘记切换应用连接会全部失败。很多生产事故就是这么来的。4.3 还原到新实例/异机重定向与孤立用户处理如果只是做恢复演练或把备份还原到测试服务器需要选择“重定向到不同的 SQL Server 实例”。向导里会要求输入目标服务器名、实例名和数据库文件位置。默认情况下目标实例的 SQL 服务账户需要有读取备份文件所在路径的权限如果备份在 Backup Exec 服务器本地磁盘目标实例可能无法直接访问。还原完成后数据库里的业务用户会变成“孤立用户”因为用户身份与目标实例的 SQL Server 登录没有关联。现象是在 SSMS 里看数据库用户正常但应用登录时报“无法登录因为当前用户不受信任”。修复命令USE YourDatabase; GO EXEC sp_change_users_login Auto_Fix, user1; GOsp_change_users_login会把当前数据库用户映射到一个同名登录上并自动更新 SID。参数说明Auto_Fix只能用于登录名与数据库用户名一致的情况如果登录名不同先在 master 中创建登录再用UPDATE模式手动映射。SQL Server 2008 R2 支持这个存储过程如果是更高版本官方推荐用ALTER USER方式但老环境这个语法仍然可用。5. Backup Exec 2010 备份还原的 4 个高频坑与排查步骤5.1 SQL VSS Writer 不可用导致备份失败现象备份作业提交数秒后失败事件日志中出现SQLWriter服务错误或 VSS 无法写快照的信息。查看 Backup Exec 作业日志显示 SQL Server 备份组件未初始化。原因SQL Server 2008 R2 的 VSS Writer 服务服务名为 SQLWriter未启动或者服务器上的 VSS 系统服务异常。另有一种情况是虚拟机环境中虚拟化软件也调用 VSS与 Backup Exec 的 VSS 请求冲突导致 Writer 超时。解决先在 SQL Server 所在机器上打开“服务”确认SQL Server VSS Writer服务状态是“正在运行”启动类型设为“自动”。然后重启 Backup Exec 的 Remote Agent 服务。如果是虚拟机环境检查虚拟化备份策略不要同一时间既做虚机快照又做 BE 数据库备份安排错开时间窗口。这个坑非常隐蔽虚拟机快照备份本身不会报错但会导致 SQL Writer 忙后续 BE 作业失败。5.2 还原后数据库显示“正在加载”或“可疑”现象还原向导报告成功但 SSMS 中数据库状态显示Restoring...或Suspect应用无法连接。原因状态为Restoring...说明还原向导里“Commit transaction after restore”的选项被取消或者日志备份没有全部应用完数据库处于等待恢复状态。状态为Suspect则说明备份集本身损坏或者还原目标文件路径错误导致 SQL Server 无法初始化数据页。解决先执行语句确认状态SELECT name, state_desc FROM sys.databases WHERE name YourDatabase;如果state_desc是RESTORING执行一次RESTORE DATABASE YourDatabase WITH RECOVERY即可。如果已经是SUSPECT不要尝试多次恢复先用RESTORE VERIFYONLY验证备份文件是否完整RESTORE VERIFYONLY FROM DISK D:\Backup\YourDatabase_20250415.bkf;RESTORE VERIFYONLY不会还原数据只检查备份集结构和校验值语法是指定备份文件的完整路径。如果它失败说明备份文件损坏这时候只能找到上一次成功备份重新还原没有后悔药。日常预防方法每个备份作业完成后在 Backup Exec 里启用“验证备份”选项相当于自动跑一次 VERIFYONLY。5.3 日志备份链断裂现象在一定数量的日志备份后还原操作报错“此备份中的日志 LSN 与数据库当前 LSN 之间缺少日志块”导致还原无法继续。原因数据库恢复模式被改成 SIMPLE或某个第三方脚本在 Backup Exec 之外手动执行了BACKUP LOG WITH TRUNCATE_ONLY这个选项在 SQL Server 2008 R2 中已废弃但仍有遗留脚本导致日志链被截断。另外如果误删了完整备份或者完整备份后又执行了差异备份但没有把完整备份纳入介质集也会出现断链。解决打开 Backup Exec 的“作业日志”确认最后一次完整备份的时间和状态然后在 SQL Server 中查询 backup 历史SELECT database_name, type, backup_finish_date, first_lsn, last_lsn FROM msdb.dbo.backupset WHERE database_name YourDatabase ORDER BY backup_finish_date;type字段标识备份类型D完整备份I差异备份L日志备份。查看first_lsn和last_lsn如果相邻日志备份之间first_lsn不等于上一个的last_lsn说明中间有断层。处理方式只有一个重新做一次完整备份然后基于这个新完整备份重新开始日志链。之后要把数据库恢复模式锁定为 FULL并在备份作业的“属性”里勾选“如果恢复模式不匹配则暂停作业”防住下次再被改动。5.4 备份作业超时或速度慢现象备份作业一直显示“运行中”耗时数小时不结束或者备份文件巨大导致磁盘空间耗尽。备份到磁带时尤为明显磁带机经常跳带。原因最常见的是防病毒软件实时监控备份文件夹每写一个数据块都要扫描拖慢备份。另一个因素是 Backup Exec 2010 默认会使用压缩对 CPU 占用比较高老服务器会明显卡顿。还有一个原因是备份目标磁盘可用空间不足Backup Exec 在写满后会等待操作员介入。解决在备份服务器和目标代理服务器上把 Backup Exec 程序目录、磁盘备份文件夹目录加入防病毒排除列表同时排除C:\Program Files\Symantec\Backup Exec和 SQL Server 数据目录。备份目标放在独立的物理卷上避免与 SQL Server 数据文件同盘否则磁盘 IO 会互相抢占。如果始终很慢可以减少并发写入在 Backup Exec 的“全局设置”里降低“Agent 并发写入数”或把高吞吐的工作流改成先在本地备份再用 duplicate 复制到存储。6. 备份还原验证RESTORE VERIFYONLY 与备份健康巡检脚本我现在的习惯是每次调整备份策略后一定在 Backup Exec 里做一次测试还原并且用 SQL Server 自带的RESTORE VERIFYONLY定期验证备份文件。不要相信作业状态的绿色图标Backup Exec 2010 的作业状态只代表备份过程完成不代表备份内容可用。最简单的验证方法就是在还原向导里直接选择“验证”模式Backup Exec 会调用 VSS 检查和校验后端数据这个操作不占用额外空间但会读一遍数据文件建议每月一次。针对 SQL Server 2008 R2 的备份巡检我会每天运行下面这个脚本检查每个数据库的恢复模式、最近备份时间和是否可能是断链状态SELECT A.name, A.recovery_model_desc, ISNULL(MAX(B.backup_finish_date), 无备份) AS last_backup, DATEDIFF(hour, MAX(B.backup_finish_date), GETDATE()) AS hours_since_last_backup FROM sys.databases A LEFT JOIN msdb.dbo.backupset B ON A.name B.database_name AND B.type D WHERE A.state_desc ONLINE AND A.name ! tempdb GROUP BY A.name, A.recovery_model_desc ORDER BY hours_since_last_backup DESC;这个脚本的逻辑是列出所有在线数据库并关联到 msdb 中最近一次完整备份。backup_finish_date如果是空说明这个库从来没有完整备份hours_since_last_backup超过 24 小时就需要关注。参数说明B.type D筛选完整备份如果看差异备份改成I日志备份改成L。我用这个脚本抓到过两次问题一次是某库恢复模式被改成 SIMPLE 后差异备份一直失败另一次是磁盘空间不足完整备份连续三天未执行作业日志却没提示。有了巡检代码至少能提前发现风险。最后说一个吃过亏的教训之前有一次把备份作业写到了磁带但磁带机驱动在重启后掉了作业显示“成功”但实际写进了不可读的介质。后来每次备份完我都会在 Backup Exec 里打开“介质集”看一遍确认磁带内容。希望帮到你。本文还有配套的精品资源点击获取