数据库迁移、升级与备份全流程揭秘:从分离到附加的实战经验分享

1,720 阅读11分钟

前言:由于服务器数据库的服务器出现了一次硬盘坏道,引起了整个数据库损坏,之前同事还原的数据库的权限分配有异常,不管是什么数据库登录名都拥有者管理员权限,这次就需要我(小喽啰)出马解决这种异常,顺便将数据库进行升级。下面是部分SQL SERVER版本的产品秘钥,亲测有效。 这次是由SQL SERVER 2012的ENTERPRISE CORE版本升级到SQL SERVER 2017的ENTERPRISE CORE版本。安装步骤这里不详细说明。

--- sql sevrer 2012 ENTERPRISE CORE版本的秘钥
MICROSOFT SQL SERVER 2012 ENTERPRISE CORE 版的序列号:FH666-Y346V-7XFQ3-V69JM-RHW28。‌


--- SQL Server 2017 密钥  
Enterprise:TDKQD-PKV44-PJT4N-TCJG2-3YJ6B  
Enterprise Core:6GPYM-VHN83-PHDM2-Q9T2R-KBV83  
Strandard:PHDV4-3VJWD-N7JVP-FGPKY-XBV89  
Web:WV79P-7K6YG-T7QFN-M3WHF-37BXC

1.数据库迁移前的准备工作

  • 1.1 导出作业(定时任务)脚本。
  • 1.2 服务器下的安全性→登录名 脚本导出。
  • 1.3 数据库下的安全性→用户 脚本导出。(非必要)
  • 1.4 链接服务器

1.1 导出作业(定时任务)脚本

1.1.1 在Microsoft SQL Server Managerment Studio中选择视图(V)→对象资源管理器详细信息(D)

image.png

1.1.2 SSMS图形界面的对象资源管理器详细信息(D),找到对应目录,打开SQL Server代理\作业

1.1.3 选中所有需要保存的作业→ 编写脚本作业为(S)→ CREATE 到(C)→ 新查询编辑器窗口

image.png

1.1.4 保存生成的SQL脚本,后缀为.SQL。

1.2 服务器下的安全性→登录名

操作步骤与1.导出作业(定时任务)脚本一样,这里不加以阐述。

1.3 数据库下的安全性→用户 脚本导出。(非必要)

操作步骤与1.导出作业(定时任务)脚本一样,这里不加以阐述。

1.4 链接服务器

操作步骤与1.导出作业(定时任务)脚本一样。

1.4.1 建立链接服务器的两种方式(目前我知道的,不代表就只有两种)

image.png

1.4.1.1 通过SQL SERVER(Q)

image.png

image.png

1.4.1.2 其他数据源 (提供程序(P)中有很多种数据库,按需选择)

image.png image.png

2.数据库分离以及附加

SQL Server 提供了多种数据库备份和恢复方法,包括“分离/附加”数据库、“备份/还原”数据库以及数据库复制等。在此,我们将重点介绍一种在学习中常用的“分离/附加”方法。这种方法类似于大家熟悉的“文件拷贝”操作,即将数据库文件(.MDF)和相应的日志文件(.LDF)拷贝到需要恢复该数据库的系统磁盘上。

  1. 分离数据库是指将某个数据库(如 ERP)从 SQL Server 数据库列表中移除,使其不再由 SQL Server 管理和使用。此操作不会影响数据库的文件(.MDF)和对应的日志文件(.LDF),这些文件将保持完好。在分离成功后,我们可以将这些数据库文件(.MDF)和日志文件(.LDF)拷贝到其他磁盘上,以便进行备份保存。
  2. 附加数据库是指将备份磁盘中的数据库文件(.MDF)和日志文件(.LDF)拷贝到目标计算机,并将其添加到 SQL Server 数据库服务器中。这使得目标服务器可以重新管理和使用这些数据库文件。

2.1 分离数据库

分离数据前自己先要记得保存数据库的文件(.MDF)和对应的日志文件(.LDF)的目录,避免丢三落四,说的就是我,丢三落四的!!!! image.png

  1. 启动SQL Server Management Studio (SSMS) 并成功连接到数据库服务器之后,请在对象资源管理器中展开服务器节点。接着,在数据库对象下寻觅需要分离的数据库名称,此处以 TEST 数据库为例。然后,右键点击 TEST 数据库,于弹出的快捷菜单中,选择“属性”选项,以进一步查看和管理其相关设置。

image.png

  1. 在“数据库属性”窗口的左侧,“选择页”下方的区域中,点击并选定“选项”对象。接着,在右侧区域的“其他选项”列表中找到“状态”项。找到后,单击“限制访问”文本框,在其下拉列表中选择“SINGLE_USER”。

补充说明: single_user(单用户)、multi_user(多用户)和restricted_user(受限用户)描述了数据库的用户访问属性。这些属性是互斥的,设置其中一个选项将取消其他选项的设置。
在single_user模式下,数据库每次只能有一个连接。这种模式适用于维护或修复操作,确保在任何时刻只有一个用户能够访问数据库。
restricted_user模式允许多个连接,但前提是这些用户必须是被认为是“合格”的角色,如sysadmin、dbcreator、dbowner。这种模式提供了一种折衷的方式,既保证了数据库的安全性,又允许特定角色的多个用户同时访问。
multi_user模式允许任何有效的用户连接数据库。这种模式适用于日常操作,允许多个用户同时访问数据库,提高了工作效率和协作性。
通过对这些用户访问属性的合理配置,可以确保数据库的安全性和高效性,满足不同场景下的需求。

image.png

3.在上图中,限制访问选择“SINGLE_USER”,点击“确定”按钮后,将弹出一个消息框,提醒我们此操作将关闭所有与该数据库的连接,询问是否继续执行此操作(如下图所示)。请注意,在大型数据库系统中,随意断开数据库的其他连接可能是一个危险的行为,因为我们无法了解连接到数据库上的应用程序正在进行的操作。可能被断开的是一个正在执行复杂更新操作且已运行较长时间的事务。因此,在进行此类操作时,请务必谨慎并确保充分了解其可能带来的影响。

image.png

4.点击“是”按钮后,数据库名称后方将显示“单个用户”(如下图)。然后,右键单击该数据库名称,在弹出的快捷菜单中选择“任务”的子菜单项“分离”。随后,将出现如下图所示的“分离数据库”窗口。 image.png

5.在下图显示的“分离数据库”窗口中,您会看到我们计划分离的数据库名称。请确保勾选了“更新统计信息”复选框。如果“消息”列没有显示任何活动连接,那么“状态”列将显示为“就绪”;如果存在活动连接,则“状态”列将显示为“未就绪”。在这种情况下,您必须勾选“删除连接”列的复选框。 image.png

6.完成分离数据库的参数设置后,点击底部的“确定”按钮,即可完成所选数据库的分离操作。此时,在对象资源管理器中的数据库对象列表中,将不再显示刚才被分离的数据库名称TEST(如下图)。

image.png

3.1 附加数据库

  1. 请将需要附加的数据库文件和日志文件复制到预先创建好的文件夹中。(我这里是模拟演示)

image.png

  1. 在下图所示的窗口中,右键单击“数据库”对象,并在弹出的快捷菜单中选择“附加”命令,以打开“附加数据库”窗口。

image.png

  1. 在“附加数据库”窗口中,点击页面中间的“添加”按钮,这将打开一个用于定位数据库文件的窗口。在此窗口中,您需要找到刚才复制到SQL Server的“DATA”文件夹中的数据库文件目录(请注意,数据文件不一定非要放在“DATA”目录中)。然后,选择要附加的数据库文件(后缀为.MDF,如下图)。

image.png

image.png

  1. 完成上述步骤后,我们将能够在sql server management studio(ssms)的对象资源管理器中查看到刚刚附加的数据库TEST(如下图)

image.png

3.执行脚本

3.1 执行1.1 导出作业(定时任务)脚本

直接在当前的数据库打开,然后执行。(定时任务是在系统数据库[msdb]上) image.png

3.2 执行服务器下的安全性→登录名 脚本(由于前同事搞得权限有问题,我这里重新搭建)

服务器登录名是在系统数据库[master]上

3.3 执行链接服务器脚本(手工重新搭建的方式请看1.4.1)

链接服务器是在系统数据库[master]上

特别提示!!!!!!!!!!!!

SQL Server 代理的服务一定要启动,重装SQL SERVER后,系统默认是不启动的,痛的教训!!!! image.png

4.备份

4.1 打开维护计划向导

管理→维护计划→维护计划向导(W)

image.png

4.2 配置计划名和schedule

配置计划名称等信息
image.png 配置计划任务执行时间、频率
image.png

4.3 选择维护任务

我这里选择的是备份数据库(完整),简单来说就是全备。

image.png

image.png

4.4 定义“备份数据库(完整)”任务

image.png

image.png
选择备份位置时(如果管理多个数据库,建议勾选“为每个数据库创建子目录”复选框)

image.png
选择备份是否压缩以及过期时间
image.png image.png

4.5 设置维护计划报告位置

image.png image.png

4.6 查看备份计划

image.png

4.7 测试备份计划是否生效

找到创建的计划,右键执行 image.png

image.png

image.png

4.8 差异备份和事务日志备份

与完整备份相似,只需特别注意设置合适的备份频率即可。

4.9 定期删除过期的备份

同全备相同,因为事务日志备份和全备的备份文件扩展不同,因此需要创建两个维护计划。

image.png
"清除计划"任务将删除执行维护计划后留下的文件
image.png

image.png

image.png

image.png

image.png

4.10 合并任务

第4.9步中使用了两个维护计划以清理过期备份,加上原本的两个备份维护计划,共计使用了4个维护计划,这显得相当繁琐。实际上,可以将清理过期备份和全量备份的步骤合并在一个计划中,以便在每周日完成全备后,立即清理之前的过期备份。

4.11 修改维护计划

image.png

4.12 调出维护计划任务

SSMS → 视图 → 工具箱(X) image.png

image.png

image.png

image.png

image.png

image.png

5. 备份文件放在备份盘

用于复制文件和目录,并可包括子目录
/s 复制非空的目录和子目录
/e 复制所有子目录,包括空目录
/t 只复制子目录结构,不复制文件
1.初步
xcopy d:\qiyorton e:\yorton
如省略destination 即e:\yorton 将复制到当前目录
/w 在开始复制文件之前停顿,等待键响应后执行
/p 逐个确认是否要创建目标文件
/c 忽略错误
/v 在写入目标文件时验证每个文件,以确保目标文件与源文件完全相同
/q 禁止显示xcopy消息
/f 复制显示源文件名和目标文件名
/l 显示要复制的文件列表
/g 创建解密的目标文件
/d [:mm-dd-yyyyy] 只复制那些在指定的日期或指定日期之后更改过的源文件,如不包括mm-dd-yyyy,xcopy会复制比现有目标文件新的所有源文件
/k 复制文件,如源文件具有只读属性,则在目标文件中保存该属性,默认下,xcopy会删除只读属性
/r 复制制度文件
/h 复制具有隐藏和系统文件属性的文件,默认下,不复制隐藏或系统文件
/a 只复制那些具有存档文件属性设置的源文件
/n 实用ntfs 短文件或目录名创建的访问控制列表信息
/y 禁止提示您确认要覆盖现存的目标文件
/-y 提示您要覆盖现有目标文件
/z 在可重启模式中通过网络复制

image.png

image.png

image.png

image.png

image.png

----  XCOPY /d/e/c/i/h/r 本地文件放置的目录  备份盘共享的目录
XCOPY /d/e/c/i/h/r  C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Backup\TEST\*.bak \\192.168.0.44\bak
exit

image.png

6.总结

免责条款:因为我的正式环境比较简单,本次数据库的维护很多部分没有讲到,欢迎各位掘友提供下意见。大家要多多实践!!!!!!!!!

干货分享:记忆与笔记的双重奏,实战中美出深度与精度!记住,实践是验证所有能力的不二法则。无论你的技能多么出众(更何况我是“打杂专员”),总有更强的存在,真正的强者总是谦逊如扫地僧。别忘了,天龙八部中的扫地僧才是真正的武林高手!!!!!!!!!!!!!