简介这份PDF图文教程面向SQL Server 2000的数据库管理员与运维初学者聚焦数据库备份与还原这一核心运维场景帮助读者在硬件故障、软件错误或人为失误后快速恢复数据、保障业务连续性。资源包共1个PDF文件大小约327KB内容以截图配文字的方式讲解完整备份、差异备份与事务日志备份的配置方法还原数据库时从设备添加备份文件、勾选强制还原覆盖现有库、检查恢复后路径等关键操作并延伸介绍MDF与LDF文件的附加流程以及为Mssqluser账户配置目录完全控制权限的注意事项。教程按企业管理器操作路径逐步展开适合对照实际环境边看边练也便于排查还原失败、路径错误、权限不足等常见问题。目前已有302人学习适合需要快速掌握SQL Server 2000备份还原机制、夯实数据库安全策略基础的读者参考。1. 老系统还在跑SQL Server 2000 的备份还原到底难在哪机房角落里那台工控机还在跑 Windows 2000 Server上面挂着 SQL Server 2000存着十几年的生产报表和台账。某天硬盘开始咔咔响你第一反应是「赶紧备份」结果打开企业管理器发现界面跟现在的 SSMS 完全不是一回事备份出来的文件还原到另一台机器上又报错。这不是你技术不行是 SQL Server 2000 这套东西跟现在的主流版本差了两代很多默认行为、权限模型、文件格式都不一样。这篇东西讲的就是 SQL Server 2000 数据库备份还原的完整落地路径从备份类型怎么选、企业管理器图形界面怎么点、T-SQL 命令怎么写到还原时常见的「设备脱机」「独占访问」「排序规则冲突」怎么排。适合两类人看一类是还在维护老 ERP、老 MES 的一线运维另一类是接手了遗留系统、需要把数据从老机器迁出来的开发。MSSQL 2000 的备份还原不是点两下就完事里面有几个坑不提前知道还原失败率能到一半以上。2. 备份类型与恢复模型先搞清楚你要备什么2.1 完整、差异、事务日志三种备份的适用场景SQL Server 2000 支持三种主要备份类型选错了要么备份文件巨大要么恢复时丢数据。完整备份Full Backup是把整个数据库的所有数据页和日志页都写进备份文件。这是最基础的备份也是差异备份和日志备份的起点。一个 10GB 的数据库完整备份出来大概也是 10GB 左右压缩率很低。适合每天业务低谷期做一次比如凌晨两点。差异备份Differential Backup只备份自上次完整备份以来发生变化的数据页。注意是「自上次完整备份」不是「自上次差异备份」。所以差异备份的大小会随着时间推移越来越大直到下一次完整备份把它重置。适合在两次完整备份之间做增量保护比如中午十二点加一次。事务日志备份Transaction Log Backup备份的是日志文件里自上次日志备份以来的所有事务记录。这个可以做到「时间点恢复」比如数据库在下午三点十五分崩溃你可以恢复到三点十四分五十九秒的状态。但前提是数据库的恢复模型必须是「完整」或「大容量日志」不能是「简单」。恢复模型在数据库属性里设置三个选项恢复模型日志备份时间点恢复适用场景简单不支持不支持测试库、只读库完整支持支持生产库、财务数据大容量日志支持部分支持批量导入期间临时用我一般建议生产库一律用「完整」恢复模型然后每天完整备份 每小时日志备份。这样最坏情况丢一小时数据大多数老系统能接受。2.2 用企业管理器做一次完整备份的图文步骤SQL Server 2000 的企业管理器Enterprise Manager界面跟后来的 SSMS 差别很大但逻辑是一样的。跟着下面走第一步打开企业管理器展开到「Microsoft SQL Servers」→「SQL Server 组」→ 你的实例 →「数据库」找到要备份的库。第二步右键数据库 →「所有任务」→「备份数据库」。注意是「所有任务」子菜单不是直接右键就有备份选项。第三步在弹出的备份窗口里「常规」选项卡下「数据库」下拉框确认选中的是目标库「名称」填一个有意义的备份集名称比如Full_20240115「描述」可填可不填「备份」区域选「数据库 - 完整」「目的」区域点「添加」选择备份文件路径。默认路径是C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP\建议改到非系统盘第四步切到「选项」选项卡勾选「追加到媒体」或「重写现有媒体」。第一次备份选「重写」后续增量选「追加」勾选「完成后验证备份」这个很重要能提前发现备份文件损坏「媒体集名称」和「媒体集描述」可填第五步点「确定」执行。备份完成后会弹一个提示框告诉你备份了多少页、耗时多少。提示备份路径不要放在数据库数据文件所在的盘。数据盘和备份盘分开这是血泪经验。曾经见过数据盘物理损坏备份文件跟数据文件一起没了。2.3 用 T-SQL 命令备份更可控的方式图形界面适合偶尔做一次日常运维还是用 T-SQL 脚本方便放进作业里定时执行。完整备份命令-- 完整备份到指定文件覆盖已有备份集 BACKUP DATABASE [Northwind] TO DISK D:\Backup\Northwind_Full_20240115.bak WITH INIT, -- 覆盖现有备份集 STATS 10, -- 每完成10%在消息里显示进度 CHECKSUM; -- 写入校验和还原时可验证差异备份命令-- 差异备份追加到已有备份集 BACKUP DATABASE [Northwind] TO DISK D:\Backup\Northwind_Diff_20240115.bak WITH DIFFERENTIAL, -- 关键声明这是差异备份 INIT, STATS 10;事务日志备份命令-- 日志备份前提是恢复模型为完整或大容量日志 BACKUP LOG [Northwind] TO DISK D:\Backup\Northwind_Log_20240115.trn WITH INIT, STATS 10;参数说明INIT表示覆盖备份文件里已有的备份集NOINIT是追加。STATS 10让 SQL Server 每完成 10% 在消息窗口输出一行进度长备份时心里有底。CHECKSUM会计算页校验和还原时用RESTORE VERIFYONLY能提前发现坏页。DIFFERENTIAL是差异备份的开关不加就是完整备份。执行完可以用RESTORE VERIFYONLY验证备份文件是否可读RESTORE VERIFYONLY FROM DISK D:\Backup\Northwind_Full_20240115.bak WITH CHECKSUM;如果返回「备份集有效」说明文件没坏。这一步很多人跳过等到真还原时才发现文件损坏后悔药没地方买。3. 还原操作从文件到可用数据库的完整流程3.1 还原前的三个必查项还原不是点一下「还原数据库」就完事有三个东西必须先确认否则大概率翻车。第一确认备份文件的来源版本。SQL Server 2000 的备份文件不能直接还原到 SQL Server 2005 及以上版本的高兼容级别库反过来高版本的备份也不能还原到 2000。如果你要把 2000 的备份迁到新版本需要先在 2000 上还原再用导出导入或者分离附加的方式迁移。第二确认目标库是否存在。如果目标库已经存在还原时默认会覆盖但如果有活动连接会报「独占访问」错误。还原前先执行-- 把数据库设为单用户模式踢掉所有连接 ALTER DATABASE [Northwind] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;ROLLBACK IMMEDIATE会立即回滚未完成事务并断开连接比等它自己断快得多。第三确认磁盘空间。还原完整备份 差异备份 日志备份需要的空间可能比原库大因为日志文件会重建。至少留出原库大小 1.5 倍的空间。3.2 图形界面还原选项怎么勾企业管理器里右键数据库 →「所有任务」→「还原数据库」。「常规」选项卡选「从设备」还原点「选择设备」→「添加」→ 找到你的 .bak 文件如果备份文件里有多个备份集比如完整差异日志都在一个文件里会在下方列表显示勾选你要还原的那个「还原为数据库」填目标库名可以和原库名不同「选项」选项卡「将数据库文件还原为」区域确认数据文件和日志文件的路径。如果目标机器目录结构和源机器不同这里必须改否则会报「文件路径无效」「恢复完成状态」三个选项「使数据库可以继续运行但无法还原其它事务日志」——还原完整备份后选这个「使数据库不再运行但能还原其它事务日志」——还原差异或日志备份前选这个「使数据库处于只读模式」——很少用还原差异备份时先还原完整备份并选第二项NORECOVERY再还原差异备份选第一项RECOVERY。顺序不能反。3.3 T-SQL 还原命令与 NORECOVERY 的用法完整还原 差异还原 日志还原的标准脚本-- 第一步还原完整备份库保持不可用状态 RESTORE DATABASE [Northwind] FROM DISK D:\Backup\Northwind_Full_20240115.bak WITH NORECOVERY, -- 关键不恢复等待后续备份 STATS 10, MOVE Northwind_Data TO D:\Data\Northwind.mdf, MOVE Northwind_Log TO D:\Data\Northwind.ldf;MOVE子句用于重定位数据文件和日志文件。逻辑文件名Northwind_Data和Northwind_Log可以用RESTORE FILELISTONLY查RESTORE FILELISTONLY FROM DISK D:\Backup\Northwind_Full_20240115.bak;返回结果里LogicalName列就是逻辑文件名。-- 第二步还原差异备份仍然不恢复 RESTORE DATABASE [Northwind] FROM DISK D:\Backup\Northwind_Diff_20240115.bak WITH NORECOVERY, STATS 10; -- 第三步还原日志备份这次恢复 RESTORE LOG [Northwind] FROM DISK D:\Backup\Northwind_Log_20240115.trn WITH RECOVERY, -- 最后一步用 RECOVERY STATS 10;NORECOVERY和RECOVERY的区别是NORECOVERY让数据库处于「正在还原」状态可以继续还原后续备份RECOVERY表示还原链结束数据库变为可用。如果中间某一步忘了加NORECOVERY后续还原会报错只能从头再来。注意还原日志备份时如果日志链断了比如中间缺了一个日志备份文件SQL Server 会拒绝还原。所以日志备份文件要按顺序编号保存别乱删。4. 避坑与排查还原失败时先看这几个地方4.1 报「独占访问」或「数据库正在使用」现象还原时弹窗提示「因为数据库正在使用所以无法获得对数据库的独占访问权」。原因还有活动连接连着目标库可能是查询窗口、报表工具、或者某个忘了关的应用程序。解决执行ALTER DATABASE [库名] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;强制踢掉所有连接。如果还不行用sp_who2查活动连接找到 SPID 后用KILL SPID号杀掉。杀之前确认那个连接不重要。4.2 报「设备脱机」或「文件路径无效」现象还原时报「无法打开备份设备」或「操作系统错误 3系统找不到指定的路径」。原因备份文件路径在目标机器上不存在或者 SQL Server 服务账户没有权限访问那个目录。解决先确认文件确实在那个路径下。然后检查 SQL Server 服务账户通常是LocalSystem或某个域账户对备份目录有没有读权限。最省事的办法是把备份文件放到 SQL Server 默认的 BACKUP 目录下那个目录权限一定是配好的。4.3 还原后中文变问号或排序规则冲突现象还原到另一台机器后中文数据显示成问号或者查询时报「排序规则冲突」。原因源库和目标库的排序规则Collation不一致。SQL Server 2000 默认排序规则是SQL_Latin1_General_CP1_CI_AS但有些老系统装的时候选了中文排序规则。解决还原时无法直接改排序规则。要么在目标实例上重建一个相同排序规则的库再还原要么还原后用ALTER DATABASE改排序规则2000 不支持直接改需要导出重建。最稳妥的办法是源库和目标库用同一个安装介质、同一套排序规则。4.4 备份文件比数据库还大现象一个 5GB 的数据库完整备份出来 8GB。原因备份文件包含日志文件里未截断的部分。如果恢复模型是完整且很久没做日志备份日志文件会一直增长备份时也会把日志一起备进去。解决先做一次日志备份截断日志再做完整备份。或者临时把恢复模型改成「简单」BACKUP LOG WITH TRUNCATE_ONLY截断日志2000 支持这个命令2008 以后废弃了再改回完整。4.5 还原到新版本后兼容级别不对现象把 2000 的备份还原到 SQL Server 2005/2008 后某些 T-SQL 语法报错。原因新版本实例的兼容级别默认是当前版本2000 的语法可能不兼容。解决还原后执行EXEC sp_dbcmptlevel Northwind, 80;把兼容级别设为 80对应 SQL Server 2000。但注意兼容级别只影响语法解析不影响存储引擎行为。长期看还是要把应用迁移到新语法。5. 把备份还原做成可重复的作业几个进阶技巧5.1 用 SQL Server 代理作业自动备份SQL Server 2000 的代理SQL Server Agent可以定时执行备份脚本。在企业管理器里展开「管理」→「SQL Server 代理」→「作业」右键新建作业。步骤里填 T-SQL 命令比如DECLARE filename VARCHAR(200) SET filename D:\Backup\Northwind_Full_ CONVERT(VARCHAR(8), GETDATE(), 112) .bak BACKUP DATABASE [Northwind] TO DISK filename WITH INIT, STATS 10, CHECKSUM这段脚本用日期动态生成文件名每天备份不会互相覆盖。CONVERT(VARCHAR(8), GETDATE(), 112)把当前日期转成YYYYMMDD格式。调度里设每天凌晨两点执行。通知里可以配邮件告警备份失败时发邮件。2000 的邮件配置走 SQL Mail需要先在服务器上配好 MAPI 客户端这一步比较折腾但配好之后省心。5.2 备份文件校验与定期还原演练备份不做还原演练等于没备份。我一般每个月抽一个备份文件在测试实例上做一次完整还原确认三件事文件能读、数据完整、应用能连。校验用RESTORE VERIFYONLY WITH CHECKSUM还原演练用RESTORE DATABASE ... WITH NORECOVERY然后RESTORE DATABASE ... WITH RECOVERY。演练完把测试库删掉别占地方。5.3 从 SQL Server 2000 迁移到新版本的备份还原路径如果目标是把数据从 2000 迁到 2016/2019直接还原 .bak 文件不行。常见做法是第一步在 2000 上做完整备份。 第二步在 2000 上还原到一个临时库确认数据没问题。 第三步用「导入和导出数据」向导DTS 在 2000 里叫 DTS2005 以后叫 SSIS把表和数据导到新实例。或者用bcp命令行工具导出成文本文件再BULK INSERT导入。 第四步迁移存储过程、视图、触发器注意语法兼容性。这条路我走过好几次最麻烦的不是数据是存储过程里的老语法。比如**外连接写法在 2005 以后就不支持了必须改成LEFT JOIN。建议迁移前先用升级顾问Upgrade Advisor扫一遍它会列出所有不兼容的地方。5.4 一个我常用的备份脚本模板最后放一个我用了很多年的备份脚本模板直接改库名和路径就能用-- 每天完整备份保留最近7天 DECLARE dbname VARCHAR(50) DECLARE path VARCHAR(200) DECLARE filename VARCHAR(300) SET dbname Northwind SET path D:\Backup\ SET filename path dbname _Full_ CONVERT(VARCHAR(8), GETDATE(), 112) .bak BACKUP DATABASE dbname TO DISK filename WITH INIT, STATS 10, CHECKSUM -- 删除7天前的备份文件 DECLARE del_filename VARCHAR(300) SET del_filename path dbname _Full_ CONVERT(VARCHAR(8), DATEADD(DAY, -7, GETDATE()), 112) .bak EXEC master.dbo.xp_cmdshell del del_filenamexp_cmdshell默认是关闭的需要先用sp_configure打开。这个命令有安全风险生产环境慎用。如果不想用xp_cmdshell可以用维护计划里的「清除维护任务」来删旧文件。这套东西我维护了快十年最大的教训就是备份文件一定要在另一台机器上验证过才算数。曾经有一次服务器主板烧了换机器后发现备份文件所在的磁盘有坏道三个备份文件坏了两个。从那以后我坚持「备份 校验 异地存放」三件事缺一不可。希望帮到你。本文还有配套的精品资源点击获取