當您將它附加至執行個體的 SQL Server 2012年較早版本的 SQL Server 的資料庫變得不穩定

文章翻譯 文章翻譯
文章編號: 2710782 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

請考慮下列情況:
  • 您安裝的 Microsoft SQL Server 2005年的 Microsoft SQL Server 2008 中,或 Microsoft SQL Server 2008 R2 的執行個體。
  • SQL Server 的執行個體為 INST1],裝載資料庫,名為 Test_RO_FG_DB。
  • 資料庫包含下列檔案群組:
    • 主要
    • RO_FG
    • RW_FG
  • 名為 RO_FG 的檔案群組會標示為 READ_ONLY。
  • 您安裝 Microsoft SQL Server 2012年的新執行個體。這個執行個體的 SQL Server 2012年被命名為 INST2。
  • 卸離 INST1 的 Test_RO_FG_DB 資料庫。
  • 您嘗試將資料庫附加到 Test_RO_FG_DB 到 INST2。
  • 您會收到類似下列的錯誤訊息:
    訊息 3415,層次 16,狀態 1,行 1
    無法升級資料庫 'Test_RO_FG_DB',因為它是唯讀的有唯讀檔案,或是使用者沒有修改的檔案部份的權限。請將資料庫或檔案的可寫入,然後重新執行復原。
  • 您嘗試重新附加至 INST1 Test_RO_FG_DB 資料庫。
在這個案例中,您無法重新附加資料庫,如此。同時,您會收到下列錯誤訊息 SQL Server 的錯誤記錄檔中:

2012-05-03 22:55:45.37 spid52 'Test_RO_FG_DB' 資料庫正在啟動。
2012-05-03 22:55:45.78 spid52 * *******************************************************************************
2012-05-03 22:55:45.78 spid52 1 開始堆疊傾印:
2012-05-03 22:55:45.78 spid52 1 05/03/12 22: 55: 45 spid 52
2012-05-03 22:55:45.78 spid52 1 的位置: logscan.cpp:1490
2012-05-03 22:55:45.78 spid52 1 運算式: FALSE
2012-05-03 22:55:45.78 spid52 1 SPID: 52
2012-05-03 22:55:45.78 spid52 1 處理序識別碼: 9156
2012-05-03 22:55:45.78 spid52 1 描述: 無效的參數值
2012-05-03 22:55:45.78 spid52 1 的輸入緩衝區 98 位元組-
2012-05-03 22:55:45.78 spid52 1 改變 Test_RO_FG_DB 設定連線的資料庫
2012-05-03 22:55:51.05 spid52 的錯誤: 17065,高的嚴重性等級: 16,狀態: 1。
2012-05-03 22:55:51.05 spid52 SQL Server 判斷提示: 檔案: <logscan.cpp>,列 = 1490年失敗的判斷提示 = 'FALSE' 無效的參數值。這項錯誤可能是預存時間相關。如果錯誤持續發生,然後重新執行此陳述式之後,若要檢查的資料庫結構的完整性,使用 DBCC CHECKDB,或重新啟動伺服器以確保記憶體內部資料結構並未損毀。
2012-05-03 22:55:51.10 spid52 的錯誤: 3624,高的嚴重性等級: 20 日的狀態: 1。
2012-05-03 22:55:51.10 spid52 a 系統判斷提示檢查失敗。請檢查 SQL Server 錯誤記錄檔以取得詳細資料。一般而言,判斷提示失敗被因為軟體錯誤或資料損毀。若要檢查資料庫損毀,請考慮執行 DBCC CHECKDB。如果您同意在安裝過程中傳送給 Microsoft 的傾印,小型傾印會傳送給 Microsoft。更新會提供 microsoft 最新的 Service Pack 或技術支援從 QFE。
2012-05-03 22:56:09.16 spid52 的錯誤: 3414,高的嚴重性等級: 21 日狀態: 1。
修復,造成資料庫 (資料庫識別碼 19) ' Test_RO_FG_DB' 無法重新啟動時,發生 2012年-05-03 22:56:09.16 spid52,表示該工期為錯誤。診斷修復錯誤,並修正它們,或從已知完好的備份還原。如果未更正或預期的錯誤,請連絡技術支援。
2012-05-03 22:56:09.18 spid52 的錯誤: 928,高的嚴重性等級: 20 日的狀態: 1。
期間升級、 926 的資料庫引發例外狀況、 嚴重性 14、 狀態 1,2012年-05-03 22:56:09.18 spid52 0000000000F6A971 的位址。使用例外狀況的編號,以判斷原因。</logscan.cpp>


附註當您嘗試附加資料庫,其中包含標示 READ_ONLY 的檔案群組時,才會發生這個問題。當您嘗試移動其中的所有資料已都標示 READ_ONLY 的 READ_ONLY 資料庫時,就不會發生這個問題。

發生的原因

SQL Server 2012年沒有偵測到的唯讀檔案群組之後,才能開始升級資料庫,就會發生這個問題。開始升級後,SQL Server 2012年會寫入交易記錄檔項目。較早的版本無法讀取新的交易記錄檔項目。

狀況說明

Microsoft 已確認這是"適用於 」 一節所列出的 Microsoft 產品中的問題。

解決方案

累積更新資訊

SQL Server 2012

累積的更新程式 2] 中的 SQL Server 2012年首次發表的修正這個問題。如需有關此累積更新套件的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2703275 SQL Server 2012年的累積更新套件 2
附註 因為組建是累計的每個新的修正程式版本會包含所有的快速補充程式,並隨附於先前的 SQL Server 2012年所有安全性修正程式會都修正版本。Microsoft 建議您考慮將套用最新的修正程式版本,其中包含此 hotfix。如需詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2692828 SQL Server 2012年組建 SQL Server 2012年發行之後所發行,
您必須套用 SQL Server 2012 hotfix,才能安裝 SQL Server 2012年程序。

其他可行方案

若要解決這個問題,請使用下列方法之一。

方法 1

請從 INST1 在 INST2 上還原資料庫備份。

附註「 徵狀 〉 一節所述的問題不會發生在 SQL Server 2012年在還原的備份從較早版本。

方法 2

執行較早版本的 SQL Server 到 SQL Server 2012年就地升級。

方法 3

移動資料庫,其中包含執行個體的 SQL Server 2012年唯讀檔案群組。若要執行這項操作,請依照下列步驟執行。

附註正在執行 SQL Server 2012年的伺服器上執行步驟 4 到 11。比方說,在 INST2 上執行步驟 4 到 11。
  1. 如此,在卸離資料庫。比方說,您可以卸離 Test_RO_FG_DB 資料庫。
  2. 將資料庫檔案移動到伺服器裝載 (host) 的 INST2 執行個體。
  3. 請試著將資料庫附加到 INST2。下列程式碼範例示範如何執行這項操作:
    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG.mdf' ), 
    FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' ), 
    FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' )
    LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' )
    FOR ATTACH;
    GO
    附註您會收到 「 徵狀 〉 一節所描述的 3425 錯誤訊息。
  4. 在命令提示字元中,重新命名資料庫檔案。下列範例命令顯示如何執行這項操作:
    rename Test_RO_FG.mdf original_Test_RO_FG.mdf
    rename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndf
    rename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndf
    rename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf
  5. 在 SQL Server Management Studio,建立具有相同名稱和實體結構與您想要附加的資料庫的資料庫。下列程式碼範例示範如何執行這項操作:
    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
    FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
    FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
    LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    GO
  6. 將資料庫設為離線狀態。若要這樣做,請執行下列命令:
    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINE
    GO
  7. 在命令提示字元中,重新命名新的資料庫中的檔案。下列範例命令顯示如何執行這項操作:
    rename Test_RO_FG.mdf new_Test_RO_FG.mdf
    rename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndf
    rename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndf
    rename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf
  8. 在命令提示字元中,重新命名資料庫,並且在步驟 2 中的檔案。重新命名,使其符合您在步驟 4 中所建立的資料庫檔案。下列範例命令顯示如何執行這項操作:
    rename original_Test_RO_FG.mdf Test_RO_FG.mdf 
    rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf 
    rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf 
    rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf
  9. 將資料庫設為 [線上。若要這樣做,請執行下列命令:
    ALTER DATABASE [Test_RO_FG_DB] SET ONLINE
    GO
  10. 請檢查資料庫在線上,然後重新建立 Service Broker 功能。
  11. 刪除不需要的資料庫檔案。下列範例命令顯示如何執行這項操作:
    del /P new_Test_RO_FG.mdf
    del /P new_Test_RO_FG_File1.ndf
    del /P new_Test_RW_FG_File1.ndf
    del /P new_Test_RO_FG_log.ldf
方法 4

重新附加資料庫,其中包含的 SQL Server 較早的執行個體的唯讀檔案群組。若要執行這項操作,請依照下列步驟執行。

備忘稿
  • 資料庫也會包含新的交易記錄檔項目從升級失敗。
  • 執行較早版本的 SQL Server 伺服器上執行步驟 3 到 10。比方說,INST1 執行步驟 3 到 10。

  1. 將資料庫檔案移至裝載 (host) INST1 的 SQL Server 的執行個體。
  2. 請試著將資料庫附加到 INST1。下列程式碼範例示範如何執行這項操作:
    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' ), 
    FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' ), 
    FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' )
    LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' )
    FOR ATTACH
    GO
    附註您會收到 「 徵狀 〉 一節所描述的 3624 錯誤訊息。您也會收到 1813年錯誤訊息。
  3. 在命令提示字元中,重新命名 INST1 的資料庫檔案。下列範例命令顯示如何執行這項操作:
    rename Test_RO_FG.mdf original_Test_RO_FG.mdf
    rename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndf
    rename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndf
    rename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf
  4. 在 SQL Server Management Studio,建立具有相同名稱和實體結構與您想要附加的資料庫的資料庫。下列程式碼範例示範如何執行這項操作:
    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
    FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), 
    FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
    LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
    GO
  5. 將資料庫設為離線狀態。若要這樣做,請執行下列命令:
    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINE
    GO
  6. 在命令提示字元中,重新命名新的資料庫中的檔案。下列範例命令顯示如何執行這項操作:
    rename Test_RO_FG.mdf new_Test_RO_FG.mdf
    rename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndf
    rename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndf
    rename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf
  7. 在命令提示字元中,重新命名資料庫,並且在步驟 2 中的檔案。重新命名,使其符合您在步驟 4 中所建立的資料庫檔案。下列範例命令顯示如何執行這項操作:
    rename original_Test_RO_FG.mdf Test_RO_FG.mdf 
    rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf 
    rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf 
    rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf
  8. 將資料庫設成緊急模式,並執行修復。若要這樣做,請執行下列命令。

    附註在此步驟中,會重建資料庫交易記錄檔。這可能會導致資料遺失。因此,我們建議您執行此步驟之前,先備份資料庫。
    ALTER DATABASE Test_RO_FG_DB SET EMERGENCY
    GO
    ALTER DATABASE Test_RO_FG_DB SET SINGLE_USER
    GO
    DBCC CHECKDB (Test_RO_FG_DB, repair_allow_data_loss) WITH ALL_ERRORMSGS
    GO
    ALTER DATABASE Test_RO_FG_DB SET MULTI_USER
    GO
  9. 請檢查資料庫在線上,然後重新建立 Service Broker 功能。
  10. 刪除不需要的資料庫檔案。下列範例命令顯示如何執行這項操作:
    del /P new_Test_RO_FG.mdf
    del /P new_Test_RO_FG_File1.ndf
    del /P new_Test_RW_FG_File1.ndf
    del /P new_Test_RO_FG_log.ldf

其他相關資訊

有的資料庫附加到 SQL Server 的執行個體時,會發生幾個步驟。這些步驟包括將資料庫復原到及從較早版本的 SQL Server 升級這些檔案。

在 「 徵狀 〉 一節所述的問題,SQL Server 2012年開始升級程序之前偵測到資料庫中的唯讀檔案。升級的步驟包括啟動交易,以取消選取"完整關機 」 中的位元 [開機] 頁面的資料庫。較早版本的 SQL Server 無法讀取的 begin 異動記錄。因此,資料庫便無法使用舊版的 SQL Server,SQL Server 會產生 3624 錯誤。

在就地升級的資料庫時標示為唯讀

當您執行就地升級的 SQL Server,其中包含名為 Test_RO_DB 到 SQL Server 2012年唯讀資料庫執行個體時,您可能會收到類似下列的 SQL Server 錯誤記錄檔中的錯誤訊息:

2012-05-04 21:03:59.23 spid19s 'Test_RO_DB' 資料庫正在啟動。
2012-05-04 21:03:59.56 spid19s 轉換資料庫 'Test_RO_DB' 從版本 661 至目前的版本 706。
2012-05-04 21:03:59.56 spid19s 的錯誤: 928,高的嚴重性等級: 20 日的狀態: 1。
升級期間 2012年-05-04 21:03:59.56 spid19s,資料庫會引發例外狀況 3415、 嚴重性 16,狀態 1,位址 000007FEE66D784A。使用例外狀況的編號,以判斷原因。
2012-05-04 21:03:59.61 spid19s 的錯誤: 3415,高的嚴重性等級: 16,狀態: 1。
2012-05-04 21:03:59.61 spid19s 無法升級資料庫 'Test_RO_DB',因為它是唯讀的有唯讀檔案,或是使用者沒有修改的檔案部份的權限。請將資料庫或檔案的可寫入,然後重新執行復原。


在升級程序的最後,Test_RO_DB 資料庫將處於 RECOVERY_PENDING 狀態。若要將資料庫設成 READ_WRITE,您必須使用ALTER DATABASE命令。若要將資料庫設成 READ_ONLY,然後使用ALTER DATABASE命令。如此一來將資料庫升級成正確的版本,SQL Server 的引擎。

在就地升級時讀取/寫入資料庫包含標示為唯讀檔案群組

當您執行就地升級至 SQL Server 2012年時,您可能會收到類似下的面的 SQL Server 錯誤記錄檔中的訊息。SQL Server 的較舊的執行個體裝載的讀取/寫入資料庫,並包含標示 READ_ONLY 的檔案群組時,就會發生這個問題。不過,升級程序完成,如預期般運作,而且在資料庫啟動線上。

附註在下列的錯誤訊息,資料庫會命名為 Test_RO_FG:

2012-05-04 21:03:59.23 spid18s 'Test_RO_FG' 資料庫正在啟動。
2012-05-04 21:03:59.71 spid18s 轉換資料庫 'Test_RO_FG' 從版本 661 至目前的版本 706。
2012-05-04 21:03:59.71 spid18s 資料庫 'Test_RO_FG' 668 版本從版本 661 執行升級的步驟。



屬性

文章編號: 2710782 - 上次校閱: 2012年6月18日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2012 Enterprise
關鍵字:?
kbsurveynew kbprb kbtshoot kbmt KB2710782 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:2710782
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com