none
資料庫升級後無法更改資料庫的相容性層級 RRS feed

  • 問題

  •  

    Dear All,

     

    我透過安裝SQL 2005的方式將SQL 2000升級成SQL 2005,升級作業一切順利並且完成,但是看到很多文章提到說要把資料庫的相容性層級調整為90,我透過下列兩種方式都無法修改成功,請問有何方式可以修改,再者,如果沒有將相容性層級調整為90又會有何影響呢?

     

    以下是我試過但是無法成功的方式

    1'SSMS
    DB右鍵屬性→選項→相容性層級(只能選到80,無法選到90)
    2'T-SQL
    --查詢db的相容性層級
    exec sp_dbcmptlevel 'abcd'
    --修改層級
    EXEC SP_DBCMPTLEVEL 'abcd',90(會出現下列錯誤)
     
    Msg 15416, Level 16, State 1, Procedure sp_dbcmptlevel, Line 92
    使用方式: sp_dbcmptlevel [dbname [, compatibilitylevel]]
     
    資料庫相容層級的有效值為: 60,65,70或80
     
    ----------------------------------------------------------------------------------------------------------
     
    Regards,
    Jordan
    2007年10月25日 上午 08:11

解答

  • 如果不變更相容性層級到 90,那麼 SQL Server 2005 所提供的新功能自然就不能使用,比方說,使用 80 時,超出 8000 的字元字串常數和 varbinary 常數會當做 text、ntext 或 image 來處理;而使用 90 時,超出 8000 的字元字串常數和 varbinary 常數會當做 varchar(max) 類型(或是 nvarchar(max) 、 varbinary(max))來處理。這樣的好處是可以直接利用 SELECT … INTO 來建立的資料表,並使用到 SQL Server 2005 所新增之資料類型。

     

    變更相容性層級的語法大致如下:

    變更相容性層級的語法

    -- 使用 master 系統資料庫
    USE master;
    GO


    -- 單一使用者存取模式
    ALTER DATABASE 我的資料庫名稱
    SET SINGLE_USER
    GO


    -- 變更資料庫的相容性層級
    EXEC sp_dbcmptlevel 我的資料庫名稱, 90;
    GO


    -- 多使用者存取模式
    ALTER DATABASE 我的資料庫名稱
    SET MULTI_USER;
    GO

     

    2007年10月26日 上午 03:24
    版主
  • 我是從你所給的資訊(select @@version)來判斷問題的。

     

    SQL Server 2000 Enterprise Edition 只能升級到相對應的版本(亦即 SQL Server 2005 Enterprise Edition),不能升級之後,卻降低版本等級。

     

    2007年10月26日 上午 11:57
    版主

所有回覆

  • 如果不變更相容性層級到 90,那麼 SQL Server 2005 所提供的新功能自然就不能使用,比方說,使用 80 時,超出 8000 的字元字串常數和 varbinary 常數會當做 text、ntext 或 image 來處理;而使用 90 時,超出 8000 的字元字串常數和 varbinary 常數會當做 varchar(max) 類型(或是 nvarchar(max) 、 varbinary(max))來處理。這樣的好處是可以直接利用 SELECT … INTO 來建立的資料表,並使用到 SQL Server 2005 所新增之資料類型。

     

    變更相容性層級的語法大致如下:

    變更相容性層級的語法

    -- 使用 master 系統資料庫
    USE master;
    GO


    -- 單一使用者存取模式
    ALTER DATABASE 我的資料庫名稱
    SET SINGLE_USER
    GO


    -- 變更資料庫的相容性層級
    EXEC sp_dbcmptlevel 我的資料庫名稱, 90;
    GO


    -- 多使用者存取模式
    ALTER DATABASE 我的資料庫名稱
    SET MULTI_USER;
    GO

     

    2007年10月26日 上午 03:24
    版主
  • Dear Alex,

     

    謝謝您這麼快的回覆,但是我按照您的步驟

     

    -- 使用 master 系統資料庫
    USE master;
    GO


    -- 單一使用者存取模式
    ALTER DATABASE test
    SET SINGLE_USER
    GO


    -- 變更資料庫的相容性層級
    EXEC sp_dbcmptlevel test, 90;
    GO

     

    還是一樣會出現

    Msg 15416, Level 16, State 1, Procedure sp_dbcmptlevel, Line 92
    使用方式: sp_dbcmptlevel [dbname [, compatibilitylevel]]
     
    資料庫相容層級的有效值為: 60,65,70或80

     

    ############################################

    由於我是將SQL 2000透過安裝SQL 2005的方式直接升級,可是升級完成之後SQL 2005不會自己將相容性層級改為90嗎?還是一定都得自己手動去更改,亦或者是我再升級的過程當中有遺漏什麼?

     

    Regards,

    Jordan

    2007年10月26日 上午 06:35
  •  快閃喬丹 寫信:
    由於我是將SQL 2000透過安裝SQL 2005的方式直接升級,可是升級完成之後SQL 2005不會自己將相容性層級改為90嗎?還是一定都得自己手動去更改,亦或者是我再升級的過程當中有遺漏什麼?

    這是必然的,因為當資料庫從舊版 SQL Server 升級到 SQL Server 2005 時,資料庫就會保留其原本的相容性層級。

     

    所以如果要變更資料庫的相容性層級,就必須要手動調整。

     

    煩請執行下面這個陳述式,然後貼上其結果;

    程式碼區塊

    SELECT @@VERSION;

     

    2007年10月26日 上午 07:34
    版主
  •  

    Hi Alex,

     

    下列是查詢結果

     

    Microsoft SQL Server  2000 - 8.00.194 (Intel X86)   Aug  6 2000 00:57:48   Copyright (c) 1988-2000 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)

    2007年10月26日 上午 09:19
  •  快閃喬丹 寫信:
    Microsoft SQL Server  2000 - 8.00.194 (Intel X86)   Aug  6 2000 00:57:48   Copyright (c) 1988-2000 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
    你目前的資料庫版本是 8.0,當然無法調整成 90 的相容性層級!

     

    猜測你在升級成 SQL Server 2005 的時候,搞錯了所要升級的 SQL Server 執行個體(Instance),把其他的執行個體升級成 SQL Server 2005,要升級的卻沒升級到。

     

    再者,你的 SQL Server 2000 是 RTM 版,至少也得先安裝到 Service Pack 3 (SP3) 才能升級成 SQL Server 2005。

    2007年10月26日 上午 11:21
    版主
  • Dear Alex,

     

    謝謝您的回覆,先釐清一下目前我的環境

     

    SQL 2000 Enterprise Edition SP4

    Windows 2003 SP1

     

    目前我手邊的SQL 2005光碟片是standard 版的,我在想會不會是因為我的SQL 2000是Enterprise Edition 而升級的SQL 2005安裝光碟卻是standard 版本,導致我在升級安裝時無法將SQL  Server Database Service(S)8.00.2039的check box打勾(之前安裝時看到的狀態都是disable的),所以才導致最後的升級作業不完全,也因此相容性層級才無法更改.

     

    但是我查過books on line確有看到SQL 2000 Enterprise Edition 可以升級成 SQL 2005的Enterprise Edition ,standard 而上網查到的卻好像只能SQL 2000 Enterprise Edition 升級 SQL 2005的Enterprise Edition??

     

    再次感謝您的回答,

    Regards,

    Jordan

     

    2007年10月26日 上午 11:52
  • 我是從你所給的資訊(select @@version)來判斷問題的。

     

    SQL Server 2000 Enterprise Edition 只能升級到相對應的版本(亦即 SQL Server 2005 Enterprise Edition),不能升級之後,卻降低版本等級。

     

    2007年10月26日 上午 11:57
    版主
  •  

    Hi Alex,

     

    再另外拿取 SQL Server 2005 Enterprise Edition的光碟片重新試驗一次之後,之前的問題已經解決,再次謝謝您的勞心,謝謝。

    2007年10月29日 下午 02:46
  • 恭喜您!順利地更改資料庫相容性層級

    2007年10月29日 下午 03:01
    版主