• 自动秒收录
  • 软件:1973
  • 资讯:57940|
  • 收录网站:279743|

IT精英团

将SQL Server数据库迁移到Azure SQL

将SQL Server数据库迁移到Azure SQL

浏览次数:
评论次数:
编辑: 温瑜
信息来源: ITPUB
更新日期: 2022-09-23 01:45:26
摘要

最近有个维护的项目需要把SQLServer2012的数据库迁移到AzureSQL上去,迁移过程可谓一波三折,故在此分享这次迁移中碰到的点点滴滴,希望对朋友们有所帮助。AzureSQL

  • 正文开始
  • 相关阅读
  • 推荐作品

最近有一个维护项目,需要把SQL Server 2012的数据库迁移到Azure SQL上。迁移过程可谓一波三折,在此分享一下这次迁移中遇到的点点滴滴,希望对朋友们有所帮助。

Azure SQL 的版本

Azure SQL数据库是微软提供的SQL服务(PaaS)。最新版本名为Azure SQL Database V12。事实上,微软仍然通过SQL Server 2014提供数据库服务:

图中第一台数据库服务器是本地安装的SQL Server 2014,第二台和第三台是云端的Azure SQL数据库。我们可以清楚地看到,他们的版本是相同的。

但是不要以为Azure SQL数据库提供的数据库和本地安装的版本一样。它们之间还是有很多区别的,这一点在迁移现有数据库时尤为重要。

因为提供在线服务,Azure SQL数据库可以快速发布新功能,这一点从不断更新的MSDN文档中可以看出。MS也强烈建议,在处理Azure SQL数据库时,一定要使用最新版本的工具。我刚刚开始在SQL Server 2014中使用SSMS (SQL Server Management Studio)。结果连接Azure SQL后发现显示的信息与Azure portal不符,安装最新版本的SSMS后问题消失。

让我们言归正传,看看迁移过程中需要什么样的工具,如何操作,注意事项。这里强调一下,老数据库一般都在用,不要在真实数据库上做各种实验。作者之前的所有实验都是在通过恢复备份文件创建的测试库上完成的。

00-1010

迁移要点分析

Azure SQL数据库运行在Azure SQL Server上,所以我们要先在Azure上创建Azure SQL Server。操作过程比较简单。直接在Azure上添加SQL Server(逻辑服务器)即可。请注意选择合适的区域(这会影响访问速度)。

00-1010创建Azure SQL Server后,我们将通过SSMS测试连接。当我们输入正确的地址和用户信息后,会弹出一个提示框:

它提示我们当前IP无法访问Azure上的数据库服务器,并让我以Azure帐户登录并创建防火墙规则。

其实这是Azure提供的一种安全措施,可以让你明确指定哪些IP地址或者IP网段可以访问Azure SQL Server。

此时,我们有两个解决方案:

1.点击对话框中的“登录”,使用Azure账号登录;然后点击“确定”。此时,防火墙规则已经设置好,SSMS已经登录到Azure SQL Server。这种方法一般用于开发和测试,只能添加当前客户端使用的IP。

2.更一般的方法是登录Azure portal,进入Azure SQL Server的配置界面,为防火墙添加规则。同样,您可以一次添加一个IP或一个网段:

在云端创建 Azure SQL Server

因为MS SQL Server的版本很多,而且云上的版本和本地的版本不一样,所以迁移能否成功主要取决于能否找到并解决数据库之间的兼容性问题。

下面将详细介绍作者遇到的兼容性问题。

00-1010

允许从本地访问 Azure SQL Server

兼容性检查报告显示以下信息:

错误SQL71564:验证元素[xxxx]时出错:元素[xxxx]已被孤立

its login and cannot be deployed.

其中的xxxx是数据库中设置的用户名。

这个错误的原因是用户被定义在本地的 SQL Server 中,数据库中一旦使用用户的信息,把数据库迁移到云上后,就找不到对应用户的定义了,所以就需要移除本地用户的信息。

不用担心数据库的访问问题,因为完成迁移后,你可以使用刚才创建的 Azure SQL Server 账号访问数据库。当然你也可以为一个数据库创建独立的访问账号,具体操作请参考 MSDN。

不支持Extended Property

兼容性检查的报告显示下面的信息:

One or more unsupported elements were found in the schema used as part of a data package.

Error SQL71564: The element Extended Property: [dbo].[xxxx].[MS_Description] is not supported when used as part of a data package (.bacpac file).


其中的xxxx是数据库中一张表的名称。

这下可麻烦了,不支持 Extended Property!在笔者的数据库中有好几处都用到了这个特性。怎么办?只好一遍又一遍的查看程序。最后发现程序中没有使用这个特性,好像当时只是有人用它做了一些说明。还好,最终的结论是可以移除的。

创建 clustered index

兼容性检查的报告显示下面的信息:

One or more unsupported elements were found in the schema used as part of a data package.

Error SQL71564: Table Table: [dbo].[xxxx] does not have a clustered index. Clustered indexes are required for inserting data in this version of SQL Server.

其中的xxxx是数据库中一张表的名称。

需要给表创建 clustered index,这可不是一件小事情,因为任何对表的修改都可能会影响到程序逻辑,怎么办呢?网上的朋友们早就有了比较靠谱的解决方案,就是给表添加一列用来做 clustered index,这样原来表中的列就没有发生变化:

ALTER TABLE [xxxx] ADD

RowId int NOT NULL IDENTITY (1, 1) PRIMARY KEY CLUSTERED

GO

其他

还有一些点,主要是和业务相关的,就不在此赘述。个人感觉绝大多数的问题在网上都有不同的解决方案,关键是要采用自己的业务能够接受的方式去解决问题。

接下来把所有对数据库的变更写成一个脚本文件,在正式的迁移中,直接在正式库上执行脚本文件。

迁移过程

MS提供了不同的工具进行兼容性检查、迁移等工作。我们这里统统使用 SSMS (SQL Server Management Studio) 。

下面看看具体的操作步骤。

在 SSMS 中右键需要迁移的数据库,选择 Tasks 中的 ”Deploy Database to Microsoft Azure SQL Database…”。

 


在打开的向导中点击 “next” 进入 “Deployment Settings” 界面。

首先需要设置Azure SQL Server的连接地址和连接账号:

 


接下来设置迁移后的数据库名称和资源配置:

 


注意 Azure SQL Database settings,MS把数据库使用的资源划分成了三个不同的类别:Basic, Standard, Premium。每个类别中又划分了不同的收费标准,简单说就是你要使用更多更好的资源就要付更多的钱。当然也可以反过来说,如果我用的资源不多,付一点点钱就够了!

我们发现上图中的最后一行要求我们为 *.bacpac 文件指定一个存储路径。*.bacpac 文件是迁移过程中生成的中间文件,当兼容性检查通过后,就把数据库中的所有内容都导出到这个文件中。从这个信息我们可以得知,无论采用何种迁移方式,其核心操作都是两步:先从本地数据库生成 *.bacpac 文件,再从*.bacpac 文件恢复一个 Azure SQL Database。

单击 “Next” 显示配置的详情,再下一步就开始兼容性检查。如果没有兼容性问题,就执行迁移操作。

我的数据库存在一些兼容性问题,所以显示了错误报告并终止了迁移操作:

 


点击 “Result” 列中的链接就能看到详细的报告,前面已经介绍过兼容性问题,直接执行我们处理兼容性问题的脚本文件,然后再试一次!

 


这次的执行已经没有错误提示了,其实后台已经开始了迁移过程。比较不方便的是这个过程没有详细的进度提示,只能耐心等待。我的经验数据是8G的库完成迁移大概是8-12小时。当然这和你连接 Azure 的带宽有很大的关系…

结语

由于整个迁移过程涉及的方方面面实在太多,本文只是概要式的介绍笔者认为迁移过程中的要点和自己碰到的问题。总体感觉是MS提供的工具还算比较完善,网络上的各种已知问题解决方案也很详尽。所以尽管笔者碰到了很多的问题,但没有卡住的地方,总算磕磕绊绊的完成了数据库迁移的任务。



 本文来源https://www.cnblogs.com/powertoolsteam/p/5776326.html

从0构建SQL Server AlwaysOn第3章(配置AlwaysOn)
« 上一篇 2022-09-23
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
  • 拓扑岭CEO雷鹏:创业不只是技术
    0阅读 0条评论 个赞
    云计算的出现,加速了企业信息技术的发展。数据库是最常用的基础软件之一,它通常能提供计算和存储的能力。虽然分布式数据库也做到了很好的扩展性,但它不能算是「云原生」。「云原生数据库」的核心,是要设计一种更……
  • Hadoop JMX监控和预警
    0阅读 0条评论 个赞
    .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
  • 关于这个能见度的例子 网上95%的文章都是错的!
    0阅读 0条评论 个赞
    你好,我是坤哥上周我在查阅资料时无意中搜到一篇解释volatile用法的博文,这篇博文排得很靠前,不过很遗憾,虽然结论是对的,但分析过程完全错误,而且我发现网上很多文章都用这个例子来解释vola……
  • Java根据为什么要使用模板生成单词文件
    0阅读 0条评论 个赞
    1.准备模板模板+数据=模型1、将准备好的Word模板文件另存为.xml文件(PS:建议使用WPS来创建Word文件,不建议用Office)2、将.xml文件重命名为.ftl文件3、用文本编……
  • 如何使用helm优雅地安装prometheus-operator并监控k8s集群微服务
    0阅读 0条评论 个赞
    前言:随着云原生概念盛行,对于容器、服务、节点以及集群的监控变得越来越重要。Prometheus作为Kubernetes监控的事实标准,有着强大的功能和良好的生态。但是它不支持分布式,不支持数据……
  • smile——Java机器学习引擎
    2阅读 0条评论 个赞
    资源https://haifengl.github.io/https://github.com/haifengl/smile介绍Smile(统计机器智能和学习引擎)是一个基于Java和Scala的快速……
  • 面试官:谈谈你对mysql事务的认识?
    0阅读 0条评论 个赞
    引言今天回头继续讲讲数据库系列的文章。这篇文章属于mysql数据库系列,我们来谈谈事务方面的常见面试题。那么,具体题目有下面这些:1、讲讲为什么用事务?事务的四大特性?事务的隔离级别知道吧,你们生产……
  • SQL Server动态生成分区脚本
    0阅读 0条评论 个赞
    一、前言前段时间使用表分区比较多,虽然已经写了SQLServer合并(删除)分区解惑、SQLServer2005分区模板与实例,但是在实践中一直感觉修改SQL脚本的时间比较多,一直想抽个时间来把……
  • 基于 网络6的轻量级Webapi框架紧固点
    0阅读 0条评论 个赞
    大家好,我是等天黑。FastEndpoints是一个基于.NET6开发的开源webapi框架,它可以很好地替代.NETMinimalAPIs和MVC,专门为开发效率而生,带来了全……
  • web端pdf编辑能力的设计与实践
    0阅读 0条评论 个赞
    本期作者顾伊凡哔哩哔哩资深开发工程师2021年加入B站,负责UP主创作激励、收益中心、电子签约平台前端建设。本文将从业务场景与技术实现等角度对“web端pdf编辑能力”进行基本的介绍。01背景B站电……
  • 如何优雅地转换Bean对象
    0阅读 0条评论 个赞
    背景我们的故事要从一个风和日丽的下午开始说起!这天,外包韩在位置上写代码~外包韩根据如下定义PO(persistantobject):持久化对象,可以看成是与数据库中的表相映射的java对象。最……
  • 渗透攻击和防御网络-简单的SQL注入
    0阅读 0条评论 个赞
    1背景京东SRC(SecurityResponseCenter)收录大量外部白帽子提交的sql注入漏洞,漏洞发生的原因多为sql语句拼接和Mybatis使用不当导致。2手工检测2.1前置知识……
  • Oracle服务器迁移的一些经验
    3阅读 0条评论 个赞
    前言通过此文章来分享一下Oracle服务器迁移过程中的一些经验,希望对大家有些许帮助。本文旨在帮助更多的同学,会提及一些基本命令或技巧,但不赘述,后续有机会再进一步分享各个细节。背景之前因机房迁移……
  • 前端必读:如何用JavaScript中的SpreadJS导入导出Excel文件
    0阅读 0条评论 个赞
    JavaScript在前端领域占据着绝对的统治地位,目前更是从浏览器到服务端,移动端,嵌入式,几乎所有的所有的应用领域都可以使用它。技术圈有一句很经典的话“凡是能用JavaScript实现的东西,最后……
  • 学习Linux 就看这篇文章!
    0阅读 0条评论 个赞
    对于测试同学来说,Linux基本属于必学必会内容,招聘要求中基本都会出现Linux相关字眼,面试也经常被问到,原因很简单,因为现在公司的服务器绝大多数都是Linux,如果你一无所知,很多时候听不懂别人……
  • JavaScript设计模式和代码实现——单例模式
    0阅读 0条评论 个赞
    单例模式1定义#保证一个类仅有一个实例,并提供一个访问它的全局访问点。2应用时机#当一个类的实例被频繁使用,如果重复创建这个实例,会无端消耗资源。比如dialog弹窗会被全局重复使用业务功能本……
  • 计算机网络-了解-DNS和HTTPDNS
    0阅读 0条评论 个赞
    DNS和HTTPDNSDNS域名解析的过程传统DNS存在的问题1、域名缓存问题2、域名转发问题3、出口NAT问题4、DNS域名更新问题5、解析延迟问题6、运营商劫持HTTPDNSHTTP……
  • 当老板让我从Java8升级到Java11时
    4阅读 0条评论 个赞
    老板让我把一个项目从Java8迁移到Java11,我该怎么办呢?最简单的办法,当然是直接强行升级,遇到一个错就改一个错,别看它low,但是对于一个小型且非核心的项目来说,已经足够了。当然,……
  • spring接口有多个实现类 应该给哪个注入这个依赖?
    0阅读 0条评论 个赞
    一、问题的描述在实际的系统应用开发中我经常会遇到这样的一类需求,相信大家在工作中也会经常遇到:同一个系统在多个省份部署。一个业务在北京是一种实现方式,是基于北京用户的需求。同样的业务在上海是另外一种实……
  • Velox简介:一个开源的统一执行引擎
    0阅读 0条评论 个赞
    •Meta正在引入Velox,这是一个开源的统一执行引擎(unifiedexecutionengine),旨在加速数据管理系统和简化其开发。•Velox正在积极开发中,Meta在2022……
最近发布资讯
更多