SQL SERVER 数据库升级操作流程

本文详细介绍了如何将运行在Windows Server 2008上的SQL Server 2008数据库迁移到Windows Server 2019并升级至SQL Server 2019的过程。包括前期准备、数据库还原、版本升级、异常处理等关键步骤,涉及系统数据库的恢复、服务配置、业务数据库还原以及升级过程中可能遇到的问题和解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:生产环境变更,需要将SQL2008数据库升级为SQL2019版本(高低版本数据库都是专业版),做法搭建目标环境,将目标环境操作系统改成Windows Server2019,安装SQLServer2008(为了使生产环境的备份能够正常还原到目标环境中,后续平滑升级数据库版本)

生产环境:Windows Server 2008 +SQL Server 2008

目标环境:Windows Server 2019 +SQL Server 2008(需升级成2019)

一、前期准备

1、将生产环境中的系统数据库+业务数据全部完整备份

2、将目标环境中的服务器名称设置成与生产环境一致、数据实例名称也一样设置成相同的(若不同会踩很多坑)

      例如你生产环境的服务器名称、实例名称叫A,那么你在目标环境中也将服务器名称、实例名称设置成A

3、系统盘符最好也一致,涉及到系统数据库原始路径

二、数据库还原

1、系统数据库还原

      (1)、进入单用户模式还原数据库

                  ①、 使用netstat -ano |findstr 1433  查看連接數據庫的進程。

                  ②、 停止SqlServer所有服务

                  ③、 以管理员運行cmd,单用户启动SqlServer服务

執行:net start MSSQLSERVER /m 

  ④、 恢复master数据库,使用SSMS(单用户下用管理员账号登录)

          运行以下SQL语句:

RESTORE DATABASE master FROM 
DISK='G:\master\master_backup_Test.bak' with replace

  注:只有Master數據庫在管理員模式下恢復。其他數據庫無需。恢復master后,

sql服務終止,需要重新啟動,以恢復其他數據庫。由于恢复的master数据库里记载其他数据库的路径和现在的路径不一致,这时候重新启动SQLSERVER会失败,必须用跟踪标志3608来启动    net start MSSQLSERVER /f  /m  /T3608

                用sqlcmd连接修改其他数据库的文件路径到现有的正确路径

                sqlcmd /E /S  數據庫名稱(服務器名)

                還原Master數據庫后,其他系統數據庫文件路徑改為原數據庫路徑,

                為保證數據庫正常運行,需修改為現數據庫文件正確路徑。

                用下面的语句修改各个系统数据库的文件路径:

--resource数据库
ALTER DATABASE  mssqlsystemresource  MODIFY 
FILE(NAME=DATA,FILENAME=' 
D:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\mssqlsystemresource.mdf
)
GO
  
ALTER DATABASE mssqlsystemresource MODIFY FILE(NAME=LOG,FILENAME=' c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\mssqlsystemresource.ldf')
GO

--msdb数据库
ALTER DATABASE msdb MODIFY 
FILE(NAME=MSDBData,FILENAME='c:\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdbdata.mdf')
GO

ALTER DATABASE msdb MODIFY 
FILE(NAME=MSDBLog,FILENAME='c:\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdblog.ldf')
GO

--model数据库
ALTER DATABASE model MODIFY 
FILE(NAME=modeldev,FILENAME='c:\Microsoft SQL Server\MSSQL.4\MSSQL\Data\model.mdf')
GO

ALTER DATABASE model MODIFY 
FILE(NAME=modellog,FILENAME='c:\Microsoft SQL Server\MSSQL.4\MSSQL\Data\modellog.ldf')
GO
--tempdb数据库
ALTER DATABASE tempdb MODIFY 
FILE(NAME=tempdev,FILENAME='c:\Microsoft SQL Server\MSSQL.4\MSSQL\Data\tempdb.mdf')
GO

ALTER DATABASE tempdb MODIFY 
FILE(NAME=templog,FILENAME='c:\Microsoft SQL Server\MSSQL.4\MSSQL\Data\templog.ldf')
GO

                 ⑤、恢复msdb数据库

                        关闭SQL Agent 用restore命令恢复msdb

                 ⑥、退出 sqlcmd 指令:exit

                 ⑦、關閉 SQLserver服務

                        sqlcmd指令:NET STOP MSSQLSERVER  或在配置管理中手動關閉

                 ⑧、正常模式啟動MSSQLSERVER(非單用戶模式)

        sqlcmd指令:NET START MSSQLSERVER 或在配置管理器中手動啟動

                 ⑨、在sqlcmd中執行:

--恢復msdb數據庫
RESTORE DATABASE msdb FROM DISK='c:\lab\msdb.bak'
WITH move 'MSDBData' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdbdata.mdf',
MOVE 'MSDBLog' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\msdblog.ldf' ,REPLACE
--恢复model数据库
RESTORE DATABASE model FROM DISK='c:\lab\model.bak'
WITH move 'modeldev' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\model.mdf',
MOVE 'modellog' 
TO 'C:\Program Files\Microsoft SQL Server\MSSQL.4\MSSQL\Data\modellog.ldf' ,REPLACE

              最后:

                     退出 sqlcmd Exit

                     關閉 SQLSERVER服務:NET STOP MSSQLSERVER

                     正常模式啟動SQLSERVER:NET START MSSQLSERVER

2、同步计算机名称及数据库实例名称

select @@servername
select serverproperty('servername')
 
sp_dropserver '数据库服务器名称'
go 
sp_addserver '计算机名称','local'
go

3、还原业务数据库(此步骤简单不做详细说明)

    (1)、在目标环境中建立与生产环境中名称一致的业务数据库

    (2)、将生产环境中的业务数据库完整备份依次还原到目标环境中

三、数据库版本升级

1、安装SQL SERVER 2008 SP4补丁版本(10.0.16000)

     注:SQL server 2008不支持直接升级到2019需要安装补丁,然后分段升级(比较繁琐)

     升级完成用以下指令检测版本

select @@version

2、升级数据库至SQL SERVER 2016 SP2(13.0.5026)

3、升级至SQL SERVER 2019(15.0.2000),升级时需勾选卸载报表服务。

      注 SQL Server 2008报表服务跟SQL Server2019的不兼容所以需要卸载报表服务

至此数据升级操作已完成

四、报表服务安装及报表数据库还原 

1、报表服务安装详细步骤

安装 SQL Server Reporting Services - SQL Server Reporting Services (SSRS) | Microsoft Learn

2、报表数据库还原

 五、测试功能是否正常

数据库还原之后相关检测工作

1

还原之后数据库各账号是否能够正常使用

2

系统数据库还原之后各项配置参数是否有异常

3

在SQLserver配置管理器中开启SQLserver依赖的各项服务及配置启动TCP/IP协议

4

链接服务器是否正常运行(测试连接服务器的增刪改及在分布式事物中是否正常运行)

5

各个代理JOB是否正常运行

6

发布订阅是否能够正常创建及运行

7

有些链接服务器采用服务器名称创建、所以注意生产环境中系统盘下Host文件中的映射需要导入目标环境

8

配置并开启分布式事物协调器(DTC服务)

9

其他补充(欢迎大家提出补充)

 六、还原过程中常见异常处理方式

(1)服务器更换完成之后链接服务器密码失效问题

错误代码:15466   解密过程中出错

解决方法:ALTER SERVICE MASTER KEY FORCE REGENERATE,重新生成本地服务器的主密钥

在移机前先备份服务器主秘钥(Service Master Key)

 BACKUP SERVICE MASTER KEY TO FILE = 'C:\SMK.bak' 
     ENCRYPTION BY PASSWORD = 'AnyPasswordYouLike'


RESTORE SERVICE MASTER KEY FROM FILE = 'C:\SMK.bak' 
     DECRYPTION BY PASSWORD = 'AnyPasswordYouLike'  FORCE  

(注:如密码不符合密码策略,则将以上passwork设置为繁琐密码)

相关解释:

a、服务器主密钥(Service Master Key),位于层次结构的最顶端,并且在安装SQL Server时自动创建,用于加密系统数据、链接的服务器登录名以及数据库主密钥。在第一次通过SQL Server使用服务主密钥来加密证书、数据库主密钥或链接的服务器主密码时,服务主密钥会自动生成,并且使用SQL Server服务账户的Windows证书来生成它。如果必须改变SQL Server服务账号,微软建议使用SQL Server配置管理器,因为这个工具将执行生成新服务主密钥需要的合适的解密和加密方法,而且可以使加密层次结构保持完整。服务主密钥也用于加密其下的数据库主密钥。

  b、数据库主密钥(Database Master Key),用于加密证书,以及非对称密钥和对称密钥。所有数据库都可以只包含一个数据库主密钥,在创建它时,通过服务主密钥对其加密。创建非对称密钥时,可以决定在加密非对称密钥对应的私钥是否包含密码。如果示包含密码,将使用数据库主密钥来加密私钥

(2)job无法执行,提示未在数据库中启用Service Broker 消息传递功能

错误代码:14650  未啟用Service Broker消息传递功能

解决方法:在SERVER配置管理器中查看ServiceBorker是否开启,如果已开启但还是报14650错误那么执行以下语句

SELECT name,is_broker_enabled FROM sys.databases WHERE name = 'msdb'

查看is_broker_enabled的值是否為1

若不等于1则执行以下语句:

---执行以下语句前先关闭 SQL Agent 

USE master

GO

ALTER DATABASE MSDB SET ENABLE_BROKER;

GO

再执行

SELECT name,is_broker_enabled FROM sys.databases WHERE name = 'msdb'

此时is_broker_enabled =1

在执行相关JOB看看错误是否消失

(3)SQL Server Agent(已停用Agent XPs)。

1.检查SQL Server Agent服务是否打开

sp_configure 'show advanced options', 1;

GO

RECONFIGURE WITH OVERRIDE;

GO

sp_configure 'Agent XPs', 1;

GO

RECONFIGURE WITH OVERRIDE

GO

执行完刷新数据库

(4)刪除distribution(发布订阅系统数据库)

在目标环境中生产环境的distribution库无法直接还原上去

故需要删除distribution库,并且还原之后删除原有的发布订阅进行新建,然后重新创建发布订阅生产新的distribution库,手动删除报错,所以用以下指令进行删除

use master;

go

exec sp_dropdistributiondb @database = N'distribution'

go

(6)恢复数据库后,某些Job或管理计划无法删除或执行

在目标环境中某些还原后的job或维护计划提示与数据库连接失败,导致无法执行或删除,需要进行删除重建,所以执行以下SQL语句

use [msdb]

 declare @job_name varchar(100)

 set @job_name = N'BackupBSMASTER.每天晚上差異備份'

--注:job_name为维护计划对 ?的job name

 delete sysmaintplan_log from  sysmaintplan_subplans as subplans

  inner  join sysjobs_view as syjobs on subplans.job_id = syjobs.job_id

  inner  join sysmaintplan_log on  subplans.subplan_id =sysmaintplan_log.subplan_id

 where (syjobs.name = @job_name)

--删除代理的作业

delete  sysjobschedules from  sysjobs_view v 

 inner join  sysjobschedules o on  v.job_id=o.job_id  where  v.name=@job_name

--删除子计 ¦E

delete  sysmaintplan_subplans from  sysmaintplan_subplans  as subplans

 inner join sysjobs_view as  syjobs  on subplans.job_id = syjobs.job_id

 where  (syjobs.name = @job_name)

--删除作业

delete from  msdb.dbo.sysjobs_view where name = @job_name 

--刪除維護計劃

1.查看"维护计划"对象的ID

use msdb

select * from sysmaintplan_plans

select * from sysmaintplan_log

select * from sysmaintplan_subplans

2.根据ID号删除相应 ªº"维护计划"

delete from sysmaintplan_log where plan_id = ''

delete from sysmaintplan_subplans where subplan_id = ''

delete from sysmaintplan_plans where id = ''

今天将由于需要就将我的SQL 2008升级SQL 2008 R2. 说到为什么要升级是因为,从另一台机器上备份了一个数据库,到我的机器上还原的时候提示“System.Data.SqlClient.Sqlerror:该数据库是在运行版本10.50.2500的服务器上备份的,该版本与此服务器(运行版本10.00.1600)不兼容。请在支持该备份的服务器上还原数据库,或者使用与此服务器兼容的备份。” 经过一番查证得知: 所谓的10.00.1600其实就是SQL 2008 10.50.1600其实就是SQL 2008 R2 10.50.2500其实就是SQL 2008 R2 SP1 这样一来基本就明了了。 我得升级自己的数据库SQL 2008 R2 SP1。 这篇文章就把我先升级SQL 2008 R2的过程详细记录下来,下一篇文章会介绍升级R2到R2 SP1. 第一步:准备安装程序。 首先SQL 2008是安装好的 因此只需要下载SQL 2008 R2安装程序,下载地址如下:http://care.dlservice.microsoft.com/dl/download/1/E/6/1E626796-588A-495C-917B-321093FB98EB/2052/SQLFULL_x86_CHS.exe?lcid=2052&ptype=pcare 第二步:升级开始。SHOW TIME!!! 1、如果是从SQL2008升级SQL2008R2那么只能选择左侧“安装”对应右侧“从SQL SERVER 2000,SQL 2005或SQL 2008升级”这个选项来升级。 大家也注意到有一个“维护”但是这个选项是“从SQL 2008其他例如EXPRESS版本升级” 在此,要区分清楚。 2、安装程序支持规则检查。通过之后就继续下一步。 3、输入产品密钥,这个地方,你的密钥是什么版本的,装完之后你的数据库就是什么版本:像企业版,开发版等等等。 4、许可条款必须接受,不然人家不让用啊~~~ 5、安装程序支持文件。 6、程序支持规则安装完成后程序会自动检测安装的文件是否满足需求。 7、当你的服务器中只有一个实例的时候,你很难听到实例这个词,人们都直接叫他“数据库”了。只有在服务器上安装的实例数目超过两个的时候你才会听到“实例”二字比较多。 但是“实例”肯定是学习数据库过程中必须熟知的东东!!! 此处,选择你想要升级的实例。下一步就行了。 8、以前安装过的组件(component)都会出现在这里,不用管,以前有的,现在当然也要有,闭着眼睛点击“下一步”吧! 9、因为是升级安装,所以你以前的实例名字是什么,这里还是什么。继续“下一步”。 10、不废话,“下一步”。 11、是否发送错误报告,随便,下一步。 12、“下一步”。 13、点击“升级”按钮进行升级,中途等待大约20-30分钟就完成了。 升级过程中如图: 14、安装成功要求重新启动。重启吧没的说!! 15、重启完毕,启动SSMS(SQL SERVER MANAGEMENT STUDIO)在登陆界面上就会立马察觉到不同,SQL 2008变成了SQL 2008 R2. 16、连接上数据库引擎,在左侧导航栏就可以看到你数据库的版本了。这次变成了10.50.1600。如果还要升级到10.50.2500。那就继续安装一个升级补丁吧! 至此,10.00.1600升级10.50.1600已经成功完成。 总结一下: 10.00.1600就是SQL SERVER 2008 10.50.1600就是SQL SERVER 2008 R2 这篇博文里讲的是升级安装,如果你要进行全新安装,请按照如下操作: 一、卸载SQL SERVER 2008,一定要卸载,数据库不像其他常用的应用程序(那些程序会自动检测是否有旧版本,然后给你卸载并升级)。 另:对SQL来说,如果你安装好之后,再进行一次安装的话,实际上安装的是另外一个实例。 二、卸载完之后就安装就行了。执行的是安装---全新安装。 其他细节参考我的博文:SQL SERVER 2008安装(在实例、权限等方面,SQL 2008SQL 2008 R2是一样的)。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值