2010-10-25

SQL Server 2008 R2 版本的資料庫,無法在 SQL Server 2008 版本上使用;Error 948 The database 'xxx' cannot be opened because it is version 661. This server supports version 655 and earlier. A downgrade path is not supported.

幾個朋友詢問:在附加資料庫或是還原資料庫時,遇到以下的錯誤訊息:

訊息 1813,層級 16,狀態 2,行 1
無法開啟新資料庫 'R2V105016'。CREATE DATABASE 已經中止。
訊息 1813,層級 16,狀態 2,行 1
無法開啟新資料庫 'R2V105016'。CREATE DATABASE 已經中止。
訊息 948,層級 20,狀態 1,行 1
無法開啟資料庫 'R2V105016',因為版本為 661。這個伺服器支援 655 及更早的版本。不支援降級路徑。
--
訊息 1813,層級 16,狀態 2,行 1
Could not open new database 'R2V105016'. CREATE DATABASE is aborted.
訊息 1813,層級 16,狀態 2,行 1
Could not open new database 'R2V105016'. CREATE DATABASE is aborted.
訊息 948,層級 20,狀態 1,行 1
The database 'R2V105016' cannot be opened because it is version 661. This server supports version 655 and earlier. A downgrade path is not supported.
請參考以下的圖示:




經過詢問,這幾位朋友的使用情境是:
要將 SQL Server 2008 R2 版本的資料庫,佈署、附加到 SQL Server 2008 版本的環境上。

例如:程式設計師的開發環境,安裝的是 SQL Server 2008 R2 express 版本,但是客戶端伺服器機器是:SQL Server 2008 版本。

基本上,在新版本 SQL Server 上的資料庫,是沒辦法直接使用附加、還原的方式,將資料庫搬移到舊版本的 SQL Server 上。

也提醒各位:
SQL Server 2008 R2 與 SQL Server 2008 是不同的版本;SQL Server 2008 R2 是目前最新的版本。

SQL Server 2008 R2 版本的資料庫,是無法在 SQL Server 2008 版本上使用。


以下提供查詢 SQL Server 以及資料庫的版本資訊之方式:

/*  DATABASEPROPERTYEX (Transact-SQL)  
傳回指定資料庫選項的目前設定,或指定資料庫的屬性。

語法範例:
DATABASEPROPERTYEX('資料庫名稱','Version')

屬性:Version
建立資料庫所用 SQL Server 程式碼的內部版本號碼。僅供參考之用。不支援。我們無法保證未來的相容性。

-- 請勿再使用 DATABASEPROPERTY 語法
DATABASEPROPERTY (Transact-SQL) 
傳回指定資料庫和屬性名稱的具名資料庫屬性值。

重要事項: 
下一版的 Microsoft SQL Server 將不再提供此功能。
請勿在新的開發工作中使用此功能,並且儘速修改使用此功能的應用程式。 
請改用 DATABASEPROPERTYEX。 
*/
-- 查詢 SQL Server 執行個體的版本,資料庫的內部版本等資訊
USE master
GO
SELECT SERVERPROPERTY('ProductVersion') N'執行個體的版本', 
 SERVERPROPERTY('ProductLevel') N'執行個體的版本層級',
 DATABASEPROPERTYEX('master','Version') N'資料庫的內部版本號碼';
請參考以下的圖示:

以下為 SQL Server 2008 R2 版本的資訊:

以下為 SQL Server 2008 版本的資訊:



若是將 SQL Server 2008 版本的資料庫,附加到 SQL Server 2008 R2 版本上。
也就是說:
將舊版的資料庫,附加到新版本的 SQL Server 上,將會看到以下類似的訊息:

將資料庫 'DB2' 從版本 655 轉換為目前版本 661。
資料庫 'DB2' 正在執行從版本 655 升級到版本 660 的步驟。
資料庫 'DB2' 正在執行從版本 660 升級到版本 661 的步驟。
--
Converting database 'DB1' from version 655 to the current version 661.
Database 'DB1' running the upgrade step from version 655 to version 660.
Database 'DB1' running the upgrade step from version 660 to version 661.

請參考以下的圖示:




可能的處理方式:

SQL Server 2008 R2 版本,使用「指令碼產生精靈」,將資料表的資料,產生成 Insert 陳述式。
http://sharedderrick.blogspot.com/2010/12/sql-server-2008-r2-insert.html

將資料表的資料,產生成 Insert 陳述式:使用 SQL Server Management Studio 2008 指令碼精靈
http://sharedderrick.blogspot.com/2009/03/insert-sql-server-management-studio.html

使用「資料庫發行精靈」:Visual Studio 2008、SQL Server 2008、SQL Database Publishing Wizard
http://sharedderrick.blogspot.com/2009/02/visual-studio-2008sql-server-2008sql_27.html


參考資料:
DATABASEPROPERTYEX (Transact-SQL)
http://technet.microsoft.com/zh-tw/library/ms186823.aspx

DATABASEPROPERTY (Transact-SQL)
http://technet.microsoft.com/zh-tw/library/ms176049.aspx

2010-10-20

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(6)

在前一期文章中,介紹了認識自動修復頁面、可嘗試執行自動修復頁面的錯誤類型、無法自動修復的頁面類型、認識自動修復頁面的動作順序、認識 suspect_pages 資料表等主題,並帶領各位按部就班來準備「資料庫鏡像」基礎環境與建置高效能模式的環境等主題。

在本期文章裡,將繼續討論使用資料庫鏡像監視器,觀察鏡像狀態、執行容錯移轉,使用強制服務(可能會遺失資料)、繼續資料庫鏡像工作階段、移除資料庫鏡像、實作不具有自動容錯移轉的高安全性模式等主題。



更多相關的技術文章,請參考:DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/





參考資料:
新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(1)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring1.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(2)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring2.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(3)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring3.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(4)
http://sharedderrick.blogspot.com/2010/10/sql-server-2008database-mirroring4.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(5)
http://sharedderrick.blogspot.com/2010/08/sql-server-2008database-mirroring5.html  

2010-10-13

設定「大型物件(LOB)」資料同步最大之上限,以使用「交易式複寫(Transactional Replication)」技術為例;Error: 7139

若是資料表中使用到資料類型:text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)等,一般統稱為「大型物件(Large Object,LOB)」。

雖然這類的資料類型,可以存放到 2 GB的資料量。
而且在使用「交易式複寫」上,也是可以使用到這些「大型物件(Large Object,LOB)」。

但是依據預設值,最大可以進行複寫資料是:65536 (位元組,Byte)。
換算下來,差不多是:65536/1024/1024 = 0.0625 (MB)。

若是資料量超過上限,將會遭遇到以下的錯誤訊息,請參考下圖所示:
Error: 7139, Severity: 16, State: 1
Length of LOB data (247504) to be replicated exceeds configured maximum 65536.
The statement has been terminated.
--
訊息 7139,層級 16,狀態 1,行 7
要複寫的 LOB 資料 (67504) 長度超過設定的最大值 65536。
陳述式已經結束。




調整 max text repl size 選項,可以使用 T-SQL 與 SSMS 管理工具來實踐。

(1)使用 T-SQL 陳述式來調整:
--01 查詢是否已經啟用 max text repl size (B)
-- 預設值為 65536,-1 表示沒有任何限制 (除了資料類型所加諸的限制以外)。
SELECT name N'組態選項的名稱', value N'針對這個選項所設定的值', value_in_use N'這個選項目前有效的執行值',  
 description N'組態選項的描述'  ,minimum N'組態的最小值', maximum N'組態的最大值'
FROM sys.configurations  
WHERE name='max text repl size (B)'  
請參考下圖所示:

--02 設定啟用 max text repl size (B) :使用 sp_configure 來啟用 max text repl size (B)
-- 設定會立即生效,伺服器不必重新啟動。
USE master;  
GO  
EXEC sp_configure 'show advanced option', '1';  
GO  
RECONFIGURE  
GO  
--  
EXEC sp_configure'max text repl size (B)'  , '-1'  
RECONFIGURE WITH OVERRIDE  
GO  
  
--03 再度查詢是否已經啟用 max text repl size (B)
SELECT name N'組態選項的名稱', value N'針對這個選項所設定的值', value_in_use N'這個選項目前有效的執行值',  
 description N'組態選項的描述'  ,minimum N'組態的最小值', maximum N'組態的最大值'
FROM sys.configurations  
WHERE name='max text repl size (B)'  
請參考下圖所示:



(2)使用 SSMS 管理工具來調整:
步驟01. 在SSMS管理工具,在「物件總管」,點選指定的伺服器,滑鼠右鍵,選擇「屬性」。

步驟02. 在「伺服器屬性」視窗,點選「進階」頁籤,在「其他」區域,設定「文字複寫大小上限」的屬性值。
請參考下圖所示:



關於 max text repl size 選項

max text repl size 選項可用來指定在單一 INSERT、UPDATE、WRITETEXT 或 UPDATETEXT 陳述式中,可以加入至複寫資料行或擷取資料行中的 text、ntext、varchar(max)、nvarchar(max)、varbinary(max)、xml 和 image 資料的大小上限 (以位元組為單位)。
預設值為 65536,-1 表示沒有任何限制 (除了資料類型所加諸的限制以外)。

這個選項適用於「交易式複寫」和「異動資料擷取」。當同時針對交易式複寫和異動資料擷取設定伺服器時,指定的值會套用到這兩個功能。
快照式複寫與合併式複寫會忽略這個選項。

設定會立即生效,伺服器不必重新啟動


交易式複寫在使用大型物件 (LOB) 資料類型的考量:

在使用「交易式複寫」上,若是資料表中使用到資料類型:text、ntext、image,建議請改用:varchar(max)、nvarchar(max)、varbinary(max)來取代。

如果您使用的是 text、ntext 或 image,請注意下列問題:

(1)WRITETEXT 和 UPDATETEXT 陳述式應在外顯交易中換行。

(2)記錄文字作業可透過使用已發行資料表上具有 WITH LOG 選項的 WRITETEXT 與 UPDATETEXT 來複寫。 WITH LOG 選項是必要的,因為交易式複寫會在交易記錄中追蹤變更。

(3)只有所有的「訂閱者」都執行 SQL Server,才能使用 UPDATETEXT 作業。 WRITETEXT 作業複寫為 UPDATE 陳述式,因此它們也可以與非 SQL Server 訂閱者一起使用。

(4)可設定的參數 max text repl size 會控制可複寫的 text、ntext 、varchar(max)、nvarchar(max) 和 image 資料的最大值 (以位元組為單位)。
這允許支援:ODBC 驅動程式和 OLE DB 提供者;無法處理這些資料類型大數值的 SQL Server Database Engine 執行個體;以及擁有系統資源 (虛擬記憶體) 條件約束的「散發者」。
當其中一個資料類型的資料行發行後,且執行超過設定限制的 INSERT、UPDATE、WRITETEXT 或 UPDATETEXT 作業時,作業就會失敗。

(5)發行 text、ntext 和 image 資料行時,應擷取與 UPDATETEXT 或 WRITETEXT 作業相同交易之內的文字指標 (並可重複讀取)。
例如,不要在某一個交易中擷取文字指標,然後在另一個交易中使用。 它可能已經移動過而且已經無效。


參考資料:
交易式複寫考量
http://technet.microsoft.com/zh-tw/library/ms151254.aspx

max text repl size 選項
http://msdn.microsoft.com/zh-tw/library/ms186225.aspx

sp_configure (Transact-SQL)
http://technet.microsoft.com/zh-tw/library/ms188787.aspx

2010-10-08

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(4)

在前一期文章中,介紹了認識資料庫鏡像的角色切換、自動容錯移轉、手動容錯移轉、輪流升級、強制服務(可能會遺失資料)、資料庫鏡像端點、設定資料庫鏡像端點的存取權、建置資料庫鏡像的相關注意事項等主題。

在本期文章裡,將繼續討論識鏡像狀態、監視資料庫鏡像、資料庫鏡像監視器、資料庫鏡像狀態資料表、設定警示的臨界值等主題。

完整的文章,請參考:第104期之一《新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(4)》


更多相關的技術文章,請參考:DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/





參考資料:
新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(1)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring1.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(2)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring2.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(3)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring3.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(5)
http://sharedderrick.blogspot.com/2010/08/sql-server-2008database-mirroring5.html

2010-10-07

SyntaxHighlighter 3.0.83 與 Google Blogger


在撰寫網誌時,若是有使用到程式碼,可能多半會遇到將程式碼貼到網誌時,版面是一團混亂,目前筆者是使用 SyntaxHighlighter 這個免費的 Java Script 工具。

這個是在客戶端的瀏覽器上執行,所以只要瀏覽器有支援,應該都可以正確顯示。




關於 SyntaxHighlighter

日期:2010/07/02
截至目前為止 SyntaxHighlighter 最新的版本:3.0.83。

新增加的功能:

Dynamic Brush Loading、No Flash Copy To Clipboard、Code Selection、Block Title、CommonJS、Improved CSS support等。

軟體授權方式:
在 SyntaxHighlighter 2.0 以上的版本,其授權模式採取 Donationware。

建議各位若要使用 SyntaxHighlighter 2.0 以上的版本時,記得要給作者實質上的鼓勵。

請參考以下的說明:
Please donate to keep development active!
GNU Lesser General Public License
GNU較寬鬆公共許可證


關於複製區塊內的程式碼方式,也變得十分簡潔,方法如下:

1. 在程式碼區塊內,滑鼠左鍵連點兩下。

2. 就可以自動全部選取此區塊內的程式碼。

3. 若要複製,請搭配快捷鍵:Ctrl+C。

在 SyntaxHighlighter 3.0.83 版本上,一改 SyntaxHighlighter 2.x 版本上被垢病的flash執行效能、額外的圖示等問題。

請注意:
SyntaxHighlighter 3.0.83 版本與 SyntaxHighlighter 1.5.1 在張貼程式碼所使用的區塊寫法是不同。

這在升級前,請您務必留意。



以下以 Google 的 Blogger 搭配使用 SyntaxHighlighter 為範例:

工作1:修改範本來使用 SyntaxHighlighter

步驟01. 進入「Blogger」,點選「設計」\「修改 HTML」。
步驟02. 在「修改範本」區域,搜尋到標籤 <head> 。


步驟03. 貼上以下的範例程式碼:
<!-- 設定載入 shCore.css 與  shThemeDefault.css -->
<link href="http://sites.google.com/site/sharedderrick/syntaxhighlighter3x/shCore.css" rel="stylesheet" type="text/css"/>
<link href="http://sites.google.com/site/sharedderrick/syntaxhighlighter3x/shThemeDefault.css" rel="stylesheet" type="text/css"/>

<!-- 設定需要載入的核心檔案 shCore.js -->
<script src="http://sites.google.com/site/sharedderrick/syntaxhighlighter3x/shCore.js" type="text/javascript"/>

<!-- 設定需要載入的程式語言檔案  -->
<script src='http://sites.google.com/site/sharedderrick/syntaxhighlighter3x/shBrushCSharp.js' type='text/javascript'/>
<script src='http://sites.google.com/site/sharedderrick/syntaxhighlighter3x/shBrushJScript.js' type='text/javascript'/>
<script src='http://sites.google.com/site/sharedderrick/syntaxhighlighter3x/shBrushSql.js' type='text/javascript'/>
<script src='http://sites.google.com/site/sharedderrick/syntaxhighlighter3x/shBrushVb.js' type='text/javascript'/>
<script src='http://sites.google.com/site/sharedderrick/syntaxhighlighter3x/shBrushXml.js' type='text/javascript'/>

<!-- 設定啟用 highlighter   -->
<script type="text/javascript">
SyntaxHighlighter.config.bloggerMode = true; 
SyntaxHighlighter.all()
</script>

步驟04. 點選「儲存範本」。


提醒您:

1. 請將 http://sites.google.com/site/sharedderrick/syntaxhighlighter3x/ 置換為您所使用的網頁位址。

若不介意的話,或許可以直接引用本站的範例碼來使用,也是可行的方法。


關於可以使用程式語言,請參考以下的資料,增加或是置換所需的檔案名稱(File name):
Bundled Brushes


2. 因為筆者使用的是 Blogger,所以需要設定以下的參數:
SyntaxHighlighter.config.bloggerMode = true;


工作2:張貼程式碼的方式

步驟1. 爾後在編寫網誌,在張貼程式碼時,注意事項如下:

1. 請使用標籤 <pre> ...</pre> 區塊來存放程式碼。
2. 在屬性 class 部分,請填入「brush: 程式語言代碼」,其中「程式語言代碼」是指「Brush aliases」的名稱。



支援的「程式語言代碼」 Bundled Brushes

請範例如下:
 
 您的程式碼請貼此處。 

若您的程式碼,有使用到html ,或許可以使用以下的方式來轉換:
Postable | Making your code friendly




筆者僅使用了部分功能,有興趣,請參考官方網頁的說明。
SyntaxHighlighter What's new



相關準備工作:
1. 利用Google的「協作平台」,建立「檔案櫃」,可以來存放存放網頁、相關檔案等。
Google 協作平台
請參考以下的圖示:




2. 下載 SyntaxHighlighter



參考資料:
SyntaxHighlighter

SyntaxHighlighter 參數 Configuration

在 Google Blogger 中使用 SyntaxHighlighter 1.5.1

2010-10-05

安裝 SQL Server 2008 SP2,版本編號:10.0.4000.00

以下是安裝的抓圖畫面,請參考:

安裝 SQL Server 2008 SP2
http://picasaweb.google.com/DerrickLaLa/SQLServer2008SP2#slideshow/5524425418373086498


檢視升級後的成果:版本編號:10.0.4000.00








參考資料:
下載 SQL Server 2008 SP2,版本編號:10.00.4000.00
http://sharedderrick.blogspot.com/2010/10/sql-server-2008-sp21000400000.html

下載 SQL Server 2008 SP2,版本編號:10.0.4000.00



升級到 SQL Server 2008 Service Pack 2 版本之前,請你先參考以下的文件:

修正錯誤的清單:
在 SQL Server 2008 的 Service Pack 2 中修正,該 Bug 的清單
http://support.microsoft.com/kb/2285068


中文版本的下載網址:

SQL Server 2008 Service Pack 2
http://www.microsoft.com/downloads/details.aspx?familyid=8FBFC1DE-D25E-4790-88B5-7DDA1F1D4E17&displaylang=zh-tw

SQL Server 2008 Service Pack 2 Feature Pack
http://www.microsoft.com/downloads/details.aspx?familyid=1B2BD555-CB5B-47B9-88C7-3F89F3B43779&displaylang=zh-tw

SQL Server 2008 SP2 Express Edition Service Pack 2
http://www.microsoft.com/downloads/details.aspx?FamilyID=40acf55f-0715-4bb0-9735-d02fc2c8a7af&displayLang=zh-tw

SQL Server 2008 SP2 Upgrade Advisor
http://www.microsoft.com/downloads/details.aspx?familyid=BDD888FA-779F-480C-A85F-7D70B179E3B9&displaylang=zh-tw


這些封裝可用來升級任何 SQL Server 2008 版本。


Service Pack 2 包含 SQL Server 公用程式和資料層應用程式 (DAC) 的更新,以及 Microsoft Reporting Services 與 Microsoft SharePoint 2010 技術的整合功能。

Service Pack 2 導入了單一資料庫最多 15,000 個資料分割的支援,而且包含 SQL Server 2008 SP1 累計更新 1 到 8。
雖然維持包含產品變更,我們作了重大的投資以簡化開發及管理 Service Pack。


Microsoft SQL Server 2008 Service Pack 1 並非安裝 SQL Server 2008 Service Pack 2 的必要條件。


新功能:

(1) SQL Server 公用程式:
在您套用 SP2 之後,SQL Server 2008 Database Engine 的執行個體就能透過公用程式控制點來註冊為 SQL Server Managed 執行個體。

(2)資料層應用程式 (DAC)
在套用 SP2 之後,所有 SQL Server 2008 Database Engine 執行個體都可支援 DAC 作業。
您可以部署、升級、註冊、擷取和刪除 DAC。

SP2 不會將 SQL Server 2008 用戶端工具升級為支援 DAC。
您必須使用 SQL Server 2008 R2 用戶端工具 (例如 SQL Server Management Studio) 來執行 DAC 作業。
資料層應用程式是一個實體,其中包含應用程式所使用的所有資料庫物件和執行個體物件。
DAC 會提供單一單位來撰寫、部署及管理資料層物件。

(3)SharePoint 整合模式的 Reporting Services
SQL Server 2008 SP2 會針對 Reporting Services SharePoint 整合提供更新。SQL Server 2008 SP2 報表伺服器可與 SharePoint 2010 產品整合。
SQL Server 2008 SP2 也會提供適用於 SharePoint 2007 產品的新增益集。這個新增益集支援將 SharePoint 2007 產品與 SQL Server 2008 R2 報表伺服器整合。

(4) 支援15,000 個資料分割
15K 資料分割改進功能 Microsoft SQL Server 2008 SP2 導入了資料表和索引最多 15,000 個資料分割的支援,適用於 Microsoft SQL Server 2008 Service Pack 2 Enterprise、Developer 和 Evaluation Edition。

如需有關如何啟用和停用這項支援、其限制以及已知問題的詳細資料,請瀏覽<支援 15000 個資料分割>白皮書 (英文)。http://go.microsoft.com/fwlink/?LinkId=199773


參考資料:

安裝 SQL Server 2008 SP2,版本編號:10.0.4000.00
http://sharedderrick.blogspot.com/2010/10/sql-server-2008-sp2100400000.html

Microsoft SQL Server 2008 SP2 Release Notes
http://social.technet.microsoft.com/wiki/contents/articles/microsoft-sql-server-2008-sp2-release-notes.aspx

Microsoft SQL Server 2008 SP2 版本資訊
http://social.technet.microsoft.com/wiki/contents/articles/microsoft-sql-server-2008-sp2-zh-hant.aspx

在 SQL Server 2008 的 Service Pack 2 中修正,該 Bug 的清單
http://support.microsoft.com/kb/2285068

下載與安裝 SQL Server 2008 Service Pack 1 (SP1):版本編號:10.0.2531.0
http://sharedderrick.blogspot.com/2009/04/sql-server-2008-service-pack-1.html