相容性認證
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體
相容性認證可讓企業將內部部署、雲端中和邊緣上的 SQL Server 資料庫升級並現代化,以排除應用程式相容性的風險。
相同的資料庫引擎同時支援 SQL Server 和 Azure SQL Database (包括 Azure SQL 受控執行個體)。 此共用的資料庫引擎表示使用者資料庫可以在內部部署 SQL Server 與 Azure SQL Database 之間順暢移動,而在資料庫中以 Transact-SQL 執行的應用程式程式碼將繼續如同在來源系統中那樣運作。
針對 SQL Server 的每個新版本,預設相容性層級會設為資料庫引擎的版本。 但是會保留舊版的相容性層級,以保持現有應用程式的相容性。 您可以在這裡查看此相容性矩陣。 因此,經認證使用指定 SQL Server 版本的應用程式,實際上已經認證使用該版本的預設相容性層級。
例如,資料庫相容性層級 130 是 SQL Server 2016 (13.x) 中的預設值。 由於相容性層級會強制執行特定的 Transact-SQL 功能性和查詢最佳化行為,因此經認證在 SQL Server 2016 (13.x) 上運作的資料庫已在資料庫相容性層級 130 上以隱含方式認證。 只要資料庫相容性層級保留為 130,此資料庫就可以在較新版本的 SQL Server (例如 SQL Server 2019 (15.x)) 和 Azure SQL Database 中依現況運作。
這是 Microsoft Azure SQL Database 持續整合作業模型的基本原則。 資料庫引擎會持續在 Azure 中改善並升級,但因為現有資料庫會保留其目前的相容性層級,因此即使在升級至基礎資料庫引擎之後,仍會繼續以原先設計的方式運作。
這也是 SharePoint Server 2016 和 SharePoint Server 2019 在 SQL Server 與 Azure SQL 受控執行個體上的認證方式,其可供針對這些 SharePoint 伺服器版本使用支援的資料庫相容性層級來部署任何 SQL Server 資料庫引擎。 如需詳細資訊,請參閱 SharePoint Server 2016 的硬體和軟體需求以及 SharePoint Server 2019 的硬體和軟體需求。
使用相容性認證管理升級風險
使用相容性憑證是將資料庫現代化的重要方法。 藉由以相容性層級為基礎來進行認證,開發人員可以設定在 SQL Server 和 Azure SQL Database 上支援應用程式的技術需求,但會將應用程式生命週期從資料庫平台生命週期分離。 這可讓公司根據生命週期原則來視需要保持 SQL Server 資料庫引擎升級、利用不相依於程式碼的新延展性和效能增強功能,並透過升級來連線應用程式以維護其功能狀態。
任何升級的主要風險因素為可能會對功能和效能造成負面影響。 相容性憑證可讓您安心管理這些升級風險:
在與 Transact-SQL 行為相關的情況下,任何變更都表示需要重新認證應用程式以確保正確。 不過,資料庫相容性層級設定提供與舊版 SQL Server 的回溯相容性,其僅適用於指定的資料庫而非整部伺服器。 保持資料庫相容性層級的一致性,可確保現有應用程式查詢會在資料庫引擎升級前後繼續顯示相同的行為。 如需 Transact-SQL 行為和相容性層級的詳細資訊,請參閱使用相容性層級以提供回溯相容性。
在與效能相關的情況下,由於查詢最佳化工具的改善會隨著每個版本引進,所以可能會在不同資料庫引擎版本之間遇到查詢計畫的差異。 當有某些變更可能對指定的查詢或工作負載造成不利的可能性時,升級範圍中的查詢計劃差異通常會成為風險。 反過來說,這項風險通常會導致需要重新認證應用程式,但可能會延遲升級,並造成生命週期和支援方面的挑戰。
之所以將「查詢最佳化工具」改善限制在新版本預設相容性層級 (換句話說,即可供任何新版本使用的最高相容性層級),是為了降低升級風險。 相容性認證包含查詢計畫圖形保護:在升級資料庫引擎後立即將資料庫相容性層級維持原狀的概念,可解釋為在新版本中使用與升級前相同的查詢最佳化模型,且查詢計畫圖形不應變更。
如需詳細資訊,請參閱本文的為何使用查詢計劃圖形?一節。
如需有關相容性層級的詳細資訊,請參閱使用相容性層級以提供回溯相容性。
重要
針對已通過指定相容性層級認證的現有應用程式,請升級 SQL Server 資料庫引擎,並維持先前的資料庫相容性層級。 在此案例中,不需要重新認證應用程式。 如需詳細資訊,請參閱本文稍後的相容性層級和資料庫引擎升級。
若要進行新的開發工作,或現有的應用程式需要使用新功能 (例如智慧型查詢處理以及某些新的 Transact-SQL),請規劃將資料庫相容性層級升級至 SQL Server 中可用的最新層級,並重新認證應用程式以便在該相容性層級下運作。 如需有關升級資料庫相容性層級的詳細資訊,請參閱升級資料庫相容性層級的最佳做法。
為何使用查詢計劃圖形?
查詢計劃圖形係指組成查詢計劃之各種運算子的視覺表示方式。 這包括搜尋、掃描、聯結和排序等運算子,以及它們之間表示資料流程與必須執行以產生所需結果集之作業順序的連接。 查詢計畫圖形由查詢最佳化工具所決定。
若要在升級期間維持穩定的查詢效能,其中一個基本目標就是確保使用相同的查詢計劃圖形。 達成此目標的做法是,不要在升級後立即變更資料庫相容性層級,即使基礎資料庫引擎具有不同的版本也一樣。 如果查詢執行生態系統中沒有任何其他變更 (例如可用資源方面或基礎資料中之資料散發方面的重大變更),則查詢效能應該維持不變。
不過,保留查詢計畫圖形並非唯一在升級後可能影響效能的因素。 如果您將資料庫移至較新的資料庫引擎且亦進行環境變更,則即使查詢計畫在不同版本間保留相同圖形,也可能引進將對查詢效能有立即影響的因素。 這些環境變更可能包括新資料庫引擎具有較多或較少可用的記憶體和 CPU 資源、伺服器或資料庫組態選項變更,或是影響查詢計畫建立方式的資料散發變更。 這就是為什麼必須瞭解維持資料庫相容性層級可防止查詢計劃圖形變更,但無法防護影響查詢效能的其他環境層面,其中有些是使用者起始的變更。
如需詳細資訊,請參閱查詢處理架構指南。
相容性認證的優點
使用相容性方法 (而不是命名版本方法) 的資料庫憑證,有幾個立即優點:
- 將應用程式憑證從平台分離。 由於其共用資料庫引擎,因此對於只需要執行 Transact-SQL 查詢的應用程式,不需要維護 Azure 和內部部署的個別認證流程。
- 由於可在資料庫平台現代化的期間將應用程式從資料庫平台層升級週期分開,以減少中斷並改善變更管理,因此可以降低升級風險。
- 在不變更程式碼的情況下升級。 藉由保留與來源系統相同的相容性層級,在不需變更程式碼的情況下即可升級至新版 SQL Server 或 Azure SQL Database,且不需立即重新認證,直到應用程式需要使用僅供較高資料庫相容性層級使用的增強功能時,才需重新認證。
- 使用不受資料庫相容性層級所管制的增強功能,不需要變更應用程式即可改善管理性和可擴縮性。 例如,在 SQL Server 中這些包括:
新資料庫仍會設定為資料庫引擎版本的預設相容性層級。 但是,當資料庫從任何舊版 SQL Server 還原或附加至新版 SQL Server 或 Azure SQL Database 時,資料庫會保留其現有的相容性層級。
重要
將資料庫移至新版 SQL Server 或 Azure SQL Database 之前,請先確認資料庫相容性層級是否仍受支援。 您可以在這裡看到資料庫相容性層級支援矩陣。
升級相容性層級低於所允許層級的資料庫 (例如 90,這是 SQL Server 2005 (9.x) 中的預設值) 時,會將資料庫設定為允許的最低相容性層級 (100)。
若要判斷目前的相容性層級,請查詢 sys.databases 的 compatibility_level 資料行。
相容性層級和資料庫引擎升級
若要將資料庫引擎升級至最新版本,同時維護升級前已存在的資料庫相容性層級及其可支援性狀態,則建議執行資料庫 (可程式性物件,例如預存程序、函數、觸發程序等) 及應用程式 (使用擷取應用程式所傳送動態程式碼的工作負載追蹤) 中應用程式程式碼的靜態功能介面區驗證。
您可使用 Microsoft Data Migration Assistant 工具 (DMA) 輕鬆完成這項作業。 在 DMA 工具輸出中,由於沒有關於遺失或不相容功能的錯誤,因此可防止應用程式在新的目標版本上出現任何功能迴歸的情況。 如果需要變更以確保資料庫可在新版本中運作,則 DMA 將可供找出需要變更的位置,以及可用的因應措施。 如需詳細資訊,請參閱 Data Migration Assistant 總覽 (機器翻譯)。
提示
將資料庫從舊版本 (例如 SQL Server 2008 R2 (10.50.x) 或 SQL Server 2012 (11.x)) 移至 SQL Server 或 Azure SQL Database 的新版本時,這項功能驗證特別重要,因為應用程式程式碼可能使用了已中止的 Transact-SQL,而不受資料庫相容性層級的保護。 但是,從較新版本 (例如 SQL Server 2016 (13.x)) 移至 SQL Server 2019 (15.x) 或 Azure SQL Database 時,則無需擔心 Transact-SQL 已中止的情況發生。 如需 Transact-SQL 已中止的詳細資訊,請參閱使用相容性層級以提供回溯相容性。
注意
DMA 支援資料庫相容性層級 100 (含) 以上。 已排除 SQL Server 2005 (9.x) 作為來源版本。
重要
Microsoft 建議執行一些基本測試,以驗證升級是否成功,同時維護先前的資料庫相容性層級。 您應該決定基本測試對您自己的應用程式和情節所代表的意義。
重要
Microsoft 會在下列情況下提供查詢計劃圖形保護:
- 新版 SQL Server (目標) 執行所在的硬體,相當於舊版 SQL Server (來源) 執行所在的硬體。
- 目標 SQL Server 和來源 SQL Server 上使用相同的受支援資料庫相容性層級。
- 在目標 SQL Server 與來源 SQL Server 上都會使用相同的資料庫與工作負載。
上述情況中所發生的任何查詢計畫圖形迴歸 (相較於來源 SQL Server) 都會得到解決。 如果發生這種情況,請連絡 Microsoft 客戶支援。