技术标签: 升级迁移 sqlserver 数据库 SQLServer 高可用 sql
升级SQL Server的方法归结为几个业务目标:最短的停机时间、最少的花费、最小的风险。
这几个目标通常是无法兼具的,以下每种方法都有利弊,因此根据业务情况选择正确的升级方法非常重要。
首先区别一下SQL Server中的迁移和升级术语,有时这些术语会被互换使用,但它们确实有一些不同之处。
1) 升级SQL Server意味着
2) 迁移可能包括也可能不包括SQL Server的升级,但这意味着将数据库从一个实例移动到另一个实例。
下面我们讨论上面列表中提到的升级方法思路,具体操作方法不一一列出了。
这是迁移期间升级数据库的最基本、最简单的方法,这种升级方法是50G以下的数据库的理想选择。
这其实就是异机全备+还原了,操作方法非常简单,这里略了。
这是在迁移期间升级的另一种基本且简单的方法,但注意它不是推荐的最佳实践方法。思路与前一种方法基本相同,对于较小的数据库,使用“备份和还原”进行升级更加安全可靠。
这不是推荐的迁移数据库的方法,因为您可能会遇到各种类型的问题。例如,如果源与目标之间存在SQL Server排序规则差异,attach可能会失败。如果在新服务器上复制数据库文件的目录没有SQL Server服务帐户的适当权限,则可能会失败。另一个重要原因是,如果在分离数据库并尝试附加之间的时间已经过了一两天,文件可能被误删除。如果服务器重新启动,文件可能会损坏。
假设数据库大于50 GB,并且还有预算限制。在这种情况下,哪种升级方法是合适的?
此方法不能用于迁移,因为所有操作都发生在同一服务器上,因此称为“就地升级”。这是最便宜、最快但却最危险的升级方法,不建议在生产SQL Server使用。
由于是直接升级现有SQL Server实例(所有系统和用户数据库的系统对象都会升级),如果出现任何问题,很可能将无法回滚(虚拟机可以打快照、物理机做存储快照)。预算较低且无法花钱购买硬件和软件许可证的公司可以选择这种方法,但是在升级失败的情况下,回退旧版本的花费很可能更多,并且还需要更多时间。另一个警告是,在就地升级期间,无法添加其他SQL Server功能,只能在安装完成后进行。
假设在sample模式下有一个大型数据库,比如500 GB,在每周日晚进行一次完整备份,并在其他6晚进行差异备份。
此数据库位于SQL Server 2012(源)上,另有一个SQL Server 2017实例(目标),希望升级和迁移源实例。这两个SQL Server位于不同的数据中心,两个数据中心之间的网络带宽为10 GB。进行迁移的唯一可用窗口是星期六早上,期望在2小时内完成迁移,随后进行测试。
假设在实际迁移前几周进行了备份及还原测试,所需时间如下
每周备份和还原信息 |
||||||
星期几 |
备份时间 |
备份类型 |
备份大小 |
备份持续时间 |
复制持续时间 |
恢复持续时间 |
星期日 |
晚上11点 |
全备 |
500 GB |
5小时 |
2小时 |
6小时 |
星期一 |
晚上11点 |
差异备份 |
50 GB |
30分钟 |
20分钟 |
35分钟 |
星期二 |
晚上11点 |
差异备份 |
60 GB |
35分钟 |
22分钟 |
42分钟 |
星期三 |
晚上11点 |
差异备份 |
70 GB |
40分钟 |
24分钟 |
49分钟 |
星期四 |
晚上11点 |
差异备份 |
80 GB |
50分钟 |
26分钟 |
56分钟 |
星期五 |
晚上11点 |
差异备份 |
90 GB |
55分钟 |
28分钟 |
63分钟 |
星期六 |
晚上11点 |
差异备份 |
100 GB |
60分钟 |
30分钟 |
70分钟 |
维护窗口 |
||||||
星期几 |
开始时间 |
时间结束 |
||||
星期六 |
8:00 AM |
10:00 AM |
这种使用差异还原的方法在复杂性较低但数据库很大的情况下工作很简单。
关于回滚策略,如果升级失败,只需将源服务器上的数据库更改回读写模式,应用切回即可。
其实这就是把前面那种手动备份+复制+还原的方法大部分让sqlserver自动做了。
有2个企业版SQL Server 2012实例SQL1和SQL2,操作系统是Windows Server 2012 R2。SQL1到SQL2的数据库DB3(500 GB)设置了事务日志传送。
现在希望将这些企业版SQL Server 2012升级到标准版SQL Server 2017以节省许可成本,还希望利用2017的一些新功能。自SQL Server 2016 SP1以来,微软已在SE中提供了许多EE级功能,例如压缩和数据库快照等。
决定使用当前的日志传送设置进行并排升级。当前的Windows Server 2012 R2操作系统支持SQL Server 2017,因此无需升级操作系统。计划首先升级SQL2,如果出现任何问题,回滚计划是将应用程序切回SQL Server 2012的SQL1实例。
当前生产环境日志传送简图(均为2012 EE):
注意SQL Server 2012 EE无法直接升级到SQL Server 2017 SE,因为这是从高edition降到了低edition 。因此需要在Domain2中安装另一个SQL Server 2017 SE版本的SQL3实例,如果是2012 EE到2017 EE,则不需要。
以下是使用SQL Server日志传送升级和/或迁移数据库的一般步骤:
BACKUP LOG [DB3] TO DISK = 'C:\SQLBackups\DB3.trn' WITH NORECOVERY;
RESTORE LOG DB3 FROM DISK = 'C:\SQL2012\SQL2\LogShip\DB3.trn' WITH RECOVERY
USE [master]
GO
ALTER DATABASE [DB3] SET COMPATIBILITY_LEVEL = 140
GO
RESTORE DATABASE [DB3] WITH RECOVERY;
对于核心数据库,业务要求停机时间最短,例如在5分钟内完成Windows和SQL Server升级。此时应该如何规划?
滚动升级需要至少2个SQL Server实例。升级前,主服务器和从服务器始终保持同步。可用性组(AlwaysOn AG)是进行滚动升级的一种方法,通过此方法,可保证最短的停机时间(用户、作业、链接服务器等在从服务器上都可用并准备就绪)
当应用程序连接到主节点时,进行从节点升级。只要从实例版本不低于与主节点,AG同步就不会断。不过在从节点进行升级时,事务在从服务器上将被阻塞,直到升级完成。当从实例完成升级时,确保从库已应用所有事务(建议设为同步模式)并且两个数据库都处于同步状态,然后再手动故障转移到辅助实例,此步骤可确保故障转移期间零数据丢失。
升级后的辅助节点承担主节点的角色,在旧主节点的版本与新主节点相同之前,事务不会在旧主节点应用。升级完成后,可以选择故障转移回到原主节点。在滚动升级中,应用程序基本不会停止(切换期间有中断)。
有一个业务关键数据库(500 GB),已设置2节点AG(SQLA和SQLB)。这些SQL Server运行在最新的Windows操作系统,版本为SQL Server 2016 SP2。现在需要将它们升级到SQL Server 2017,在升级过程中,需要保证始终有主从同步、同时停机时间最短。
|
SQLA |
SQLB |
SQLC |
AG1 |
Primary |
Secondary (同步) |
Secondary (异步) |
参考
Choosing a SQL Server Upgrade Method - Part 1
SQL Server In-Place Upgrade and Differential Restore Upgrade - Part 2
Side by Side SQL Server Upgrade with Log Shipping - Part 3
Minimizing Downtime for SQL Server Upgrades - Part 4
Differential Database Backups for SQL Server
In-Place Upgrade or Migration – SQLServerCentral
Upgrade availability group replicas - SQL Server Always On | Microsoft Docs
[每日一题] 11gOCP 1z0-052 :2013-09-20 BIGFILE | SMALLFILE TABLESPACE
看到网上很多代码绘制的樱花树,参见CSDN,便想自己试试,但是画的有点丑基本思路其实就是一个“二叉树的遍历”的思路,使用递归不断的二叉,就可以了,这也算是分形图案了。但是简单的递归二叉,不掌握好长度、角度、粗细以及主干和枝干的变化就会很规整。所以慢慢调参吧。这里采用的是给出每个参数的最大取值范围,然后设置一个缩小的函数,随着递归层数的提高,对应的参数越来越小,这个小的程度和范围就要自己把...
速腾M1激光雷达,是一款量产的固态MEMS激光雷达,性能处于业界领先水平,其参数如下(来源于M1用户手册,2021年12月版):值得注意的是:M1提供的 RS—View并不与之前的16线32线等激光雷达共用,需要重新下载对应版本(向你的供应商要或者在官网下载)。资源中心 - RoboSense(速腾聚创) - 自动驾驶激光雷达与16线的激光雷达等IP配置方法(见我另一篇:16线配置)不同,M1配置需要通过小工具:little-robo打开little-robo,选择proje..
1、ValueError: Variable v1 already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:解决办法:在代码前面加上:tf.reset_default_graph()即可。...
nn.AdaptiveAvgPool3d 官方解释:class AdaptiveAvgPool3d(_AdaptiveAvgPoolNd) | AdaptiveAvgPool3d(output_size: Union[int, Tuple[int, ...]]) -> None | | Applies a 3D adaptive average pooling over an input signal composed of several input planes. | |
A_A02_001 CH340驱动安装
废话不说,直接干货public void importStaffInfo(MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException { try { String name = file.getOriginalFilename(); HashMap<String,Object> map = null;
<?xml version="1.0" encoding="UTF-8"?><!-- 在package中,只要继承了struts-default,就用了name为struts-default的包里面的所有的功能 而struts-default包在struts-default.xml文件中 所以必须继承struts-default -->...
1.运行环境:编译器:Visual Studio CodeVue版本:2.9.6在vue-cli搭建的项目目录树下2.自定义vue组件在src目录下新建一个components目录用于存放自定义组件:新建一个vue文件并编写如下内容(以HelloWorld为例):这里的export default内容体内的name属性值就是自定义的组件名,template标签名内的内...
(25)You enabled Flashback Data Archive on the INVENTORY table.Which DDL operation is supported on the table after enabling Flashback Data Archive?(choose threee.)A. Drop the table.B. Partition the tab...
1.You observe that a database performance has degraded overa period of time. While investigating the reason, you find the size ofthe database buffer cache is not large enough to cache all the needed d...
默认情况下,IDEA会把空包合并到同一层次展开,这样看起来很不方便,没有层次感。那么如何把IDEA中像eclipse默认铺开包层次结构呢?这样设置:project–》齿轮设置选项–》取消Compact Middle Packages 选项,图示如下:设置后的效果展示...