在 Always On 中将文件移动到新的 SQL Server 版本/实例

Posted

技术标签:

【中文标题】在 Always On 中将文件移动到新的 SQL Server 版本/实例【英文标题】:Moving files to new SQL Server Version / Instance in Always On 【发布时间】:2019-06-13 14:56:56 【问题描述】:

我有带 Always On 的 SQL Server 2014。我在同一台服务器上安装了 SQL Server 2017,我想将数据库从 SQL Server 2014 移动到 SQL Server 2017。

在每个副本中,我都有自己的文件(.mdf 和 .ldf)。 在 SQL Server 2014 中,在主数据库中,我从 AG 中删除了数据库,然后分离了数据库。 在 SQL Server 2017 中,我成功附加了它。 我在中学也是这样做的。 当我尝试将数据库添加到 SQL Server 2017 副本时,我收到错误消息,指出辅助节点未处于还原状态。 我尝试生成一个新备份并将其还原为辅助服务器中的 NoRecovery,但当我再次尝试时,它说存在不一致。

我做错了什么? 我正在尝试执行“仅加入”选项,因为数据库超过 300 GB,同步它需要太多时间。

【问题讨论】:

【参考方案1】:

检查以确保在您尝试将数据库添加到 AG 之前、期间或期间没有正在运行的维护作业已进行事务日志备份。这肯定会导致不一致的错误。作为 GUI (SSMS) 的替代方案,在将数据库附加到 2017 实例后,您可以使用脚本在主节点上备份 db 和 t-log,手动将 2 个备份复制到辅助节点,然后恢复 ( 2) 无法恢复的文件,然后运行 ​​2 个命令将其添加回 AG。这种方式可能更有助于您弄清楚为什么会出现不一致错误。代码示例在这里(请务必替换 DB 名称和 AG 名称)-

`连接到主实例时 -

步骤 1) 将数据库 [MyDatabase] 备份到磁盘 = N'\PrimaryServerName\C$\temp\MyDatabase.bak' with init, stats = 10

步骤 2) 备份日志 [MyDatabase] 到磁盘 = N'\PrimaryServerName\C$\temp\MyDatabase.trn' with init, stats = 10

第 3 步)RDP 到主服务器 - 手动将备份文件(.bak 和 .trn)从主服务器上的 C:\temp 复制到辅助服务器上的 C:\temp

第 6 步)更改可用性组 [AGGroupName] 添加数据库 [MyDatabase]

连接到辅助实例时 -

步骤 4) 从磁盘恢复数据库 [MyDatabase] = N'C:\temp\MyDatabase.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5

第 5 步)从磁盘恢复日志 [MyDatabase] = N'C:\temp\MyDatabase.trn' WITH NORECOVERY

步骤 7) ALTER DATABASE [MyDatabase] SET HADR AVAILABILITY GROUP = [AGGroupName]`

【讨论】:

谢谢!如果你能提供我的示例代码会很棒。

以上是关于在 Always On 中将文件移动到新的 SQL Server 版本/实例的主要内容,如果未能解决你的问题,请参考以下文章

sql 使用MySQL将大型Neos NodeTree移动到新的Parent

在 SQL Server Always ON 配置中 - 将事务日志备份到 Nul 会中断 Always On 配置吗?

如何使用Sqlserver 2012 Always on技术

如何在 Linux 中将主目录移动到新分区或磁盘?

怎么把sql数据库从旧电脑移动到新电脑安装?​

如何将配置文件移动到新的开发箱