CN113704270B - SQL Server数据库的自增主键扩容方法及相关设备 - Google Patents
SQL Server数据库的自增主键扩容方法及相关设备 Download PDFInfo
- Publication number
- CN113704270B CN113704270B CN202111030890.7A CN202111030890A CN113704270B CN 113704270 B CN113704270 B CN 113704270B CN 202111030890 A CN202111030890 A CN 202111030890A CN 113704270 B CN113704270 B CN 113704270B
- Authority
- CN
- China
- Prior art keywords
- database
- target
- server
- self
- capacity
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据处理技术领域,提供一种SQLServer数据库的自增主键扩容方法、系统、设备和介质。自增主键扩容方法包括:获得SQLServer数据库中待扩容自增主键对应的表容量;于表容量小于等于第一预设值时,对待扩容自增主键的字段类型进行硬升级;于表容量大于第一预设值且小于第二预设值时,在SQLServer数据库中通过异构复制方式对待扩容自增主键的字段类型进行升级;于表容量大于等于第二预设值时,将SQLServer数据库所属的源服务器的所有数据库全库同步至目标服务器,对目标服务器中对应SQLServer数据库的目标数据库的自增主键的字段类型进行硬升级,并将源服务器切换至目标服务器。本发明能够根据表容量对数据表的自增主键进行扩容,且扩容期间达到业务秒级中断。
Description
技术领域
本发明涉及数据处理技术领域,具体地说,涉及一种SQL Server数据库的自增主键扩容方法、系统、设备和介质。
背景技术
当业务发生变化,需要对表中的自增主键字段的类型进行扩容,尤其是订单类型的业务表,表中的自增主键的字段类型是INT类型。INT类型的最大值是2147483647,当写入值超出2147483647后,将会出现写入数据库报错。如果不及时对自增主键字段的类型做扩容操作,则业务将面临无法下单,有重大的隐患存在。
通过将自增主键的字段类型从INT升级到BIGINT,能够实现对自增主键的扩容。常规的自增主键的字段类型升级方式是:删除主键索引→升级字段类型(INT→BIGINT)→添加主键索引。上述三步操作中,每一步操作都会对数据库的业务造成影响,导致分钟级/小时级的业务中断时长(具体耗时与表容量成正比),且无法控制操作时间。是否能完成字段升级,完全依赖于表的访问量和容量。
常规的自增主键的字段类型升级方式,主要存在如下问题:对于访问量大的表,会导致数据库服务器的CPU/Block增加;对于容量大的表,会导致数据库服务器的IO消耗增加;升级有可能会导致数据库服务器夯死,无法对外提供服务;当一个数据库中有N张表需要升级字段类型时,宕机成本为N*分钟级/小时级;升级后没有回退方案,如果要回退,则需要重新进行一遍自增主键的字段类型升级操作流程。
需要说明的是,上述背景技术部分公开的信息仅用于加强对本发明的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
有鉴于此,本发明提供一种SQL Server数据库的自增主键扩容方法、系统、设备和介质,能够根据表容量对数据表的自增主键的字段类型进行快速稳定升级,实现自增主键的扩容,且扩容期间达到业务秒级中断。
本发明的一个方面提供一种SQL Server数据库的自增主键扩容方法,包括:获得SQL Server数据库中待扩容自增主键对应的表容量;于所述表容量小于等于第一预设值时,对所述待扩容自增主键的字段类型进行硬升级;于所述表容量大于所述第一预设值且小于第二预设值时,在所述SQL Server数据库中通过异构复制方式对所述待扩容自增主键的字段类型进行升级;于所述表容量大于等于所述第二预设值时,将所述SQL Server数据库所属的源服务器的所有数据库全库同步至目标服务器,对所述目标服务器中对应所述SQL Server数据库的目标数据库的自增主键的字段类型进行硬升级,并将所述源服务器切换至所述目标服务器。
在一些实施例中,所述在所述SQL Server数据库中通过异构复制方式对所述待扩容自增主键的字段类型进行升级,包括:在所述SQL Server数据库中创建目标数据表,所述目标数据表的自增主键的字段类型为目标类型;通过异构复制方式,将所述待扩容自增主键所属的原数据表的数据同步至所述目标数据表;中断所述SQL Server数据库的业务,对所述原数据表和所述目标数据表进行表名交换获得更新数据表后,恢复所述SQL Server数据库的业务。
在一些实施例中,所述在所述SQL Server数据库中创建目标数据表,包括:通过所述SQL Server数据库的管理对象SMO,编写用于生成所述目标数据表的.NET程序;通过所述.NET程序生成自增主键的字段类型为BIGINT目标类型的所述目标数据表。
在一些实施例中,所述通过异构复制方式,包括:修改所述SQL Server数据库的复制模式,将所述SQL Server数据库的存储过程的参数sync_method的值由concurrent调整为concurrent_c或database snapshot character。
在一些实施例中,所述对所述原数据表和所述目标数据表进行表名交换获得更新数据表后,还包括:刷新所述更新数据表的存储过程和视图,并重置所述更新数据表自增主键的自增长值;在所述更新数据表中创建复制回退链路,使所述更新数据表能通过所述复制回退链路以不初始化复制的方式回退至所述原数据表。
在一些实施例中,所述将所述SQL Server数据库所属的源服务器的所有数据库全库同步至目标服务器时,使所述SQL Server数据库在所述目标服务器上备份还原,以不初始化复制的方式同步至所述目标服务器的目标数据库。
在一些实施例中,所述对所述目标服务器中对应所述SQL Server数据库的目标数据库的自增主键的字段类型进行硬升级,包括:删除所述目标数据库的自增主键的索引;将所述目标数据库的自增主键的字段类型修改为目标类型;为所述目标数据库的自增主键添加索引;以及,刷新所述目标数据库的存储过程和视图。
在一些实施例中,所述将所述源服务器切换至所述目标服务器,包括:中断所述源服务器的业务;在所述目标数据库中创建复制回退链路,使所述目标数据库能通过所述复制回退链路以不初始化复制的方式回退至所述SQL Server数据库;将所述源服务器的业务切换至所述目标服务器,并将所述源服务器中无需升级的数据库AlwaysOn切换至或镜像至所述目标服务器。
在一些实施例中,所述中断所述源服务器的业务时,禁用所述源服务器的程序用户和杀进程;所述将所述源服务器的业务切换至所述目标服务器时,将所述源服务器的域名切换至所述目标服务器,并开启所述目标服务器的程序用户。
本发明的另一个方面提供一种SQL Server数据库的自增主键扩容系统,包括:容量获取模块,用于获得SQL Server数据库中待扩容自增主键对应的表容量;第一扩容模块,用于当所述表容量小于等于第一预设值时,对所述待扩容自增主键的字段类型进行硬升级;第二扩容模块,用于当所述表容量大于所述第一预设值且小于第二预设值时,在所述SQL Server数据库中通过异构复制方式对所述待扩容自增主键的字段类型进行升级;第三扩容模块,用于当所述表容量大于等于所述第二预设值时,将所述SQL Server数据库所属的源服务器的所有数据库全库同步至目标服务器,对所述目标服务器中对应所述SQLServer数据库的目标数据库的自增主键的字段类型进行硬升级,并将所述源服务器切换至所述目标服务器。
本发明的再一个方面提供一种电子设备,包括:一处理器;一存储器,所述存储器中存储有可执行指令;其中,所述可执行指令被所述处理器执行时,实现如上述任意实施例所述的SQL Server数据库的自增主键扩容方法。
本发明的又一个方面提供一种计算机可读的存储介质,用于存储程序,所述程序被处理器执行时实现如上述任意实施例所述的SQL Server数据库的自增主键扩容方法。
本发明与现有技术相比的有益效果至少包括:
本发明根据表容量采用常规硬升级、原库复制+切表升级、切换服务器升级等方式,实现对巨型表和访问量大的表的自增主键进行高效低成本的升级扩容,避免数据库服务器的CPU/IO/Block消耗风险,尽量减少对数据库业务的影响,能够达到扩容期间业务秒级中断;
当同一个数据库中有多张表需要升级时,能够实现一次性升级,减少对业务的影响,且还能实现快速回退机制,支持单表快速回退,还能支持表中其它字段类型的扩容。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。显而易见地,下面描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本发明一实施例中SQL Server数据库的自增主键扩容方法的步骤示意图;
图2示出本发明一实施例中SQL Server数据库的自增主键扩容方法的流程示意图;
图3示出本发明一实施例中SQL Server数据库的自增主键扩容系统的模块示意图;
图4示出本发明一实施例中电子设备的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的实施方式。相反,提供这些实施方式使本发明全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
附图仅为本发明的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
此外,附图中所示的流程仅是示例性说明,不是必须包括所有的步骤。例如,有的步骤可以分解,有的步骤可以合并或部分合并,且实际执行的顺序有可能根据实际情况改变。具体描述时使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。需要说明的是,在不冲突的情况下,本发明的实施例及不同实施例中的特征可以相互组合。
图1示出一实施例中SQL Server数据库的自增主键扩容方法的主要步骤,参照图1所示,本实施例中自增主键扩容方法包括:步骤S110,获得SQL Server数据库中待扩容自增主键对应的表容量;步骤S120,于表容量小于等于第一预设值时,对待扩容自增主键的字段类型进行硬升级;步骤S130,于表容量大于第一预设值且小于第二预设值时,在SQL Server数据库中通过异构复制方式对待扩容自增主键的字段类型进行升级;步骤S140,于表容量大于等于第二预设值时,将SQL Server数据库所属的源服务器的所有数据库全库同步至目标服务器,对目标服务器中对应SQL Server数据库的目标数据库的自增主键的字段类型进行硬升级,并将源服务器切换至目标服务器。
上述的自增主键扩容方法根据表容量采用常规硬升级、原库复制+切表升级、切换服务器升级等方式,实现对巨型表和访问量大的表的自增主键进行高效低成本的升级扩容,避免数据库服务器的CPU/IO/Block消耗风险,尽量减少对数据库业务的影响,能够达到扩容期间业务秒级中断;并且,当同一个数据库中有多张表需要升级时,能够实现一次性升级,减少对业务的影响;另外,还能实现快速回退机制,支持单表快速回退,还能支持表中其它字段类型的扩容。
下面对常规硬升级、原库复制+切表升级和切换服务器升级三种自增主键的字段类型升级方式进行详细说明。
图2示出一实施例中SQL Server数据库的自增主键扩容方法的具体流程,结合图2所示,在对自增主键进行扩容,即对自增主键的字段类型进行升级前,先执行S210:表容量判断。当SQL Server数据库中待扩容自增主键对应的原数据表(可以包括一个表或多个表)的表容量小于等于第一预设值(5GB),执行S220:常规硬升级流程。当原数据表的表容量大于5GB且小于第二预设值(1TB),执行S230:原库复制+切表升级流程。当SQL Server数据库中超过预设比例(90%)的表需要升级,且表容量大于等于1TB,执行S240:切换服务器升级流程。
本实施例中,常规硬升级、原库复制+切表升级和切换服务器升级三种自增主键的字段类型升级方式均是将自增主键的字段类型从INT类型升级为BIGINT类型,INT类型的存储大小为4个字节,最大值为2147483647,BIGINT类型类的存储大小为8个字节,最大值为9223372036854775807,相比于INT类型有了极大扩容。在其他的应用场景中,目标类型、第一预设值、第二预设值和预设比例均可以调整,而不以上述列举为限。
本实施例的自增主键扩容方法,突破了常规复制分发时源表/目标表表结构必须完全相同的限制,将异构的表复制技术用于字段类型INT→BIGINT升级;同时,结合SQLServer复制技术,减少复制搭建时锁表的次数,降低搭建过程中对数据库服务器的CPU/IO/Block的消耗。
继续参照图2,常规硬升级流程具体包括:S220-1,先删除主键索引,即删除SQLServer数据库中待扩容自增主键的索引;再升级字段类型,即将待扩容自增主键的字段类型从INT类型修改为BIGINT类型;最后添加主键索引,即重新为待扩容自增主键添加索引,完成待扩容自增主键的字段硬升级。在待升级的表容量较小的情况下,采用常规硬升级方式能够实现快速升级且对数据库影响较小。
原库复制+切表升级流程具体包括:S230-1,原库下批量创建目标表,即在SQLServer数据库中创建目标数据表,在待升级的原数据表包括多个的情况下批量创建多个目标数据库,目标数据表的自增主键的字段类型为目标类型。S230-3,原表与目标表异构复制搭建,即通过异构复制方式,将待扩容自增主键所属的原数据表的数据同步至目标数据表。S230-5,中断业务后原表与目标表交换,即中断SQL Server数据库的业务(指禁用程序用户和杀进程),对原数据表和目标数据表进行表名交换获得更新数据表后,恢复SQL Server数据库的业务(指开启程序用户)。
在SQL Server数据库中创建目标数据表,具体包括:通过SQL Server数据库的管理对象SMO,编写用于生成目标数据表的.NET程序;通过.NET程序生成自增主键的字段类型为BIGINT目标类型的目标数据表。通过.NET程序,能够快速生成所有待升级的字段(可包括自增主键字段和其它字段)已是BIGINT类型的目标数据表。下表示出原数据表和目标数据表中字段类型的对比:
通过异构复制方式,具体包括:修改SQL Server数据库的复制模式,将SQL Server数据库的存储过程的参数sync_method的值由concurrent调整为concurrent_c或databasesnapshot character。SQL Server的sp_addpublication中,有个参数sync_method,其值对应不同的复制模式,默认情况下为concurrent,指生成所有表的本机模式大容量复制程序输出,但在快照过程中并不锁定表。concurrent_c指:生成所有表的字符模式大容量复制程序输出,但在快照过程中并不锁定表。database snapshot character指:从数据库快照生成所有表的字符模式大容量复制程序输出。concurrent_c和database snapshotcharacter两种属性均支持异构复制,即在异构的两张数据表间进行数据复制。
通过修改复制模式,从concurrent调整为concurrent_c或database snapshotcharacter,能够跳过发布表/订阅表表结构的检查,直接同步数据,且生产快照文件的时候不锁表。从而,能够将复制过程中大容量的快照文件和分发数据库的读写压力从业务数据库上移走,实现发布/分发独立,且修改复制参数还能减少复制对业务数据库的影响。
对原数据表和目标数据表进行表名交换获得更新数据表后,还包括:刷新更新数据表(也即更换了原数据表的表名的目标数据表)的存储过程和视图(View),并重置更新数据表自增主键的自增长值;在更新数据表中创建复制回退链路,使更新数据表能通过复制回退链路以不初始化复制的方式回退至原数据表。
存储过程(Stored Procedure,简称SP)是SQL Server中用于完成增删改等特定功能的SQL语句集。刷新更新数据表的存储过程,具体是指对更新数据表重刷SP{IDU},即增删改语句内容。回退是指升级过程中出现异常时,能够使更新数据表转换回至原数据表,并且原数据表能够再次转换至更新数据表,也即能够使更新数据表与原数据表相互切换,以确保更新数据表与原数据表的数据保持一致。在表转换过程中,采用不初始化复制的方式进行数据同步,也即在表中数据已经存在的情况下不用先初始化再重复同步,避免耗费资源。采用原库复制+切表升级的方式,对SQL Server数据库的业务影响时长约为30秒至1分钟左右。
继续参照图2,切换服务器升级流程具体包括:S240-1,New Server上进行OldServer全备,即将SQL Server数据库所属的源服务器(即Old Server)的所有数据库全库同步至目标服务器(即New Server)。S240-3,Old Server与New Server不初始化复制搭建,即使源数据库中需要升级的数据库(本实施例中即SQL Server数据库)以不初始化复制的方式备份还原至目标数据库。从而,将源服务器的所有数据库全库同步至目标服务器时,能够使SQL Server数据库在目标服务器上备份还原,以不初始化复制的方式同步至目标服务器的目标数据库。
S240-5,在New Server上进行字段硬升级(无业务中断)并将Old Server与NewServer交换,即对目标服务器中对应SQL Server数据库的目标数据库的自增主键的字段类型进行硬升级,然后将源服务器切换至目标服务器。
对目标数据库的自增主键的字段类型进行硬升级,具体包括:删除目标数据库的自增主键的索引;将目标数据库的自增主键的字段类型修改为目标类型;为目标数据库的自增主键添加索引;以及,刷新目标数据库的存储过程和视图。
进一步地,将Old Server与New Server交换,具体将源服务器切换至目标服务器,包括:中断源服务器的业务,禁用源服务器的程序用户和杀进程;在目标数据库中创建复制回退链路,使目标数据库能通过复制回退链路以不初始化复制的方式回退至SQL Server数据库;将源服务器的业务切换至目标服务器,即将源服务器的域名切换至目标服务器,并开启目标服务器的程序用户;以及,将源服务器中无需升级的数据库AlwaysOn切换至或镜像至目标服务器。
采用上述的切换服务器升级流程,当SQL Server数据库中有超过90%的表需要升级,且待升级容量超过TB级时,采用更换服务器的方式完成字段升级操作,在准备好NewServer后,将需要升级的数据库在New Server上备份还原并搭建不初始化的复制分发机制,然后在New Server上对需要升级的数据库的字段类型进行升级(删除索引→字段扩容→添加索引→重刷SP{IDU},VIEW),再对OLD Server禁用程序用户/杀进程,对需要升级的数据库搭建复制回退链路,将OLD Server的域名切换到New Server后,恢复业务开启程序用户,并将不需要升级的数据库AlwaysOn/Mirror至New Server。整个升级过程中对业务的影响时长约为1分钟至3分钟左右。
综上,本发明的SQL Server数据库的自增主键扩容方法,能够快速对自增主键字段完成扩容操作,且在升级期间减少对业务的影响,并且有回退方案,支持单表快速回退。最后作为业务验证,采用上述的自增主键扩容方法对所有业务表涉及的OrderID字段类型均做了扩容操作,及时解决了业务无法下单的重大隐患。
本发明实施例还提供一种SQL Server数据库的自增主键扩容系统,可用于实现上述任意实施例描述的SQL Server数据库的自增主键扩容方法。上述任意实施例描述的自增主键扩容方法的特征和原理均可应用至下面的自增主键扩容系统实施例。在下面的自增主键扩容系统实施例中,对已经阐明的关于自增主键扩容的特征和原理不再重复说明。
图3示出一实施例中SQL Server数据库的自增主键扩容系统的主要模块,参照图3所示,本实施例中自增主键扩容系统300包括:容量获取模块310,用于获得SQL Server数据库中待扩容自增主键所属的数据表容量;第一扩容模块320,用于当数据表容量小于等于第一预设值时,对待扩容自增主键的字段类型进行硬升级;第二扩容模块330,用于当数据表容量大于第一预设值且小于第二预设值时,在SQL Server数据库中通过异构复制方式对待扩容自增主键的字段类型进行升级;第三扩容模块340,用于当数据表容量大于等于第二预设值时,将SQL Server数据库所属的源服务器的所有数据库全库同步至目标服务器,对目标服务器中对应SQL Server数据库的目标数据库的自增主键的字段类型进行硬升级,并将源服务器切换至目标服务器。
进一步地,自增主键扩容系统300还可包括实现上述各自增主键扩容方法实施例的其他流程步骤的模块,各个模块的具体原理可参照上述各自增主键扩容方法实施例的描述,此处不再重复说明。
如上所述,本发明的自增主键扩容系统,能够根据表容量采用常规硬升级、原库复制+切表升级、切换服务器升级等方式,实现对巨型表和访问量大的表的自增主键进行高效低成本的升级扩容,避免数据库服务器的CPU/IO/Block消耗风险,尽量减少对数据库业务的影响,能够达到扩容期间业务秒级中断;当同一个数据库中有多张表需要升级时,能够实现一次性升级,减少对业务的影响,且还能实现快速回退机制,支持单表快速回退,还能支持表中其它字段类型的扩容。
本发明实施例还提供一种电子设备,包括处理器和存储器,存储器中存储有可执行指令,可执行指令被处理器执行时,实现上述任意实施例描述的SQL Server数据库的自增主键扩容方法。
如上所述,本发明的电子设备能够根据表容量采用常规硬升级、原库复制+切表升级、切换服务器升级等方式,实现对巨型表和访问量大的表的自增主键进行高效低成本的升级扩容,避免数据库服务器的CPU/IO/Block消耗风险,尽量减少对数据库业务的影响,能够达到扩容期间业务秒级中断;当同一个数据库中有多张表需要升级时,能够实现一次性升级,减少对业务的影响,且还能实现快速回退机制,支持单表快速回退,还能支持表中其它字段类型的扩容。
图4是本发明实施例中电子设备的结构示意图,应当理解的是,图4仅仅是示意性地示出各个模块,这些模块可以是虚拟的软件模块或实际的硬件模块,这些模块的合并、拆分及其余模块的增加都在本发明的保护范围之内。
如图4所示,电子设备600以通用计算设备的形式表现。电子设备600的组件包括但不限于:至少一个处理单元610、至少一个存储单元620、连接不同平台组件(包括存储单元620和处理单元610)的总线630、显示单元640等。
其中,存储单元存储有程序代码,程序代码可以被处理单元610执行,使得处理单元610执行上述任意实施例描述的SQL Server数据库的自增主键扩容方法的步骤。
存储单元620可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)6201和/或高速缓存存储单元6202,还可以进一步包括只读存储单元(ROM)6203。
存储单元620还可以包括具有一个或多个程序模块6205的程序/实用工具6204,这样的程序模块6205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线630可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备600也可以与一个或多个外部设备700通信,外部设备700可以是键盘、指向设备、蓝牙设备等设备中的一种或多种。这些外部设备700使得用户能与该电子设备600进行交互通信。电子设备600也能与一个或多个其它计算设备进行通信,所示计算机设备包括路由器、调制解调器。这种通信可以通过输入/输出(I/O)接口650进行。并且,电子设备600还可以通过网络适配器660与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。网络适配器660可以通过总线630与电子设备600的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备600使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储平台等。
本发明实施例还提供一种计算机可读的存储介质,用于存储程序,程序被执行时实现上述任意实施例描述的SQL Server数据库的自增主键扩容方法。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行上述任意实施例描述的SQL Server数据库的自增主键扩容方法。
如上所述,本发明的计算机可读的存储介质,能够根据表容量采用常规硬升级、原库复制+切表升级、切换服务器升级等方式,实现对巨型表和访问量大的表的自增主键进行高效低成本的升级扩容,避免数据库服务器的CPU/IO/Block消耗风险,尽量减少对数据库业务的影响,能够达到扩容期间业务秒级中断;当同一个数据库中有多张表需要升级时,能够实现一次性升级,减少对业务的影响,且还能实现快速回退机制,支持单表快速回退,还能支持表中其它字段类型的扩容。
程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,其可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子包括但不限于:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
可读存储介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读存储介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备,例如利用因特网服务提供商来通过因特网连接。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (11)
1.一种SQL Server数据库的自增主键扩容方法,其特征在于,包括:
获得SQL Server数据库中待扩容自增主键对应的表容量;
于所述表容量小于等于第一预设值时,对所述待扩容自增主键的字段类型进行硬升级;
于所述表容量大于所述第一预设值且小于第二预设值时,在所述SQL Server数据库中通过异构复制方式对所述待扩容自增主键的字段类型进行升级,包括:在所述SQL Server数据库中创建目标数据表,所述目标数据表的自增主键的字段类型为目标类型;通过异构复制方式,将所述待扩容自增主键所属的原数据表的数据同步至所述目标数据表;中断所述SQL Server数据库的业务,对所述原数据表和所述目标数据表进行表名交换获得更新数据表后,恢复所述SQL Server数据库的业务;
于所述表容量大于等于所述第二预设值时,将所述SQL Server数据库所属的源服务器的所有数据库全库同步至目标服务器,对所述目标服务器中对应所述SQL Server数据库的目标数据库的自增主键的字段类型进行硬升级,并将所述源服务器切换至所述目标服务器。
2.如权利要求1所述的自增主键扩容方法,其特征在于,所述在所述SQL Server数据库中创建目标数据表,包括:
通过所述SQL Server数据库的管理对象SMO,编写用于生成所述目标数据表的.NET程序;
通过所述.NET程序生成自增主键的字段类型为BIGINT目标类型的所述目标数据表。
3.如权利要求1所述的自增主键扩容方法,其特征在于,所述通过异构复制方式,包括:
修改所述SQL Server数据库的复制模式,将所述SQL Server数据库的存储过程的参数sync_method的值由concurrent调整为concurrent_c或database snapshot character;
其中,database snapshot character指:从数据库快照生成所有表的字符模式大容量复制程序输出。
4.如权利要求1所述的自增主键扩容方法,其特征在于,所述对所述原数据表和所述目标数据表进行表名交换获得更新数据表后,还包括:
刷新所述更新数据表的存储过程和视图,并重置所述更新数据表自增主键的自增长值;
在所述更新数据表中创建复制回退链路,使所述更新数据表能通过所述复制回退链路以不初始化复制的方式回退至所述原数据表。
5.如权利要求1所述的自增主键扩容方法,其特征在于,所述将所述SQL Server数据库所属的源服务器的所有数据库全库同步至目标服务器时,使所述SQL Server数据库在所述目标服务器上备份还原,以不初始化复制的方式同步至所述目标服务器的目标数据库。
6.如权利要求5所述的自增主键扩容方法,其特征在于,所述对所述目标服务器中对应所述SQL Server数据库的目标数据库的自增主键的字段类型进行硬升级,包括:
删除所述目标数据库的自增主键的索引;
将所述目标数据库的自增主键的字段类型修改为目标类型;
为所述目标数据库的自增主键添加索引;以及
刷新所述目标数据库的存储过程和视图。
7.如权利要求5所述的自增主键扩容方法,其特征在于,所述将所述源服务器切换至所述目标服务器,包括:
中断所述源服务器的业务;
在所述目标数据库中创建复制回退链路,使所述目标数据库能通过所述复制回退链路以不初始化复制的方式回退至所述SQL Server数据库;
将所述源服务器的业务切换至所述目标服务器,并将所述源服务器中无需升级的数据库AlwaysOn切换至或镜像至所述目标服务器。
8.如权利要求7所述的自增主键扩容方法,其特征在于,所述中断所述源服务器的业务时,禁用所述源服务器的程序用户和杀进程;
所述将所述源服务器的业务切换至所述目标服务器时,将所述源服务器的域名切换至所述目标服务器,并开启所述目标服务器的程序用户。
9.一种SQL Server数据库的自增主键扩容系统,其特征在于,包括:
容量获取模块,用于获得SQL Server数据库中待扩容自增主键对应的表容量;
第一扩容模块,用于当所述表容量小于等于第一预设值时,对所述待扩容自增主键的字段类型进行硬升级;
第二扩容模块,用于当所述表容量大于所述第一预设值且小于第二预设值时,在所述SQL Server数据库中通过异构复制方式对所述待扩容自增主键的字段类型进行升级,包括:在所述SQL Server数据库中创建目标数据表,所述目标数据表的自增主键的字段类型为目标类型;通过异构复制方式,将所述待扩容自增主键所属的原数据表的数据同步至所述目标数据表;中断所述SQL Server数据库的业务,对所述原数据表和所述目标数据表进行表名交换获得更新数据表后,恢复所述SQL Server数据库的业务;
第三扩容模块,用于当所述表容量大于等于所述第二预设值时,将所述SQL Server数据库所属的源服务器的所有数据库全库同步至目标服务器,对所述目标服务器中对应所述SQL Server数据库的目标数据库的自增主键的字段类型进行硬升级,并将所述源服务器切换至所述目标服务器。
10.一种电子设备,其特征在于,包括:
一处理器;
一存储器,所述存储器中存储有可执行指令;
其中,所述可执行指令被所述处理器执行时,实现如权利要求1-8任一项所述的SQLServer数据库的自增主键扩容方法。
11.一种计算机可读的存储介质,用于存储程序,其特征在于,所述程序被处理器执行时实现如权利要求1-8任一项所述的SQL Server数据库的自增主键扩容方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111030890.7A CN113704270B (zh) | 2021-09-03 | 2021-09-03 | SQL Server数据库的自增主键扩容方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111030890.7A CN113704270B (zh) | 2021-09-03 | 2021-09-03 | SQL Server数据库的自增主键扩容方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113704270A CN113704270A (zh) | 2021-11-26 |
CN113704270B true CN113704270B (zh) | 2023-10-17 |
Family
ID=78659145
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111030890.7A Active CN113704270B (zh) | 2021-09-03 | 2021-09-03 | SQL Server数据库的自增主键扩容方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113704270B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106802817A (zh) * | 2016-12-29 | 2017-06-06 | 杭州迪普科技股份有限公司 | SQLite数据库的升级方法及装置 |
CN107092442A (zh) * | 2017-04-24 | 2017-08-25 | 杭州宏杉科技股份有限公司 | 存储系统资源分配方法及装置 |
CN108874828A (zh) * | 2017-05-12 | 2018-11-23 | 北京京东尚科信息技术有限公司 | 数据迁移的方法和装置 |
CN109271376A (zh) * | 2018-11-30 | 2019-01-25 | 北京锐安科技有限公司 | 数据库升级方法、装置、设备及存储介质 |
CN109871384A (zh) * | 2019-02-22 | 2019-06-11 | 携程旅游信息技术(上海)有限公司 | 基于PaaS平台进行容器迁移的方法、系统、设备和存储介质 |
CN110019251A (zh) * | 2019-03-22 | 2019-07-16 | 深圳市腾讯计算机系统有限公司 | 一种数据处理系统、方法及设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10248408B2 (en) * | 2014-09-18 | 2019-04-02 | Sap Se | Handling table deltas during zero downtime upgrade |
-
2021
- 2021-09-03 CN CN202111030890.7A patent/CN113704270B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106802817A (zh) * | 2016-12-29 | 2017-06-06 | 杭州迪普科技股份有限公司 | SQLite数据库的升级方法及装置 |
CN107092442A (zh) * | 2017-04-24 | 2017-08-25 | 杭州宏杉科技股份有限公司 | 存储系统资源分配方法及装置 |
CN108874828A (zh) * | 2017-05-12 | 2018-11-23 | 北京京东尚科信息技术有限公司 | 数据迁移的方法和装置 |
CN109271376A (zh) * | 2018-11-30 | 2019-01-25 | 北京锐安科技有限公司 | 数据库升级方法、装置、设备及存储介质 |
CN109871384A (zh) * | 2019-02-22 | 2019-06-11 | 携程旅游信息技术(上海)有限公司 | 基于PaaS平台进行容器迁移的方法、系统、设备和存储介质 |
CN110019251A (zh) * | 2019-03-22 | 2019-07-16 | 深圳市腾讯计算机系统有限公司 | 一种数据处理系统、方法及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN113704270A (zh) | 2021-11-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3428811B1 (en) | Database interface agent for a tenant-based upgrade system | |
TWI468961B (zh) | 用於實施多使用者快取的參數化單元之方法及系統 | |
US7610314B2 (en) | Online tablespace recovery for export | |
US8996466B2 (en) | Extend crud to support lifecyle management and business continuity | |
US9031910B2 (en) | System and method for maintaining a cluster setup | |
CN102317923B (zh) | 存储系统 | |
US7757226B2 (en) | Method and mechanism for performing a rolling upgrade of distributed computer software | |
CN101460930B (zh) | 维护数据库与文件系统之间的链接级一致性 | |
US10268692B2 (en) | Multi-procedure support in data migration | |
US20070294310A1 (en) | Method and apparatus for storing and recovering fixed content | |
US10102083B1 (en) | Method and system for managing metadata records of backups | |
EP3814926A1 (en) | Upgrading a database from a first version to a second version | |
CN102272751B (zh) | 在数据库环境通过背景同步的数据完整性 | |
CN112988326A (zh) | 高效地提供虚拟机参考点 | |
CN110209735A (zh) | 数据库备份方法、数据库备份装置、计算设备和存储介质 | |
CN111752901A (zh) | 索引创建方法及装置、电子设备、存储介质 | |
GB2602544A (en) | Data synchronization in a data analysis system | |
WO2020060620A1 (en) | Storage segment server covered cache | |
CN102833273A (zh) | 临时故障时的数据修复方法及分布式缓存系统 | |
US20130041868A1 (en) | Data synchronization | |
EP3147789A1 (en) | Method for re-establishing standby database, and apparatus thereof | |
CN113656384B (zh) | 数据处理方法、分布式数据库系统、电子设备及存储介质 | |
CN113704270B (zh) | SQL Server数据库的自增主键扩容方法及相关设备 | |
US10877868B2 (en) | Applying a log to storage segments | |
CN112738550A (zh) | 内容数据的处理方法、装置、电子设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |