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

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 時,控管哪些檔案應該要被置換掉。

2012年3月13日

SQL Server 2012 範例資料庫已發行

SQL Server 早期的版本(例如:SQL Server 2000),以預設模式安裝時,會順便安裝範例資料庫:北風貿易與出版社(其資料庫名稱分別為 NorthwindPubs)。

▼ NorthWind 資料庫圖表
點擊可看原圖:NorthWind 資料庫圖表

但是在 SQL Server 2005 正式發行之前,微軟開發團隊思考幾個問題:

  1. 您會安裝 SQL Server 範例程式或資料庫嗎?
  2. 您從何處安裝?從光碟中?微軟網站?
  3. 如果是從光碟中安裝,您會知道網站已經更新的版本嗎?

因此從 SQL Server 2005 開始,在安裝過程中,就不再自動安裝範例資料庫。我們可以從光碟片執行安裝程式,以便安裝範例資料庫(與自行車產品有關的 Adventure Works 資料庫)和程式碼,或是從 CodePlex 網站下載最新的範例資料庫範例程式

隨著 SQL Server 2012 正式問世,該版專用的 Adventure Works 範例資料庫與程式也隨之發行,下載網址:
Adventure Works for SQL Server 2012

安裝說明:
SQL Server Samples Readme

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年5月15日

使用 Microsoft SQL Server Management Studio 附加資料庫發生「作業系統錯誤 5: "5(存取被拒。)"」的訊息

在 Windows Vista 之後的作業系統中,使用 Microsoft SQL Server Management Studio 附加資料庫時,會出現如下的錯誤訊息:

標題: Microsoft SQL Server Management Studio 
------------------------------

在附加資料庫時發生錯誤。請在 [訊息] 資料行中按一下超連結,以取得詳細資料。

------------------------------ 
按鈕:

確定 
------------------------------ 

▼ 附加資料庫時發生錯誤
附加資料庫時發生錯誤

於按下上圖中的「確定」按鈕之後,會回到「附加資料庫」對話視窗中,此時可看到「狀態」欄位顯示錯誤,「訊息」欄位出現超連結。
「附加資料庫」對話視窗出現錯誤提示

按下「訊息」欄位中的超連結,會顯示如下的錯誤訊息:

標題: Microsoft SQL Server Management Studio 
------------------------------

伺服器 'ALEX-PC\SQLExpress' 的 附加資料庫 失敗。  (Microsoft.SqlServer.Smo)

如需說明,請按一下: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.1750.9+((dac_inplace_upgrade).101209-1051+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=附加資料庫+Server&LinkId=20476

------------------------------ 
其他資訊:

執行 Transact-SQL 陳述式或批次時發生例外狀況。 (Microsoft.SqlServer.ConnectionInfo)

------------------------------

無法開啟實體檔案 "D:\DataBase\北風貿易.mdf"。作業系統錯誤 5: "5(存取被拒。)"。 (Microsoft SQL Server, 錯誤: 5120)

如需說明,請按一下: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.1600&EvtSrc=MSSQLServer&EvtID=5120&LinkId=20476

------------------------------ 
按鈕:

確定 
------------------------------ 

▼ 附加資料庫失敗的詳細錯誤訊息
附加資料庫失敗的詳細錯誤訊息

通常只要先關閉 SQL Server Management Studio,然後「以系統管理員身分執行」 SQL Server Management Studio,接著再附加資料庫即可解決此問題。

「以系統管理員身分執行」 SQL Server Management Studio
「以系統管理員身分執行」 SQL Server Management Studio

2011年1月17日

於安裝 SQL Server 2005/2008 或套用 Service Pack 時,遇到檢查「重新啟動電腦」規則失敗

於安裝 SQL Server 2005/2008 或套用 Service Pack 時,會檢查相關的規則,遇到檢查「重新啟動電腦」規則失敗的訊息:

即便重新開機,再次執行 SQL Server 安裝程式或套用 Service Pack,同樣的訊息依舊存在。

之所以會發生此種問題,是因為以前執行過其他軟體的安裝程式,而該軟體建立了擱置檔案作業,因此在執行或套用 SQL Server 安裝程式與 Service Pack 之前,必須重新啟動電腦才行。

如果重新啟動電腦之後,嘗試再安裝一次,還是出現同樣的錯誤訊息,就表示我們要手動刪除擱置檔案作業:

  1. 關閉安裝程式。
  2. 找出以下機碼:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
  3. 在右側窗格中的 PendingFileRenameOperations 上,連按兩下滑鼠左鍵,選取所有的內容,將其刪除。
  4. 再執行安裝程式。

2010年9月18日

SQL Server 2008 Expess 版開始提供 SQL Server Agent 服務?

從 SQL Server 2005 開始,微軟將原本免費提供的 MSDE(有多種說法:Microsoft SQL Server Desktop Engine、Microsoft Data Engine 或 Microsoft Desktop Engine)產品改成 Express 版,由其名稱可猜出,功能上一定會比要錢購買的 SQL Server 缺少某些功能。

比方說,在 SQL Server 中,用來執行排程的管理工作(在 SQL Server 裡稱為「作業」),需要透過 SQL Server Agent 這個服務,以便儲存在  SQL Server msdb 系統資料庫中的作業資訊可依照排程、為了回應特定事件或視需要來執行作業,並記錄事件相關訊息,然後於完成或失敗時通知您。

在預設狀態下,於完成安裝 SQL Server 2005 或更新版本之後,會停用 SQL Server Agent 服務,所以如果您需要使用到排程,請記得選擇要自動啟動該服務。

於裝有 SQL Server 2008 Express 或 SQL Server 2008 R2 Express  的電腦,開啟「SQL Server 組態管理員」(SQL Server Configuration Manager)時,會看到「SQL Server 服務」中,有個狀態已停止啟動模式其他(開機、系統、已停用或未知)SQL Server Agent (SQLEXPRESS)   服務。

SQL Server 組態管理員中的 SQL Server Agent (SQLEXPRESS)  服務

當您手賤嘗試把 SQL Server Agent (SQLEXPRESS)   服務的啟動模式由原本的「已停用」改成「手動」「自動」時,會出現如下的錯誤訊息視窗:

▼ 在 Windows XP 修改 SQL Server 2008 Express 的 SQL Server Agent (SQLEXPRESS) 服務啟動模式,所出現的錯誤訊息
中文:
不支援這個要求。 [0x80070032]
英文:
The request is not supported. [0x80070032]

修改 SQL Server 2008 Express 的 SQL Server Agent (SQLEXPRESS) 服務啟動模式,所出現的錯誤訊息

▼ 在 Windows 7 修改 SQL Server 2008 R2 Express 的 SQL Server Agent (SQLEXPRESS)  服務啟動模式,所出現的錯誤訊息
中文:
遠端程序呼叫失敗。 [0x800706be]
英文:
The remote procedure call failed. [0x800706be]

修改 SQL Server 2008 R2 Express 的 SQL Server Agent (SQLEXPRESS)  服務啟動模式,所出現的錯誤訊息

既然從「SQL Server 組態管理員」無法修改啟動模式,那就改用 Windows 的「服務」來調整啟動模式。接著當然就是啟動該服務,結果如下:

▼ 在 Windows XP 啟動 SQL Server 2008 Express 的 SQL Agent 服務
中文:
在 本機電腦 的SQL Server Agent (SQLEXPRESS) 服務已啟動又停止。有些服務如果無法執行操作的話會自動停止。例如 效能記錄及警示服務。
英文:
The SQL Server Agent (SQLEXPRESS) service on local machine started and then stopped. Some services stop automatically if they have no work to do, for example, the Performance Logs and Alerts service. 

▼ 在 Windows XP 啟動 SQL Server 2008 R2 Express 的 SQL Agent 服務
中文:
在 本機電腦 的 SQL Server Agent (SQLEXPRESS) 服務已啟動又停止。有些服務如果並未由其他服務或程式使用,會自動停止。
英文:
The SQL Server Agent (SQLEXPRESS) service on local machine started and then stopped. Some services stop automatically if they are not in use by other services or programs. 

根據 Connect 網站的錯誤回報 SQL Express RC0 installs SQL Agent Service for no apparent reason 一文指出,因為內部工程師溝通不良,所以才讓 SQL Server 2008 Express 發行時,連同 SQL Server Agent (SQLEXPRESS)  服務一起發行。

事實上,在 MSDN 文件庫「SQL Server Express 功能」的「SQL Server Express 中不支援的 SQL Server 功能」一節中,有提到:不支援 SQL Server Agent 和 SQL Server Agent 服務,所以才會發生上述的錯誤訊息。

▼ 在 SQL Server 2008 R2 Express 安裝目錄中,可以看到啟動 SQL Server Agent (SQLEXPRESS)   服務的程式:SQLAGENT.EXE
啟動 SQL Server Agent (SQLEXPRESS)   服務的程式:SQLAGENT.EXE

如果您真的有需要使用到 SQL Agent  進行排程作業,有下列幾種方式可用:

  1. 使用 Windows 作業系統內建的工作排程器,搭配 T-SQL 指令檔(.sql)跟批次檔。
  2. 於非 SQL Server Express 版本的 SQL Server 中,建立維護計劃,將「連接管理員」設定成連線到 SQL Server Express。
  3. 使用付費軟體:Express Agent
  4. 若您會寫程式,可參考:SQL Agent: A Job Scheduler Framework

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年8月31日

查詢 Microsoft SQL Server 資料庫最近一次的備份狀態

使用 SSMS(SQL Server Management Studio)展開「物件總管」視窗中的資料庫清單,於某個資料庫名稱上,按下滑鼠右鍵,選擇「屬性」(或「內容」)指令,然後在「一般」頁面即可看到資料庫最近一次的備份時間,如下圖所示:

使用 SSMS 得知資料庫最近一次的備份時間

對 DBA 來說,可能還想要知道資料庫的復原模式、備份的類型等資訊,此時透過 T-SQL 指令來查詢資料庫最近一次的備份狀態,應該是最好的作法。

msdb 資料庫會儲存 SQL Server Agent 用於排程警示、作業等相關資料,於其中有個與資料庫備份記錄有關的資料表,其名稱為 backupset。 而從 SQL Server 2005 開始,目錄檢視表(Catalog View)sys.databases 則儲存每個 SQL Server 執行個體中獨一的資料庫名稱,因此只要用資料庫名稱來串起這 2 個資料表的關聯便可得知資料庫最近一次的備份狀態。

T-SQL 程式碼:

SELECT D.name 資料庫名稱,
	復原模式 = CASE D.recovery_model_desc
		WHEN 'SIMPLE' THEN '簡單'
		WHEN 'FULL' THEN '完整'
		ELSE '大量記錄'
	END,
	ISNULL(CONVERT(varchar, BS.bdate, 120), '從未備份過') AS 最後備份日期,
	備份類型 = CASE BS.type
		WHEN 'D' THEN '資料庫'
		WHEN 'I' THEN '差異資料庫'
		WHEN 'L' THEN '記錄'
		WHEN 'F' THEN '檔案或檔案群組'
		WHEN 'G' THEN '差異檔案'
		WHEN 'P' THEN '部分'
		WHEN 'Q' THEN '差異部分'
		ELSE ''
	END
FROM sys.databases D LEFT JOIN  
( 
	SELECT database_name, MAX(backup_finish_date) bdate, type
	FROM msdb.dbo.backupset
	GROUP BY database_name, type
) BS ON D.name = BS.database_name 
ORDER BY 1;

執行結果:
查詢資料庫最近一次的備份狀態之結果

2010年7月24日

在 SQL Server 取得目前用戶端的 IP 位址

從 SQL Server 2005 開始提供所謂的「動態管理檢視表(Dynamic Management View)」,會傳回伺服器的狀態資訊,使用下面這道 T-SQL 即可檢視用戶端的 IP 位址:

SELECT net_transport 實體傳輸通訊協定,
	protocol_type 裝載的通訊協定類型,
	auth_scheme 驗證模式,
	local_net_address '目標伺服器的 IP 位址',
	local_tcp_port '目標伺服器 TCP 埠',
	client_net_address '用戶端的 IP 位址' 
FROM sys.dm_exec_connections
WHERE session_id = @@SPID

另外一種方式,則是使用 SQL Server 2008 R2 新的 CONNECTIONPROPERTY 函式取得目前用戶端的 IP 位址

SELECT CONNECTIONPROPERTY('net_transport') 實體傳輸通訊協定, 
	CONNECTIONPROPERTY('protocol_type') 裝載的通訊協定類型, 
	CONNECTIONPROPERTY('auth_scheme') 驗證模式, 
	CONNECTIONPROPERTY('local_net_address') '目標伺服器的 IP 位址', 
	CONNECTIONPROPERTY('local_tcp_port') '目標伺服器 TCP 埠', 
	CONNECTIONPROPERTY('client_net_address') '用戶端的 IP 位址'

由此我們可以知道 sys.dm_exec_connections 動態管理檢視表回傳的結果與 CONNECTIONPROPERTY 函式的相對應資料欄位所顯示的結果是相同的。

2010年7月20日

在 SQL Server Management Studio 列印 T-SQL 指令碼,中文字變成 口,不然就是空白

在 Microsoft SQL Server 2008 Management Studio 的查詢視窗中,要將內含中文字的 T-SQL 指令碼列印出來。
內含中文字的 T-SQL 指令碼

列印出來之後,發現中文字會變成  口(框框字),不然就是空白。
中文字都不見了

  1. 按下 Management Studio 「工具」功能表中的「選項」
    工具、選項
  2. 按下「環境」節點中的「字型和色彩」
  3. 「顯示設定」下拉式清單中,選擇「印表機」
  4. 「字型(粗體類型表示固定寬度字型)」下拉式清單中,選擇中文字型,例如:微軟正黑體、標楷體…。
  5. 按下「確定」按鈕。
    設定字型
  6. 再次列印 T-SQL 指令碼,即可看見中文字被列印出來。
    中文字出現了

2010年4月21日

在 SQL Server 2005/2008 中使用 ODBC 所建立的資料來源名稱(DSN)

從 SQL Server 2005 開始,微軟將原本的 DTS(Data Transformation Services)改成 SSIS(SQL Server Integration Service),也正因為如此,所以 SQL Server 2005/2008「匯入和匯出資料精靈」與 SQL Server 2000 的「匯入/匯出資料精靈」「選擇資料來源」視窗中的「資料來源」下拉式清單所呈現的結果就不一樣。

SQL Server 2000 的 DTS(匯入/匯出精靈)

以下使用 SQL server 2008 為例,說明如何讓 SQL server 中的「匯入和匯出資料精靈」使用 ODBC 資料來源:

  1. 使用「ODBC 資料來源管理員」(亦即 odbcda32.exe)設定好「資料來源名稱」(亦即 DSN)
  2. 開啟「SQL Server 匯入和匯出精靈」,於「選擇資料來源」對話視窗中的「資料來源」下拉式清單,選擇「.Net Framework Data Provider for Odbc」
    SQL Server 2005/2008 匯入和匯出精靈
  3. 於下方窗格中的「來源」「具名的 ConnectionString」欄位中,分別輸入 ODBC 驅動程式的名稱(亦可由「ODBC 資料來源管理員」「驅動程式」索引標籤查得)與資料來源名稱。

    「使用者資料來源名稱」為例 :
    ODBC 資料來源管理員

    查得 ODBC 驅動程式的名稱
  4. 按下「下一步」,依照精靈指示進行後續操作

步驟 2. 所指的「資料來源名稱」,可以是「使用者資料來源」(User DSN)、「系統資料來源」(System DSN)、或「檔案資料來源」(File DSN),端看您於步驟 1. 所設定的是使用者、系統、檔案。

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年10月2日

Windows 7 可以安裝哪些版本的 SQL Server

Windows 7 嶄新的操作介面,執行速度又比他的兩個哥哥 Windows Vista 跟 Windows XP 來的快,相信有不少人計畫(或是已經)改用 Windows 7。

在 Windows 7 上可安裝下列版本的 SQL Server:

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年7月21日

可以使用 SQL Server 2005 Management Studio 或 Management Studio Express 連線到 SQL Server 2008 進行管理嗎?

如果您所使用的 SQL Server 2005 Management Studio (簡稱 SSMS)或 Management Studio Express(簡稱 SSMSE)不是 SP3,那答案是不行

因此如果使用 SQL Server 2005 的 SSMS / SSMSE SP3,自然就可以連線到 SQL Server 2008 進行管理。

下載點:

那要如何確認所使用的 SSMSE 是否為 SP3 呢?

請按下 SSMSE 「說明」功能表中的「關於」,察看「元件名稱」SQL Server Management Studio Express 那行顯示的版本是否為 9.00.4035.00

2009年6月10日

如何查詢 SQL Server 的授權狀態

在 SQL Server 7.0 的時代,要查詢授權狀態,只需使用控制台中的「授權」,即可查詢或新增授權。

到了 SQL Server 2000 時,欲查詢 SQL Server 授權狀態可以開啟控制台中的「SQL Server 2000 授權安裝程式」


或是使用 regedit.exe 也可以看到機碼的相關設定(黃色所圈選的地方):


第三種方式,就是使用 T-SQL 指令進行查詢:
SELECT ServerProperty('LicenseType') 授權方式, ServerProperty('NumLicenses') 授權個數


查詢結果:


如果是採用「以每一處理器」為授權模式,相關機碼所代表的意義如下:
名稱
類型
資料
說明
Mode
DWORD
2
每一處理器(Per Processor)
ConcurrentLimit
DWORD
4
處理器個數為 4 個
(會隨您安裝的環境顯示其實際的個數)

「以每一機座」為授權模式的機碼說明如下:
名稱 類型 資料 說明
Mode DWORD 0 每一機座(Per Seat)
ConcurrentLimit DWORD 10 可連線的用戶端個數為 10 個
(會隨您於安裝時,所設定的個數而異)


因此,如果要調整授權的類型,當然就是修改機碼,要記得於修改機碼之後,重新啟動 SQL Server 服務,才能透過先前的 T-SQL 指令來查詢授權模式。

執行的結果第 1 個欄位(亦即授權方式)值是下列 3 種之一:
  • PER_SEAT
    每一基座模式
  • PER_PROCESSOR
    每一處理器模式
  • DISABLED
    停用授權


執行的結果第 2 個欄位(授權個數)是:
  • 如果在每一基座模式中,便是這個 SQL Server 執行個體所登錄的用戶端授權數目。
  • 如果在每一處理器模式中,便是這個 SQL Server 執行個體所登錄的處理器數目。
  • 當第 1 個欄位的結果是 DISABLED 時,便會傳回 NULL


但是從 SQL Server 2005 開始,於安裝時,根本就沒有讓我們選擇「以每一處理器」「以每一機座」的授權模式,所以於安裝完畢之後,在控制台裡的授權安裝程式當然也沒了。此時,欲查詢授權狀態只能找出當初購買 SQL Server 的紙本授權書,如下圖所示即為 1 個用戶端授權(Client Access License)


根據 Microsoft SQL Server Support Blog 裡的 Tracking License Information in SQL 2005 一文指出,可以自行加入並編輯相關的機碼,以便透過 T-SQL 進行查詢。SQL Server 2005 的授權模式機碼位置在:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\MSSQLLicenseInfo\MSSQL9.00

但是個人怎麼測試,結果都如下圖:

如果有人成功設定完成,麻煩告訴我,讓我知道要如何去改!

2009年2月12日

可以使用 SQL Server 2005 Management Studio 連線到 SQL Server 2008 進行管理嗎?

可能限於經費的關係,所以無法一次將所有的 SQL Server 2005 通通升級到 SQL Server 2008,此時就會發生管理者只安裝了 SQL Server 2005 Management Studio,要連線到 SQL Server 2008 進行管理的情況。 欲達成此目的,請確認 SQL Server 2005 已經安裝 SQL Server 2005 Service Pack 2 的累積更新程式套件 5 以上,然後確認 SQL Server 2008 已經允許遠端連線,且在 Windows 防火牆中建立例外。 以下圖為例,就是使用 SQL Server 2005 SP3 的 SSMS 連線到 SQL Server 2005 與 2008:

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