Sql-Server

在 Standard Edition 上恢復數據庫時出現錯誤 909

  • February 6, 2016

我遇到了 SQL Server 2012 標準版(64 位)的問題。

我已經重建了一個系統,其軟體規格與之前建構的完全相同(Windows 2012、SQL Server 2012 標準版)。載入大多數數據庫似乎沒有問題,除了少數在嘗試恢復時會導致以下錯誤:

無法在此版本的 SQL Server 中啟動數據庫“xxx”,因為對象“國家/地區”的部分或全部啟用了數據壓縮或 vardecimal 儲存格式。只有 SQL Server Enterprise Edition 支持數據壓縮和 vardecimal 儲存格式。

無法啟動數據庫“xxx”,因為某些數據庫功能在目前版本的 SQL Server 中不可用。(Microsoft SQL Server,錯誤:909)

SQL Server 的早期版本也是標準版本。沒有解除安裝重裝企業版,有解決辦法嗎?我做了一些搜尋,並嘗試了以下操作,但除了將其設置為“緊急模式”之外,它並不想對數據庫做任何事情。

從可疑模式中恢復 SQL Server 數據庫

根據錯誤消息,您的數據庫包含表中的企業版功能Country。首先,在原始(舊)伺服器上檢查以下內容:

SELECT SERVERPROPERTY('Edition');

這應該會告訴您您是在 Standard、Enterprise 還是 Developer Edition 上執行。Developer Edition 支持所有企業功能(具有不同的許可條款)。這可能是問題嗎?

檢查是否在任何對像上啟用了壓縮、分區或 vardecimal:

SELECT s.[name]+'.'+o.[name] AS [object], i.[type_desc] COLLATE database_default+ISNULL(' '+i.[name], '') AS index_name,
      (CASE WHEN COUNT(DISTINCT p.partition_number)>1 THEN 'Is partitioned' ELSE '' END) AS [partitioned?],
      ISNULL(MIN(NULLIF(p.data_compression_desc, 'NONE'))+' compression', '') AS [compressed?],
      (CASE WHEN ISNULL(OBJECTPROPERTY(p.[object_id], 'TableHasVarDecimalStorageFormat'), 0)=0 THEN '' ELSE 'vardecimal' END) AS [vardecimal?]
FROM sys.partitions AS p
INNER JOIN sys.indexes AS i ON p.[object_id]=i.[object_id] AND p.index_id=i.index_id
INNER JOIN sys.objects AS o ON i.[object_id]=o.[object_id]
INNER JOIN sys.schemas AS s ON o.[schema_id]=s.[schema_id]
GROUP BY p.[object_id], s.[name], o.[name], i.index_id, i.[type_desc], i.[name]
ORDER BY s.[name], o.[name], i.index_id

最後,看看有沒有你沒有清理的分區函式或者分區方案:

SELECT [name] FROM sys.partition_functions;
SELECT [name] FROM sys.partition_schemes;

您還可以參考以下連結(最初由 Shanky 在評論中提供):

如何在將數據庫還原/遷移到 SQL Server 2008 企業版以外的任何版本之前辨識壓縮表

引用自:https://dba.stackexchange.com/questions/128486