1. 程式人生 > >遷移 SQL Server 資料庫到 Azure SQL 實戰

遷移 SQL Server 資料庫到 Azure SQL 實戰

最近有個維護的專案需要把 SQL Server 2012 的資料庫遷移到 Azure SQL 上去,遷移過程可謂一波三折,故在此分享這次遷移中碰到的點點滴滴,希望對朋友們有所幫助。

Azure SQL 的版本

Azure SQL Database 是微軟提供的 SQL 服務(PaaS)。最新的版本叫 Azure SQL Database V12,其實微軟還是通過 SQL Server 2014 來提供資料庫服務:

 

上圖中第一個資料庫伺服器是本地安裝的 SQL Server 2014,第二個和第三個則是雲上的 Azure SQL Database。我們可以很清楚的看到,它們的版本是一樣的。

但是可不要以為 Azure SQL Database 提供的資料庫和本地安裝版本是一樣的噢。它們還是有不少差別的,這一點在遷移現有資料庫時尤為重要。

由於提供的是線上的服務,所以 Azure SQL Database 可以快速的釋出新特性,這些從不斷更新的 MSDN 文件可見一斑。MS也強烈建議我們在和 Azure SQL Database 打交道時一定要用最新版的工具。筆者在剛開始使用了 SQL Server 2014 中的 SSMS (SQL Server Management Studio) ,結果連線 Azure SQL 後發現顯示的資訊和 Azure portal 對不上,安裝最新版的 SSMS 後問題消失。

下面進入正題,看看遷移的過程中都需要什麼樣的工具,如何操作以及需要注意的事項。在此特別強調,舊資料庫一般都是處於正在使用的狀態,所以千萬不要在真實的庫上做各種實驗。筆者所有的前期實驗都是在通過恢復備份檔案建立的測試庫上完成的。

遷移要點分析

在雲端建立 Azure SQL Server

Azure SQL Database 是執行在 Azure SQL Server 中的,所以我們要在 Azure 上先把 Azure SQL Server 建立好。操作過程比較簡單,直接在 Azure 上新增 SQL Server (logical server) 就可以了,請注意選擇合適的區域(這會影響訪問速度)。

允許從本地訪問 Azure SQL Server

Azure SQL Server 建立好以後,我們通過 SSMS 測試一下連線情況。當我們輸入了正確的地址和使用者資訊後卻彈出了一個提示框:

 

它提示我們,當前的IP不能訪問 Azure 上的資料庫伺服器,並且讓我以 Azure 賬號登入並建立一條防火牆規則。

其實這是 Azure 提供的一個安全措施,它讓你顯式的指定哪些IP地址或者IP網段可以訪問 Azure SQL Server。

此時我們有兩種解決方法:

1.點選對話方塊中的 ”Sign in”,用 Azure 賬戶登入;然後點選 ”OK”,此時已經完成了防火牆規則的設定,SSMS 已登入 Azure SQL Server。這種方法一般用於開發和測試,只能添加當前客戶端所使用的IP。

2.更加通用的方法是登入 Azure portal,進入 Azure SQL Server 的配置介面,為防火牆新增規則。同樣的,可以新增單個IP也可以一次新增一個網段:

 

相容性處理

由於 MS SQL Server 版本眾多,且雲上的版本與本地版本也有差異,所以能不能遷移成功,主要看能不能找到並解決資料庫之間的相容性問題。

下面將詳細的介紹筆者碰到的相容性問題。

相容性處理詳情

資料庫中設定的使用者不存在

相容性檢查的報告顯示下面的資訊:

Error SQL71564: Error validating element [xxxx]: The element [xxxx] has been orphaned from 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提供的工具還算比較完善,網路上的各種已知問題解決方案也很詳盡。所以儘管筆者碰到了很多的問題,但沒有卡住的地方,總算磕磕絆絆的完成了資料庫遷移的任務。

相關推薦

遷移 SQL Server 資料庫Azure SQL 實戰

最近有個維護的專案需要把 SQL Server 2012 的資料庫遷移到 Azure SQL 上去,遷移過程可謂一波三折,故在此分享這次遷移中碰到的點點滴滴,希望對朋友們有所幫助。Azure SQL 的版本Azure SQL Database 是微軟提供的 SQL 服務(Pa

Sql server資料庫連線Oracle庫的步驟

本地使用環境 作業系統: win10 64  ,SQL Server 2012 ,Oracle  Server 11g 第一步:安裝好oracle客戶端,並配置好TNS資訊 ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = T

SQL Server資料庫基礎

建庫建表: if DB_id('TicketManager ')is not null --判斷資料庫是否已經存在 drop database TicketManager --移除已經存在的資料庫 go create database TicketManager --新建資料庫 on (

SQL Server資料庫mdf檔案中了勒索病毒.sicck。副檔名變為sicck

SQL Server資料庫mdf檔案中了勒索病毒sicck。副檔名變為sicck SQL,資料庫,勒索病毒,mdf檔案中毒,sicck 副檔名如下: [[email protected]]***.mdf.sicck [[email protected]]***.ldf.sicck

Sql Server資料庫資料恢復成功案例

故障描述: 5塊2T硬碟組建RAID5,劃分LUN供windows伺服器使用。在windows伺服器內裝有Sql Server2008資料庫。儲存空間內共有三個邏輯分割槽,大小分別為500G、800G、2.3T。資料庫檔案丟失,主要涉及五個資料庫,表個數約為6000個左右。丟失原因未知,且不能確

SQL Server資料庫mdf檔案中了勒索病毒Goat4444。副檔名變為Goat4444

SQL,資料庫,勒索病毒,mdf檔案中毒,Rooster4444 *SQL Server資料庫mdf檔案中了勒索病毒.mdf.Rooster4444。副檔名變為Rooster4444 SQL Server資料庫mdf檔案中了勒索病毒Rooster4444。副檔名變為Rooster4444 常見的副檔名如

SQL Server資料庫mdf檔案中了勒索病毒no_more_ransom。副檔名變為no_more_ransom

SQL,資料庫,勒索病毒,mdf檔案中毒,no_more_ransom  SQL Server資料庫mdf檔案中了勒索病毒.mdf.no_more_ransom。副檔名變為no_more_ransom SQL Server資料庫mdf檔案中了勒索病毒no_more_ransom。副

SQL Server資料庫mdf檔案中了勒索病毒[email p

SQL,資料庫,勒索病毒,mdf檔案中毒,[email protected]_email *SQL Server資料庫mdf檔案中了勒索病毒[email protected]_email。副檔名變為[email protected]_email SQL Serv

SQL Server資料庫mdf檔案中了勒索病毒Rat4444 。副檔名變為Rat4444

SQL,資料庫,勒索病毒,mdf檔案中毒,Rat4444 *SQL Server資料庫mdf檔案中了勒索病毒.mdf.Rat4444。副檔名變為Rat4444 SQL Server資料庫mdf檔案中了勒索病毒Rat4444。副檔名變為Rat4444 常見的副檔名如下:.ALCO .BIP .COMBO

SQL Server資料庫log shipping 災備

https://www.cnblogs.com/Aldj/p/8605163.html SQL Server資料庫log shipping 災備(Part1 ) 1.概述Log Shipping為SQL Server提供的資料庫備份過程。它可以將資料庫整個複製到另一臺伺服器上。在這種情況下,交易日誌也會定

SQL Server資料庫級別觸發器

禁止修改表結構和加表  CREATE TRIGGER [Object_Change_Trigger_DDL] ON DATABASE FOR ALTER_TABLE,DROP_TABLE,CREATE_TABLE,CREATE_INDEX,ALTER_INDEX

Matlab連線Sql server資料庫

作業系統:64位win7.0 軟體版本:Matlab R2016a SQL Sever 2012 一、建立資料庫和相應的表 建立好資料庫和其中的表,步驟不做詳細介紹。 二、配置ODBC  ODBC(Open Database Conne

【學習記錄】第一章 資料庫設計-《SQL Server資料庫設計和開發基礎篇視訊課程》

一、課程筆記 1.1  軟體開發週期   (1)需求分析階段   分析客戶的業務和資料處理需求。 (2)概要設計階段   設計資料庫的E-R模型圖,確認需求資訊的正確和完整。 /*   E-R圖:實體-關係圖(Entity Relationship Diagram),提供了

SQL Server入門(二) SQL Server 2017 express資料庫的安裝與SQL Server Management Studio管理資料庫

一、Sql Server 2017 express 安裝流程 https://jingyan.baidu.com/article/148a1921fe8f054d71c3b1cb.html 二、怎麼用SQL Server Management Studio管理資料庫 1、https://

SQL Server 資料庫修復步驟

SQL Server 資料庫修復步驟 1. ALTER DATABASE 資料庫名稱 SET EMERGENCY 2. ALTER DATABASE 資料庫名稱 SET SINGLE_USER 3. DBCC CheckDB (資料庫名稱 , REPAIR_ALLOW_DATA

SQL Server資料庫教程

第一章.SQL Server 2008的安裝 1)處理器:1.4GHz處理器,建議使用2.0GHz或更快的處理器     記憶體:最小:512MB,建議使用1GB或者更大的記憶體     磁碟容量:至少2.0GB有可用磁碟空間    

mybatis學習筆記之——連線SQL server資料庫(IDEA)

我們新建一個普通的專案,File --> New --> Project -->Java --> Java EE。然後新建專案即可。 專案完成後我們新建一個conf資料夾,用來存放配置資訊,新建一個lib資料夾,用來存放jar包。 我們將mybatis的jar包,連線

BCP工具的使用以及C++,SQL server資料庫中呼叫命令列的方法

BCP工具使用: BCP是由SYBASE公司提供的,專門用於資料庫表一級資料備份的工具。 主要引數如下: 基本用法: 遠端地址1的資料庫表student 匯出到本地(遠端ip1(10.189.1.1) ): bcp run.dbo.student out "c:\student

SQL Server 資料庫部分常用語句小結(二)

9. 查詢備份還原資料庫的進度。 select command ,percent_complete ,est_time_to_go=convert(varchar,(estimated_completion_time/3600000))+' hour, ' +convert(varchar,(estimat

SQL Server 資料庫調整表中列的順序操作

SQL Server 資料庫中表一旦建立,我們不建議擅自調整列的順序,特別是對應的應用系統已經上線,因為部分開發人員,不一定在程式碼中指明瞭列名。表是否可以調整列的順序,其實可以自主設定,我們建議在安裝後設置為禁止。 那麼,如果確實需要調整某一列的順序,我們是怎麼操作的呢? 下面,我們就要演示一下怎麼取消這