首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在用户数据库之前需要还原系统对象?

为什么在用户数据库之前需要还原系统对象?
EN

Database Administration用户
提问于 2022-03-10 08:15:30
回答 2查看 54关注 0票数 0

链接:https://learn.microsoft.com/en-us/sql/database-engine/install-windows/choose-a-database-engine-upgrade-method?view=sql-server-ver15#migrate-to-a-new-installation

我正在将sql server 2016迁移到2019年(on prem)。

在右边,为什么在用户数据库恢复步骤之前,系统对象步骤中的脚本(前期的第3步)?

系统对象包括对存储过程的授予/撤销/拒绝,那么在恢复数据库之前为什么需要这样做呢?

EN

回答 2

Database Administration用户

发布于 2022-03-10 09:01:41

我不知道您所说的“系统对象包括对存储过程的授予/撤销/拒绝”是什么意思。这通常不是我们所说的意思。我们指的是数据库之外的内容,如登录、链接服务器、sp_configure设置等。

无论如何,推荐的顺序似乎是错误的,或者至少是作者简化的。

例如,登录是IMO更好地处理恢复的方法。原因是登录可能将该数据库作为默认数据库。在还原之前创建它将失败,除非您使用默认的其他数据库(例如tempdb)创建它,并且在还原之后将其更改为还原的数据库。也就是说,先恢复然后创建登录就更容易了。

因此,考虑每种类型的“系统对象”(如果我们可以使用该术语),并根据它是什么,您可以决定它是在恢复之前还是之后更好地完成。

这里,顺便说一句,这是我在移动数据库时需要处理的东西(这就是您在并行升级时所做的):https://karaszi.com/moving-a-database-between-two-sql-server-instances

票数 3
EN

Database Administration用户

发布于 2022-03-10 08:53:04

在同一链接中,提到的是:

系统对象:一些应用程序依赖于单个用户数据库范围之外的信息、实体和/或对象。通常,应用程序依赖于主数据库和msdb数据库,也依赖于用户数据库。必须在目标服务器实例上提供存储在用户数据库之外的、为该数据库的正确功能所需的任何内容。例如,应用程序的登录以元数据形式存储在主数据库中,它们必须在目标服务器上重新创建。如果应用程序或数据库维护计划依赖于存储在msdb数据库中的Server代理作业,则必须在目标服务器实例上重新创建这些作业。类似地,服务器级触发器的元数据存储在主服务器中。

还有一个部分是继续上面的:

当将应用程序的数据库移动到另一个服务器实例时,必须在目标服务器实例上重新创建主服务器和msdb中依赖实体和对象的所有元数据。例如,如果数据库应用程序使用服务器级触发器,仅在新系统上附加或还原数据库是不够的。除非手动为主数据库中的触发器重新创建元数据,否则数据库将无法正常工作。

系统对象不仅与用户定义的数据库中的对象有关,而且涉及到用户数据库之外的许多方面,如主数据库或msdb数据库,因此系统对象处于用户数据库恢复步骤之前。

通过脚本级别的这里建议了类似的步骤

希望这能有所帮助。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/308525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档