顯示具有 SQL Server 2000 標籤的文章。 顯示所有文章
顯示具有 SQL Server 2000 標籤的文章。 顯示所有文章

2012年4月25日

看懂 Microsoft SQL Server 的版本編號

Microsoft SQL Server 2012 在美西時間 2012 年 3 月 6 日 RTM 了,該版本有不少改變,比方說:
  1. 首見於 SQL Server 2008 R2 的 Datacenter Edition,猶如曇花一現,轉眼即逝。卻又多了 Business Intelligence Edition 可供建置與部署 BI 方案。
  2. 從高階 (Enterprise Edition) 到低階 (Express Edition) 版本的 SQL Server 2012,皆可安裝在 Windows Server 2008 R2 Server Core SP1 上。
  3. 可在不同子網路的叢集節點,設定 SQL Server 容錯移轉叢集。
  4. 從 SQL Server 2012 開始,不再支援 Itanium 的 CPU(也就是所謂的 IA-64),這個微軟在 Windows Server 2008 R2 發行之初,就說過了:Windows Server 2008 R2 是最後一個支援 IA-64 的 Windows Server,同樣的,SQL Server 2008 R2 與 Visual Studio 2010 也是最後一個支援IA-64 的版本
SQL Server 2012 logo
Microsoft SQL Server 的版本編號格式如下:

MM.nn.bbbb.rr
其代號的意義說明如後:
代號 說明
mm 主要版本
(Major Version)
nn 次要版本
(Minor Version)
bbbb 組建編號
(Build Number)
rr 組建改版編號
(Build Revision Number)
每當 SQL Server 發行時,主要或次要版本皆會遞增,以便與早期版本有所區別。其目的為:
  1. 在使用者介面(例如,SSMS 管理工具裡,「說明」功能表中的「關於」)顯示版本資訊。
  2. 於版本更新或套用 Service Pack 時,控管哪些檔案應該要被置換掉。

2011年7月10日

「我回不去了」之 Microsoft SQL Server 資料庫版本問題

台視於 2010 年 11 月播出的《犀利人妻》(英文劇名為:The Fierce Wife、日文劇名為:結婚って、幸せですか)偶像劇,在完結篇那集,有一句經典台詞:「我回不去了」,引發不少迴響。

八卦一下,該劇在 2011 年 6 月 9 日起,每週四晚上 11:00 ~ 11:54 也在 BS 日本電視台播放,我們也有偶像劇可以進軍日本。

圖片來源:BS 日本電視台:結婚って、幸せですか

在 0 與 1 的資訊界中,Microsoft SQL Server 也有「我回不去了」的情況發生。這是怎麼一回事呢?

當您把較新版本 SQL Server 上的資料庫附加或還原到較舊版的 SQL Server 時,就會發生「我回不去了」的事情。

Microsoft SQL Server 有版本Edition:通常是指產品的分類,例如:標準版、企業版;Version:產品的版號,例如:2005、2008)、Service Packs相容性層級、與內部的資料庫版本,相信很多人都知道前面幾種,卻可能不知道還有相容性層級以及內部資料庫版本這 2 個與版本相關的名詞。

以下就分別介紹相容性層級以及內部資料庫版本。

相容性層級

當新版 SQL Server 發行時,除了新增功能之外,也可能會改變一些行為(例如:從 SQL Server 7.0 開始,在執行 ALTER TABLE 的同時,可以使用 ALTER COLUMN 子句來改變欄位的設定)。為了不讓原本於舊版 SQL Server 可使用的程式,於升級 SQL Server 之後,發生不能執行或是執行的結果與舊版 SQL Server 不同,遂有相容性層級這樣的設定。

在 SQL Server 2000 的 Enterprise Manager 管理工具可以查看並設定相容性層級,如下所示的相容性層級設定為 80
在 Enterprise Manager 查看相容性層級

在 SQL Server 2005 / 2008 / 2008 R2 的 Management Studio 管理工具可以查看並設定相容性層級,如下所示的相容性層級設定為 90
在 Enterprise Manager 查看相容性層級

使用下面的 T-SQL 可查詢相容性層級:
USE master;
go
SELECT name 資料庫名稱, cmptlevel 相容性層級 FROM sysdatabases;
查詢相容性層級

使用預存程序也行:
EXEC sp_helpdb;

SQL Server 2005 開始提供「資料庫和檔案目錄檢視」的新功能,所以亦可在 SQL Server 2005 之後的版本,使用如下的 T-SQL 指令來查詢相容性層級:
-- SQL 2005 以上的版本,可由檢視表(View)查詢
SELECT name 資料庫名稱, compatibility_level 相容性層級 FROM sys.databases;

相容性層級與資料庫版本的對應關係如下所示:
資料庫版本 相容性層級
SQL Server 6.060
SQL Server 6.565
SQL Server 7.070
SQL Server 200080
SQL Server 200590
SQL Server 2008100

由上面的查詢結果或設定畫面,可以看出相容性層級是針對單一資料庫,而非整個執行個體。

欲調整相容性層級,除了使用 GUI 介面的 Enterprise Manager、Management Studio 管理工具之外,也可透過 T-SQL 指令。唯在執行時,需特別注意,避免在使用者仍連線到資料庫時,變更相容性層級,此舉可能會讓使用中的查詢,產生不正確的結果。因此建議依照下列步驟變更相容性層級:
  1. 將資料庫設定為單一使用者存取模式。
  2. 變更資料庫的相容性層級。
  3. 將資料庫設定成多使用者存取模式。
上述步驟用 T-SQL 指令來表達即為:
EXEC sp_dboption '<資料庫名稱>', 'single user', 'true';
go

EXEC sp_dbcmptlevel '<資料庫名稱>', '<相容性層級>';
go

EXEC sp_dboption '<資料庫名稱>', 'single user', 'false';
go
如果是 SQL Server 2005 以上的版本,可以改用新的 T-SQL 語法:
-- SQL Server 2000 亦可用此指令
ALTER DATABASE <資料庫名稱> SET SINGLE_USER;
go

ALTER DATABASE <資料庫名稱> SET COMPATIBILITY_LEVEL = <相容性層級>;
go 

-- SQL Server 2000 亦可用此指令
ALTER DATABASE <資料庫名稱> SET MULTI_USER;
go

於建立新資料庫時,SQL Server 如何去決定相容性層級的版本呢?當 SQL Server 收到 CREATE DATABASE 陳述式時,會複製 model 資料庫的內容,來建立資料庫的第一個部份,剩餘的部份則填入空白頁。

在預設狀態下,系統資料庫 model 的相容性層級會跟前面所列的那張表一樣,除非有去調整系統資料庫 model 的相容性層級,這麼一來,爾後建立的所有資料庫自然都會繼承相容性層級的變更。

內部資料庫版本

當我們使用附加或是還原的方式,將舊版 SQL Server 的資料庫附加或還原到新版 SQL Server 時,SQL Server 會自動升級內部資料庫版本。一般來說,版本升級的過程是看不到的,藉由特定的方式,即可看到此升級過程。

如下所示,即為附加 SQL Server 2000 所建立的 NorthWind 資料庫時,升級過程中,所顯示的訊息:
將資料庫 'NorthWind' 從版本 539 轉換為目前版本 661。
資料庫 'NorthWind' 正在執行從版本 539 升級到版本 551 的步驟。
資料庫 'NorthWind' 正在執行從版本 551 升級到版本 552 的步驟。
資料庫 'NorthWind' 正在執行從版本 552 升級到版本 611 的步驟。
...
...
資料庫 'NorthWind' 正在執行從版本 660 升級到版本 661 的步驟。

▼ 資料庫 NorthWind 從版本 539 升級到 661
資料庫 NorthWind 從版本 539 升級到 661

下面的訊息是將 SQL Server 2000 所備份出來的 Pubs 資料庫,在 SQL Server 2008 R2 還原時,所顯示的升級訊息:
已處理資料庫 'Pubs' 的 208 頁,檔案 1 上的檔案 'pubs'。
已處理資料庫 'Pubs' 的 1 頁,檔案 1 上的檔案 'pubs_log'。
將資料庫 'Pubs' 從版本 539 轉換為目前版本 661。
資料庫 'Pubs' 正在執行從版本 539 升級到版本 551 的步驟。
資料庫 'Pubs' 正在執行從版本 551 升級到版本 552 的步驟。
資料庫 'Pubs' 正在執行從版本 552 升級到版本 611 的步驟。
...
...
資料庫 'Pubs' 正在執行從版本 660 升級到版本 661 的步驟。
RESTORE DATABASE 已於 0.361 秒內成功處理了 209 頁 (4.506 MB/sec)。

▼ 資料庫 Pubs 從版本 539 升級到 661


使用下面的 T-SQL 可以知道資料庫現在的內部版本為何:
--查詢資料庫的內部版本
USE <資料庫名稱>;
go

SELECT DATABASEPROPERTY('<資料庫名稱>', 'Version') 資料庫內部版本;

-- 適用 SQL Server 2005 以上的版本
SELECT DATABASEPROPERTYEX('<資料庫名稱>', 'Version') 資料庫內部版本
如果要知道當初建立資料庫的內部版本,請使用下面的 T-SQL:
USE <資料庫名稱>;
go

DBCC TRACEON (3604);  
DBCC DBINFO;
DBCC TRACEOFF (3604);
— 或  —
DBCC TRACEON (3604);
DBCC PAGE ('<資料庫名稱>', 1 ,9 ,3);
DBCC TRACEOFF (3604);

執行的部分結果如下:
DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請連絡您的系統管理員。

...
...

DBINFO @0x000000000BAAA060

dbi_dbid = 6                         dbi_status = 29                      dbi_nextid = 1221579390
dbi_dbname = NorthWind               dbi_maxDbTimestamp = 1100            dbi_version = 661
dbi_createVersion = 539              dbi_ESVersion = 0                    
dbi_nextseqnum = 1900-01-01 00:00:00.000                                  dbi_crdate = 2004-12-13 16:11:08.590
dbi_filegeneration = 0               
dbi_checkptLSN

...
...

DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請連絡您的系統管理員。
DBCC 的執行已經完成。如果 DBCC 印出錯誤訊息,請連絡您的系統管理員。


內部資料庫版本與資料庫版本的對應關係如下所示:
資料庫版本 內部資料庫版本
SQL Server 7.0515
SQL Server 2000539
SQL Server 2005611/612
SQL Server 2008655
SQL Server 2008 R2661

2011年1月29日

關於 SQL Server 2000 的定序問題

SQL Server 2000 SP4 的主流支援服務已經在 2008 年 4 月 8 日結束,但依舊還是有人在使用,如果可以,應該是要升級到尚提供支援服務的版本,例如:SQL Server 2008。日前就被人家問到了,關於 SQL Server 2000 定序的相關問題,特將其整理如後。

查詢特定資料庫的定序

使用如下的 T-SQL 語法:
SELECT DATABASEPROPERITYEX('<資料庫名稱>', 'Collation')

指定定序的方式

指定定序的方式有 3 種,第 1 種是在安裝 SQL Server 2000 時,就加以指定,這是所謂的伺服器層級的定序。若習慣使用預設的安裝方式,則肯定是看不到定序的設定選項。

另外 2 種則是在建立資料庫或資料表時,才加以指定,這種是資料庫層級的定序與資料表層級定序。

  1. 伺服器層級的定序
    於安裝 SQL Server 時,選擇「進階選項」(Advanced options)進行安裝,才能出現指定定序的對話視窗
    進階選項
    選擇定序
  2. 資料庫層級定序
    於建立資料庫時,指定所要的定序
    指定定序
  3. 資料表層級定序
    於建立資料表時,指定所要的定序
    指定定序

修改定序

  • 重設伺服器定序,可用 rebuildm.exe。當 master 系統資料庫毀損時,也可用這個工具進行修正。
  • 於建立資料庫或資料表後,修改資料庫或資料表的定序:
    -- 修改資料庫定序為 Chinese_PRC_CI_AS
    ALTER DATABASE AlexChuo SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    ALTER DATABASE AlexChuo COLLATE Chinese_PRC_CI_AS;
    ALTER DATABASE AlexChuo SET MULTI_USER;
    
    -- 修改資料表定序為 Chinese_PRC_CI_AS
    ALTER TABLE Mytable ALTER COLUMN 姓名 nvchar(10) COLLATE Chinese_PRC_CS_AI;

    要注意的是,修改資料庫的定序設定,並不會變更該資料庫內既有物件的定序設定。
  • 修改欄位定序比較簡單,只要使用如下的 T-SQL:
    ALTER TABLE <資料表名稱> ALTER COLUMN <欄位名稱> <欄位類型與長度> COLLATE <定序>;

    例如:
    ALTER TABLE 員工 ALTER COLUMN 姓名 nvchar(10) COLLATE Chinese_PRC_CS_AI;

2010年9月5日

Microsoft SQL Server 版本對應

根據微軟知識庫中的「如何識別 SQL Server 的版本」一文,可以查得目前的 Microsoft SQL Server 版本號碼以及相對應的產品或 Service Pack 等級,雖然該文有說明要如何識別使用的 SQL Server 特定版本,卻沒說明要如何才能取得特定版本。

所謂的特定版本是指修正程式(Hotfix)、積存更新(Cumulative Update)等。網路上有人已經整理了相關的資訊:
  1. SQL Server Version
  2. SQL Server Version Builds(已失效 @ 2011/10/18 更新)
  3. Microsoft SQL Server 2012, 2008R2, 2008, 2005, 2000 and 7.0 Builds
  4. SQL Server Version Database ‎SQL Server Builds‎(@ 2012/4/15 更新)

以最後一個網頁整理的較為詳細,因為有些積存更新必須是您已經遇到了相同的問題,才能向微軟產品支援服務部門(Product Support Services,PSS)提出申請,然後下載安裝。也就是網頁中,PSS  Only 欄位所代表的意思。值得一提的是,我們可以在表頭上的 Patch Level、PSS Only、Link、Build、Version 欄位上,按一下滑鼠左鍵,即會以該欄位進行排序。

2010年1月2日

SQL Server 2008 SSMS / SSMSE 可以連線到哪些版本的 SQL Server 執行個體?

先從底層架構說起吧!

SQL Server 2008 的 SSMS(SQL Server Management Studio)/SSMSE(SQL Server Management Studio Express) 是使用 .NET Framework Data Provider for SQL Server(簡稱 .NET Framework SqlClient)實作出來的產品,它會使用自己的通訊協定來與 SQL Server 進行通訊。由於它是輕量型的提供者,且效能很好,可以最佳化的方式直接存取 SQL Server,而不需再透過 OLE DB 或「開放式資料庫連接」(Open Database Connectivity,ODBC) 層。

圖片來源:.NET Framework 開發人員手冊

上圖是將 .NET Framework Data Provider for SQL Server 和 .NET Framework Data Provider for OLE DB 進行比較。由上圖可以看出左側的 .NET Framework Data Provider for SQL Server 則可對 Microsoft SQL Server 7.0(含)以後版本的資料進行存取。.NET Framework Data Provider for SQL Server  類別位於 System.Data.SqlClient 命名空間中。

至於圖中右邊的  .NET Framework Data Provider for OLE DB 需要透過下列兩個元件與 OLE DB 資料來源進行通訊:一為 OLE DB Service 元件(提供連接共用和交易服務),二為 OLE DB 提供者(提供資料來源)。如果要存取 SQL Server 6.5 及更早的版本,則必須使用 OLE DB provider for SQL Server 搭配 .NET Framework Data Provider for OLE DB。

所以現在大家應該知道 SQL Server 2008 SSMS/SSMSE  可以連線到哪些版本的 SQL Server 進行管理了吧!如果還是不知道?那就請看仔細嘍!

SQL Server 2008 SSMS/SSMSE  可以連線到 2008/2005/2000/7.0 版的 SQL Server。俗話說,有圖有真相,就請看下圖吧。

要提醒大家的是,使用 SQL Server 2008 SSMS/SSMSE 連線到非 2008 版的 SQL Server 就無法享用 IntelliSense 的功能。至於其他可能無法使用 IntelliSense 功能的情況,請參考官方文件:「當 IntelliSense 無法使用時 」。

2009年9月4日

如何查詢本機電腦已安裝哪些版本的 SQL Server 與功能

SQL Server 2008 安裝程式提供一個簡易的操作,讓我們得以快速地查詢出本機電腦所安裝的 SQL Server 是那個版本,還可以查出安裝了該版本的哪些功能。

執行步驟如下:

  1. 執行 SQL Server 2008 安裝程式。
  2. 依序按下「工具/已安裝的 SQL Server 功能探索報告」

該工具查詢的結果會儲存在 %ProgramFiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\ <日期>_<時間>\SqlDiscoveryReport.htm,同時將其顯示在瀏覽器中。

附註:
  1. 這個工具只能查出 SQL Server 是 2000、2005、或 2008。
  2. 如果有安裝 SQL Server 2008,可以從 Version 欄位判斷出所安裝的 Service Pack 版本為何。以上圖中的結果為例,10.1.2531.0 表示所安裝的 Service Pack 為 1
    至於 SQL Server 2000、2005 則不適用此方法,請參考:如何得知目前SQL Serer 2005的Service Pack是那個版本?

2009年1月9日

SQL Server GUI 管理介面指令的演變

從 Microsoft SQL Server 問世,到現在已經有好幾代的產品了,隨著版本的更迭,SQL Server GUI 管理介面指令也隨之演變,就讓我們回顧從前到現在的管理介面指令的不同吧!
版本指令圖說
SQL 2000isqlw開啟 Query Analyzer
2005sqlwb開啟 SSMS(SQL Server Management Studio)
2005 Express 版 ssmsee 開啟 SSMSEE(SQL Server Management Studio Express Edition)
2008 ssms 開啟 SSMS

2008年6月1日

在 Windows Server 2003 執行 SQLXML,出現「HTTP 錯誤 404 - 找不到檔案或目錄」錯誤訊息

在 Windows Server 2003 安裝 SQL Server 2000 與 SQLXML,依照範例的說明,將相關設定檔設定好之後,於使用時會顯示「HTTP 錯誤 404 - 找不到檔案或目錄」的錯誤訊息。

2005年10月15日

為什麼無法在 Windows XP 上安裝 SQL 2000 企業版

因為 SQL 2000 企業版無法在 Windows XP 上安裝,因此不論是 Windows XP Professional 或 Home Edition 僅可以安裝下列的版本:
  1. SQL Server 2000 企業評估版
  2. SQL Server 2000 程式開發版
  3. SQL Server 2000 Personal Edition
  4. SQL Server 2000 Desktop Engine (亦即 MSDE 2000)

2004年11月12日

使用 SQL Enterprise Manager 連線 SQL Server 發生連線逾時

在個人電腦上使用 SQL Quwery Analyzer 連線 SQL Server,可以正常地連線,但是使用 SQL Enterprise Manager 連線 SQL Server 時,卻發生連線逾時的錯誤。
發生這個問題的原因可是因為網路設定的問題,因此只要調整 SQL Enterprise Manager 預設的連線逾時時間即可,步驟如下:
  1. 點選 SQL Enterprise Manage 功能表上的 [工具]
  2. [選項]->[進階]->[登入等待時間截止(秒)]->將預設的 4 秒時間加長