2012年4月28日 星期六

Internet Explorer 網頁空白問題處理

        最近在另一台電腦將原本的IE8升級到IE9之後,突然發現無法使用,也就是開啟網頁後,秀出下列的頁面,在以往最常作的就是重設IE,但是嘗試後,仍然無法解決問題,後來查詢了之後,終於解決了這個問題,我將方式與說明撰寫如下。

問題頁面:

方式一、重設IE:
1、開啟 IE -> 工具 -> 網際網路選項 -> 進階 -> 點選 [重設]。
2、重新設動IE

方式二、關閉 GPU 硬體加速功能:
1、開啟 IE -> 工具 -> 網際網路選項 -> 進階 -> 加速圖形 -> 勾選 [使用軟體呈現,而不使用GPU呈現]。
2、重新設動IE


官網說明:
硬體加速是 Internet Explorer 9 的新功能,可讓 Internet Explorer 將中央處理器 (CPU) 中的所有圖形和文字轉譯移至圖形處理單元 (GPU)。在某些狀況下必須啟用或停用硬體加速,透過檢視特定網際網路網站 (例如內含串流或全螢幕視訊的網站) 來檢查是否有硬體或軟體的相容性問題。



參考連結:
如何在 Internet Explorer 9 中啟用或停用軟體轉譯
http://support.microsoft.com/kb/2528233/zh-tw

關鍵字:Internet ExplorerGPUIEIE 9加速圖形

2012年4月23日 星期一

SQL Server 2012 AlwaysOn vs. Database Mirroring

        SQL Server 2012中最重要的一個新功能就是高可用性(High-Availability)中的AlwaysOn,而在我之前的文章中已有深入的介紹,詳細請參考下列的連結,由於AlwaysOn是Database Mirroring的加強版,但是常常有人搞不清楚兩者之間的差異,所以我參考了網路上的一篇文章後,將文章與心得整理如下,再請參考。

參考文章:
SQL Server 2012 新功能 - AlwaysOn安裝與設定
http://caryhsu.blogspot.com/2012/04/sql-server-2012-alwayson.html
SQL Server - AlwaysOn連線設定
http://caryhsu.blogspot.com/2012/04/sql-server-alwayson.html
SQL Server - 如何建立 Database Mirroring
http://caryhsu.blogspot.com/2011/12/sql-server-database-mirroring.html

1、Clustering vs. Witness
AlwaysOn必須架設在Windows Cluster(WSFC)上,而如果Database Mirroring要作到Auto Failover時,就必須有第三台進行監控,也就是Witness的角色,就兩者相比由於Cluster必須要有特定硬體支援,而Witness的電腦只需要非常簡單的配備與SQL Server Express的版本就好,但是由於WSFC在節點偵測上(Heartbeat)的處理比Database Mirroring好很多,所以算是大大的提升穩定度的部份。

2、四個複寫節點 vs. 1 個鏡射節點
AlwaysOn比Database Miroring更優越的地方就是最多有四個複寫節點,比Database Mirroring只有一個節點相比,更可以提高系統的可用性。


3、多點資料庫失敗移轉 vs. 單點資料庫失敗移轉
如同第二項所述,由於Database Mirroring只有一個鏡射節點,所以系統發生失敗時,就只有一個節點可以當成備援,而Database Mirroring是一個以資料庫層級為主的高可用性,所以關於Server - Level的物件並不會進行同步,如系統登入帳號等,在Database Mirroring你不必須手動進行建立,但是在在AlwaysOn,由於透過可用性群組(Availability Group),所以這些就不需在擔心了。

4、混合同步與非同步連線 vs 同步或非同步連線
在Database Mirroring你只能選擇同步(High Safety)或是非同步(High Performance)模式,但是在AlwaysOn中不同複寫節點可以選擇不同的同步方式,但最重要的事,在容錯移轉的同時,必須以同步的節點進行,否則會有資料遺失的可能性,再請注意了。

5、唯讀的資料庫複本 vs 還原中的鏡射資料庫
在Database Mirroring中鏡射資料庫為還原中的狀態,所以是完全無法進行讀取的,但是您可以透過快照的方式,讓使用者存取,但是在建立快照時,還是需要將使用者的連線切斷,所以仍有不便的地方。而AlwaysOn複本資料庫提供唯讀的方式進行存取,讓你在效能負載平衡上有更好的應用。


參考網址:
SQL Server Denali AlwaysOn vs. Database Mirroring
http://www.sqlmag.com/article/sqlserverdenali/sql-server-denali-alwayson-140199


關鍵字:SQL Server 2012AlwaysOnDatabase MirroringAvailability Group

2012年4月21日 星期六

SQL Server - Unicode字元儲存與處理方式

        由於各國有各國的語言與文字呈現方式,所以在以往儲存文字時,都會以特定字元碼加以儲存,如繁體中文就使用大五碼(Big5),而簡體中文則使用GB,但由於如果同一個系統中需要處理不同的語系或處理到一些罕用字時,常會有亂碼與處理上的問題,所以後來為了統一所有的字元碼,ISO/IEC 便製定(10646 國際編碼標準) 推出了 Unicode (UTF-8、UTF-16、UTF32),簡稱為萬國碼。

在一般的網頁應用程式上,在字元編碼,前端的網頁中你必須需要指定編碼,否則會以系統的預設值而定,但是在SQL Server中如果需要儲存與處理Unicode字元時,必須符合以下兩個條件。

必須條件:
1. 資料欄位需要支援 Unicode,請使用 nchar,nvarchar,ntext 型態。
2. 查詢Unicode 字串常數需要 N 前置詞,請參考以下文件:  

INF:SQL Server 中的 Unicode 字串常數需要 N 前置詞
http://support.microsoft.com/?id=239530  

相信大家先前對於上述的處理方式都已有一定的了解,但我最近遇到一個滿特別的情況,使用者有輸入一個罕用字,而在資料庫中因為使用nvarchar的型態,所以儲存的部份一切正常,但是只要查詢條件中有使用到此罕用字時,就會有查詢筆數上的問題,後來經過確認,發現主要是此字是屬於香港增補字符集,所以在處理上必須指定特定的定序,說明如下,其中最令人高興的事,在 SQL Server 2012中特別針對增補字符集推出了一個以 SC 結尾的定序,差別就在於如果你使用一般的定序時,如果有使用到增補字符集,透用LEN的函數查詢時,一個字會變成長度2,而如果使用類似substring進行取字時就會有問題,而Supplementary Character (SC) Collations就是主要用來解決這個問題,所以還沒升級的,動作要快了哦!!


補充說明:
SQL Server provides data types such as nchar and nvarchar to store Unicode data.These data types encode text in a format called UTF-16.The Unicode Consortium allocates each character a unique codepoint, which is a value in the range 0x0000 to 0x10FFFF.The most frequently used characters have codepoint values that will fit into a 16-bit word in memory and on disk, but characters with codepoint values larger than 0xFFFF require two consecutive 16-bit words.These characters are called supplementary characters, and the two consecutive 16-bit words are called surrogate pairs.

If you use supplementary characters:

  • Supplementary characters can be used in ordering and comparison operations in collation versions 90 or greater.
  • All _100 level collations support linguistic sorting with supplementary characters.
  • Supplementary characters are not supported for use in metadata, such as in names of database objects.
  • Introduced in SQL Server 2012, a new family of supplementary character (SC) collations can be used with the data types nchar, nvarchar and sql_variantLatin1_General_100_CI_AS_SC, or if using a Japanese collation, Japanese_Bushu_Kakusu_100_CI_AS_SC.
    • The SC flag can be applied to:
      • Version 90 Windows collations
      • Version 100 Windows collations
    • The SC flag cannot be applied to:
      • Version 80 non-versioned Windows collations
      • The BIN or BIN2 binary collations
      • The SQL* collation

參考連結:
==========
香港增補字符集 部首5劃
http://code.web.idv.hk/h2u/h2u_05.php
INF:在 SQL Server 上儲存 UTF-8 的資料
http://support.microsoft.com/?id=232580
Translate to and from UCS-2 or UTF-8 as appropriate within the application. Sample code for this type of conversion is located at the Unicode Consortium's site:
http://www.unicode.org/Public/PROGRAMS/CVTUTF
Collation (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ff848763(v=sql.105).aspx
CAST 和 CONVERT (Transact-SQL)
http://technet.microsoft.com/zh-tw/library/ms187928.aspx
Collation and Unicode Support
http://msdn.microsoft.com/zh-tw/library/ms143726.aspx
nchar and nvarchar (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms186939.aspx
Surrogates and Supplementary Characters
http://msdn.microsoft.com/en-us/library/windows/desktop/dd374069(v=vs.85).aspx

關鍵字:SQL Server 2012UnicodeUTF-8UTF-16Supplementary Character增補字符集ncharnvarchar

2012年4月15日 星期日

SQL Server - AlwaysOn連線設定

        在前面的文章 [SQL Server 2012 新功能 - AlwaysOn安裝與設定] 中,已有介紹如何進行 AlwaysOn的安裝與設定,相信大家已有一定的認識,但關於前端l應用程式的連線設定,由於AlwaysOn不同於Cluster的方式,在Cluster的環境中,可以透過Virtual Server Name進行連線,但是在AlwaysOn皆無法透過此方式,所以本篇我們就來介紹如何設定AlwaysOn的連線方式。


如上圖所示,由於AlwaysOn的架構中,可能會有多個複本節點,而且你也不知道目前那一個節點是主要的節點(Primary Replica),所以在AlwaysOn的可用性群組(Availability Groups)中,可透過可用性群組接聽程式(Availability Group Listener),讓使用者只需連線透過唯一的方式進行連可,底下我們就來介紹設定的方式。

1、新增與設定可用性群組接聽程式(Availability Group Listener)。

1-1. 展開 [可用性群組] -> [可用性群組接聽程式] -> [加入接聽程式]


1-2. 可用性群組接聽程式輸入的資訊如下:

1-2-1 輸入接聽程式DNS名稱,此名稱可以自行設定。
1-2-2 此處通訊埠請設定為SQL Server的通訊埠相同,預設為1433。
1-2-3 網路模式請選擇靜態IP,然後在下方加入一組對應的IP。

PS:接聽程式 DNS 名稱與對應的IP位址是前端使用者連線時使用的部份。


1-3 設定完成後,則可在原本的 [可用性群組接聽程式] 中看到剛剛新增的部份。

1-4 上述的方式主要透過GUI的方式進行設定,而另外你也可以透過下列的語法進行新增。
alter availability group SQL2012-AGN
add listener 'agp_listener'
(
  with IP
    (
      ('192.168.1.60', '255.255.255.0')
    ),
  port = 1433
)


2、連線測試。

連線的部份我們就透過最簡單的方法,也就是ODBC的方式進行連線測試,另外由於在SQL Server 2012中已有更新SQL Server Native Client,版本為11,此版本中可以在連線時設定以讀寫(Read/Write)或唯讀(ReadOnly)的方式進行,所以強烈建議使用此版本 Data Provider 進行。

2-1. 請點選 [系統管理工具] -> [資料來源(ODBC)]
2-2. 請選擇 SQL Server Native Client 11.0

2-3. 名稱請隨意輸入,伺服器的部份,你可以輸入你在第一個步驟中建立的可用性群組接聽程式的名稱。

2-4. 輸入認認的連線方式。

2-5. 在下方的 [應用程式的意圖],主要就是當你連線時要以讀寫(Read/Write)或唯讀(ReadOnly)的方式進行。

2-6. 如無特殊設定,請點選完成即可。

2-7. 測試連線是否正確。



參考連結:
Virtual Server Name
http://msdn.microsoft.com/en-us/library/ms143182(v=sql.90).aspx
Introduction to the Availability Group Listener
http://blogs.msdn.com/b/sqlalwayson/archive/2012/01/16/introduction-to-the-availability-group-listener.aspx
Overview of AlwaysOn Availability Groups (SQL Server)
http://msdn.microsoft.com/en-us/library/ff877884.aspx
Create or Configure an Availability Group Listener (SQL Server)
http://msdn.microsoft.com/en-us/library/hh213080.aspx
View Availability Group Listener Properties (SQL Server)
http://msdn.microsoft.com/en-us/library/hh231289.aspx

關鍵字:AlwaysOnAvailability GroupAvailability Group ListenerClient Connectivity可用性群組客戶端連線

2012年4月9日 星期一

如何安裝範例資料庫於叢集環境上

在之前的文章中 [安裝SQL Server 中的範例資料庫] 已有介紹如何進行範例資料庫的安裝,最近剛好與同事討論到在叢集(Cluster)的環境中進行安裝,但竟然發生無法捉到 Instance Name 的情況,雖然仍可以進行安裝,但是安裝完成後,啟動 Management Studio 仍沒有辦法看到資料庫。


後來經過不斷的研究後,終於找到手動安裝的方式,在這之前,先說明一下,如果你在單機的環境中如果已有安裝完成,你可以將資料庫透過備份後還原到叢集(Cluster)環境也是可以的(也是最快的方式),但是如果你沒有完全可還原的資料庫時,你可以透過下列的方式進行手動安裝。


1、檔案下載:
(詳細的安裝方式請參考我的前一篇文章:安裝SQL Server 中的範例資料庫 )

CodePlexhttp://msftdbprodsamples.codeplex.com/
SQL Server code-named "Denali" CTP1 :now available.
SQL Server 2008R2 :now available.
SQL Azure : now available.
SQL Server 2008 : still available.
SQL Server 2005 : still available.

2、目錄確認:
下載完成後,請先在其中一個節點進行安裝,建議可以在 Passive 的節點中進行,安裝時仍然會找不到 Instance ,請一樣繼續安裝,完成後,你可以在下列的目錄中找到資料檔(CSV)與安裝描述檔(.sql),

安裝路徑:c:\Users\Login User\AppData\Roaming\SQLServerSamples
PS:Login User為你目前登入的使用者名稱。

3、手動安裝:

配備說明:
第一台
角色名稱:Active
電腦名稱:SQL2008-AA-1
OS:Windows 2008R2 Enterprise
DB:Windows 2008R2 Enterprise
IP:192.168.1.100

第二台
角色名稱:Passive
電腦名稱:SQL2008-AA-2
OS:Windows 2008R2 Enterprise
DB:Windows 2008R2 Enterprise
IP:192.168.1.101

3-1 資料庫與目錄確認
安裝完成後,會有七個主要的目錄需要進行安裝,安裝的方式相同,我以其中一個為範例進行說明:

目錄名稱:
  1. AdventureWorks 2008R2 Data Warehouse
  2. AdventureWorks 2008R2 LT
  3. AdventureWorks 2008R2 OLTP
    上面的資料庫要啟用 FileStream 的功能才可以,啟用完成後,請得要重新啟動服務。
  4. AdventureWorks Data Warehouse
  5. AdventureWorks LT
  6. AdventureWorks OLTP

當你要安裝 [AdventureWorks 2008R2 OLTP] 的資料庫時,請先在 SQL Server 組態管理員中,將你安裝Instance啟用 FileStream 功能。


3-2 修改檔案內容
在各個目錄下都會一個以install開頭的.sql檔案,請在修改前先建立一個複本(避免改錯),再進行修改。

3-2-1 尋找 $(SqlSamplesSourceDataPath) 的文字,全部取代成 c:\Users\a-cahs\AppData\Roaming\SQLServerSamples\

3-2-2 尋找 $(SqlSamplesDatabasePath) 的文字,全部取代成 S:\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\

PS:此處的 U 是我的叢集磁碟,也就是我主要放置SQL Server Data的位置。


3-3 執行指令
上述的指令,雖然可以直接在 Management Studio執行,但由於如果你沒有修改好的話,指令不會停止,而且資料庫可能會建立在你的預設登入的資料庫中,如 Master,所以請利用 sqlcmd 載入執行,執行方法如下。

執行指令:
sqlcmd -S servername/instance -i 指令檔位置



參考連結:
Run Transact-SQL Script Files Using sqlcmd
http://msdn.microsoft.com/zh-tw/library/ms170572.aspx


關鍵字:AdventureWorksSample Database範例資料庫

2012年4月5日 星期四

SQL Server 2012 新功能 - AlwaysOn安裝與設定

        在之前的文章 [SQL Server 2012 - AlwaysOn 安裝與設定教學] 已有介紹過SQL Server 2012 - AlwaysOn安裝的功能,但是當時是使用 CTP3的版本進行安裝,所以本篇再透過 RTM 的版本再次介紹如何進行 AlwaysOn 的安裝介紹。

今天要來介紹的是SQL Server 2012 Denali的新功能 AlwaysOn 的安裝與設定,相信有在注意我的部落格的人,應該都有耳聞這個功能,或是大家可以參考下列的連結再重新認識一下AlwaysOn,並實際學習如何將這個功能進行設定。

1、功能說明

1-1 AlwaysOn的新特點:

1-2 AlwaysOn的架構:



補充說明文章:
SQL Server 2012 (Code Name Denali) - HA 新功能 - AlwaysOn

作業系統版本:Windows 2008 R2 SP1
資料庫版本:SQL Server 2012 Enterprise (RTM) - 11.00.2100.60

2、安裝與設定 AlwaysOn

2-1 設定Cluster
而安裝的方式上 AlwaysOn 的節點必須架構在 Cluster之上,所以必須先設定好Cluster,設定方式請大家參考我的下列兩篇文章進行設定,雖然 AlwaysOn 是架構在 Cluster,但他跟以往的安裝略有不同,所以在安裝時,請注意下列幾點事項。
注意事項:
  • AlwaysOn 的2個節點上資料庫安裝不是在叢集磁碟上,而是在本機磁碟上。
  • AlwaysOn 不需依靠在 MSDTC 的服務上。
  • 安裝節點上的資料庫系統時,需選擇 [新增SQL Server 獨立安裝或將功能加入至現有安裝]
  • 請先安裝在第一台之後U=,然後再安裝在第二台。
  • 關於SQL Server 2012的安裝方式,請參考我的另一篇作品。
    SQL Server 2012 RTM 預覽與介紹


2-2 安裝完成後,分別到兩台電腦上啟用 AlwaysOn 的功能,路徑為 [SQL Server 組態管理員] -> [SQL Server] -> [內容] -> [AlwayOn High Avaliability] ,你會看到 [啟用 AlwaysOn 可用性群組] 勾選之後,點選確定即可。
2-3 啟動 SQL Server Management Studio ,連線到資料庫後,點選 [管理] -> [可用性群組] -> [新增可用性群組精靈]。

2-4 當你啟用 [新增可用性群組精靈] 如果得到下列的錯誤訊息時,代表你在第2-2的步驟沒有啟用成功,請再次確認即可。

PS:The HADR service must be enabled for server instance 'Server-Name' before you can create an availability group on this instance. To enable the HADR service, open the SQL Server Configuration Manager, select SQL Server Services, right-click on the SQL Server instance name, select Properties, and use the SQL HADR tab of the Server Properties dialog. Enabling the HADR service requires that the SQL (Microsoft.SqlServer.Managmement.HadrTasks)


2-5 輸入 Availability Group Name

2-6 選擇要加入 HADR 的架構中的資料庫,請注意在節點啟用HADR後,不像Cluster是以節點為主,而是以單一的資料庫為主,所以啟用後,必須手動的將你想要的資料庫逐一加入,而加入的資料庫必須符合下列的需求。
  • 資料庫的復原模式必須選擇 [Full]。
  • 在將資料庫加入Availability Group之前必須先進行完整備份
參考說明:

2-7 先切換到 [複本] 的頁次,點選 [加入複本],將第二台也加入。

2-8 切換到 [端點] 的頁次,確認目前的端點設定,這個部份可以保持預設即可。

2-9 切換到 [備份喜好設定] 的頁次,預設值是50%,你可以依照實際情況或設備的不同,藉以調整優先權,這個部份也可以保持預設值即可。

2-10 設定可用性群組的接聽程式,使用預設值即可(也就是選擇不要建立)。

2-11 設定主機上的分享目錄,請確認此目錄第二台也可以連線的到。

2-12 驗證兩台之間設定值,這個部份請注意系統會檢查第一台資料庫的安裝路徑必須在第二台電腦上也有相同的目錄,否則會驗證失敗。

2-13 最後的設定總結,再點選完成即可。


2-14 設定完成後,開啟 [容錯移轉叢集管理員] -> [服務與應用程式]你就可以看到剛剛新增的 可用性群組已上線成功。


3、測試 AlwaysOn 的功能

3-1 連線到第一台之後,試著新增一個資料表與資料。

新增表格語法:
BEGIN TRANSACTION
GO
CREATE TABLE dbo.test_table_2
(
sn int NOT NULL,
name varchar(40) NULL
) ON [PRIMARY]
GO

ALTER TABLE dbo.test_table_2 ADD CONSTRAINT
PK_Table_1 PRIMARY KEY CLUSTERED
(
sn
) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

COMMIT



3-2 連線到第二台之後,點選 [管理] -> [可用性群組] -> [剛剛自訂的可用性群組名稱] -> [可用性複本] -> [第二台名稱] -> [容錯轉移]。



3-3 選擇要切換的主要複本,此時如果有看到警告訊息時,此部份請先安裝下列的 hotfix 進行更新(每一個複本都要),就不會有這個問題。

針對下列的語法,可以查出目前每個節點的 quorum votes,在 Windows 2008 or Windows 2008 R2的環境上查詢的結果為 null,更新 hitfix 之後,即會傳回正常的值,而下圖的警告訊息也會消失。

SELECT member_name, member_type_desc, member_state_desc, number_of_quorum_votes FROM sys.dm_hadr_cluster_members; 



參考連結: A hotfix is available to let you configure a cluster node that does not have quorum votes in Windows Server 2008 and in Windows Server 2008 R2 http://support.microsoft.com/kb/2494036/en-us View Cluster Quorum NodeWeight Settings http://msdn.microsoft.com/en-us/library/hh270279(v=sql.110).aspx WSFC Quorum Modes and Voting Configuration (SQL Server) http://msdn.microsoft.com/en-us/library/hh270280(v=sql.110).aspx sys.dm_hadr_cluster_members (Transact-SQL) http://msdn.microsoft.com/en-us/library/hh231519(v=sql.110).aspx


3-4 點選 [連接],進行複本連線的確認。

3-5 容錯移轉資訊確認。

3-6 你以透過可用性複本確認,轉換成功後,你就可以看到兩台電腦的 [主要] 與 [次要] 的身候就會互換。

3-7 如果你要觀察目前 AlwaysOn 的健康狀況,在 RTM 的版本中已有加入儀表版的功能,你可以透過此功能即時的得知AlwaysOn的狀態。



參考網址:
Monitoring of Availability Groups (SQL Server) http://msdn.microsoft.com/en-us/library/ff877954.aspx
Use the AlwaysOn Dashboard (SQL Server Management Studio)
http://msdn.microsoft.com/en-us/library/hh213474.aspx


其他相關網址:

  1. SQL Server 2012 Code Name(Denali) 新功能介紹與預覽
  2. SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – 分頁功能
  3. SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – Sequence
  4. SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – Code Snippet Manager
  5. SQL Server 2012(Code Name Denali) - 以列為主的新儲存方式(雲端儲存架構)
  6. SQL Server 2012(Code Name Denali) - FileTable介紹
  7. 微軟介紹雲端平台就緒的資訊 - TechEd 2011
  8. SQL Server 2012 (Code Name Denali) - HA 新功能 - AlwaysOn
  9. SQL Server 2012 (Code Name Denali) - AlwaysOn 安裝與設定教學
  10. SQL Server 2012 新功能 - AlwayOn安裝與設定



關鍵字:SQL ServerDenaliAlwaysOnHA、SQL Server 2012