2012年12月26日 星期三

SQL PASS 2013年一月分聚會邀請與通知

2013年的第一個月,很高興的受到台灣SQL PASS的邀約,與大家分享議題,希望各位 SQL Server 同好踴躍報名,也希望可以與現場的各位互相討論與分享,詳細的資訊如下,再請參考。

主題:我在微軟學習SQL Server的生活
講師:台灣微軟 SQL Server 技術支援團隊/第一屆 SQL Hero 盟主 Cary
日期:2013/01/17 18:30~21:00
地點:果子咖啡(台北市民生東路三段140巷11號)
費用:最低消費150元
備註:請於報名時選擇餐點或飲料
報名網址:http://sdrv.ms/RMsj4l


參考地圖:
檢視較大的地圖

2012年12月21日 星期五

如何在Excel 2013中使用PowerView

        我在前面花了很多的章節介紹如何架設PowerView的環境,但坦白說環境的細節繁多,所以無法快速的應用,但好消息的是,在Office 2013中,透過Excel已經可以快速的使用PowerView的功能,所以我們就來介紹如何透過Excel進而設計PowerView。


參考連結:
PowerView環境安裝與建置
http://caryhsu.blogspot.tw/2012/09/powerview.html



我們就以下列網址中提供的範例進行介紹,下列是Olympics選手的參選資料,我們將透過這個檔案來一步一步的說明,並介紹PowerView中的新地圖 (Map) 元件。



1、啟用PowerPivot與PowerView的增益集。

首先在我們開啟Excel後,請先點選 [檔案] -> [選項] -> [增益集],在下方中的 [管理],請選擇 [COM 增益集],然後請選擇 [Microsoft Office PowerPivot for Excel 2013] 與 [PowerView] 兩個項目後,選擇確定即可。



2、點選 [PowerPivot] 的頁籤後,先將你的資料全選後,再點選 [加入至資料模型],此時會跳出一個視窗,由於我們的資料第一行有包含標題,所以請將視窗中的 [我的資料表 (含標題)] 勾選起來後,再選確定即可。

3、建立好後,就會跳出PowerPivot的視窗與連結的資料。


4、選擇 [插入] -> [PowerView],如果你是第一次使用時,這時候會請你安裝Sliverlight,裝完之後,即會出會PowerView的設計畫面。


5、請勾選 [PowerView 欄位] 中的 Country(IOC) Code與 Name的欄位,然後在Name的欄位中,選擇 [計數 (不是空白)]。



6、此時請點選表格後,再點 [設計] -> [地圖],即可完成。

此時你就可以看到他會將原本統計各個國家選手數量的分析表,透過地圖的方式秀出,而圓圈的大小就是代表選手的多寡,透過這個方式,可以原本單純的數字,透過直覺化的方式進行呈現,更一目了然。



參考連結:
Visualizing the Olympics with Power View in Excel 2013: Day 1
http://blogs.msdn.com/b/seanboon/archive/2012/07/30/visualizing-the-olympics-with-power-view-in-excel-2013-day-1.aspx


關鍵字:PowerViewExcel 2013Reporting ServiceMicrosoft BISSRS

2012年12月18日 星期二

如何管理遺失索引與維護索引的最佳數量

        在我的前面幾篇中已有介紹到多種進行索引的管理與維護的方法,但本篇再介紹實際上Index的數量與Missing Indexes的相關介紹,基本上相信大家多少對Missing Indexes有相當的了解,所謂Missing Indexes就是你的查詢在執行時,由於沒有增加索引,所以造成查詢必需從頭掃到尾,也就是造成Table Scan。

         在進行分析後,許多的客戶對於Missing Indexes有點難抉擇,因為他們的表格中已有相當多的Index存在,加了之後反而可能會有效能更慢的問題,的確Index會加快Select的速度,減少 Table Scan,但是相對的也會增加Insert與Update的執行時間,所以本篇我們就來介紹如何進行這些相關的作業。

先行參考文章:
索引分析與維護建議
http://caryhsu.blogspot.tw/2012/02/blog-post_14.html
SQL Server 上大型資料表的索引效能調整與維護
http://caryhsu.blogspot.tw/2011/08/sql-server.html
效能調整 - 填滿因數對資料庫的影響
http://caryhsu.blogspot.tw/2012/02/blog-post.html


Missing Indexes查詢:
下列的語法可以查出目前系統 "從開機" 到目前的執行統計,藉以找出查詢中沒有使用到Index也就是使用Table Scan的查詢有那些。

PS:因為下列的語法是透過DMV進行查詢,所以如果你希望一直保持記錄與資訊的話,建議你可以將資訊回寫於Table中。


SELECT Top 10
    statement AS [database.scheme.table],
    column_id , column_name, column_usage,
    migs.user_seeks, migs.user_scans,
    migs.last_user_seek, migs.avg_total_user_cost,
    migs.avg_user_impact
FROM sys.dm_db_missing_index_details AS mid
    CROSS APPLY sys.dm_db_missing_index_columns (mid.index_handle)
    INNER JOIN sys.dm_db_missing_index_groups AS mig
    ON mig.index_handle = mid.index_handle
    INNER JOIN sys.dm_db_missing_index_group_stats AS migs
    ON mig.index_group_handle=migs.group_handle
ORDER BY migs.avg_user_impact DESC


基本上述的查詢在Column_usage有三種類型,EQUALITY、INEQUALITY、INCLUDE,在建立Index也會不同,詳細的資訊可以參考下列的第一個網址,將會介紹如何透過此語法並實際的建立Index。

現在另外一個問題來了,就是如果我的表格中已有多個Index時,是否該如何選擇合適的Index,所以透過上一個查詢中找出Missing Indexes的部份,當然也可以找出較不常用的Index,所以就可以藉此將沒有使用到或不常使用的索引給刪除,藉以提高索引的最大效能。


找出未使用的索引(Index):
SELECT OBJECT_SCHEMA_NAME(I.OBJECT_ID) AS SchemaName,
       OBJECT_NAME(I.OBJECT_ID) AS ObjectName,
       I.NAME AS IndexName
FROM sys.indexes I
WHERE
-- only get indexes for user created tables
OBJECTPROPERTY(I.OBJECT_ID, 'IsUserTable') = 1
-- find all indexes that exists but are NOT used
AND NOT EXISTS (
SELECT index_id
FROM sys.dm_db_index_usage_stats
WHERE OBJECT_ID = I.OBJECT_ID
               AND I.index_id = index_id
               -- limit our query only for the current db
               AND database_id = DB_ID())
ORDER BY SchemaName, ObjectName, IndexName

找出較不常使用的索引(Indexes):
declare @dbid int
select @dbid = db_id()

select objectname=object_name(s.object_id), s.object_id,
          indexname=i.name, i.index_id,
          user_seeks, user_scans, user_lookups, user_updates
from sys.dm_db_index_usage_stats s, sys.indexes i
where database_id = @dbid and
      objectproperty(s.object_id,'IsUserTable') = 1
      and i.object_id = s.object_id
      and i.index_id = s.index_id
order by (user_seeks + user_scans + user_lookups + user_updates) asc


參考網址:

關鍵字:SQL ServerIndexMiss Indexeshow to evaluate and manage indexes索引維護

2012年12月2日 星期日

SQL Server - 初使連線過慢問題處理

        最近接到一個Case,客戶表示他有多台電腦,但是有特定的電腦連線到SQL Server時都會特別的久,但是其他的電腦都不會,而且透過電腦名稱(Host Name)或IP結果都相同,而且當下觀察Server與Client端的資源與效能都很正常,所以當下猜想,或許與網路有相關,這個是問題最後是透過網路封包分析後才找出問題並解決的,所以在此將這個案例分享出來。

        由於網路的部份可能牽涉會有很多的層面,所以進一步與客戶確認,如是否為同一網址,防火牆的設定等,最後決定透過網路封包分析的方式進行確認,所以我就請客戶透過Netmon的程式進行兩邊封包的收集,封包分析如下:

PS:netmon是Microsoft所推出的一套免費的封包捉取與分析的工具,大家可以透過下列的網址進行下載,也請大家多多利用。

<br>

下載連結:
Microsoft Network Monitor 3.4
http://www.microsoft.com/en-us/download/details.aspx?id=4865


問題分析:
1、在有問題的電腦封包上發生在一開始的初使連線都需要等待5秒的時間,才可以與Server建立連線。

2、在正常電腦上的封包,發現很快的就可以建立連線。

3、在Server上的封包看到也是相同需要5秒的時間才可以正常的連線。

4、確認主機上的效能資訊,看起來也是正常。


解決方式 :
根據上述的分析,與網路Team的同事討論後,懷疑可能是系統網路中的一個New Feature所造成,後來嘗試下列的步驟將此功能關閉後,問題就解決了。

Set the EnableTCPA registry entry to "0" on the SQL Server computer.
To do this, follow these steps:
1.      Click Start, click Run, type regedit, and then click OK.
2.      Locate the EnableTCPA registry entry under the following registry subkey:
         HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
3.      Right-click EnableTCPA, and then click Modify.
4.      In the Value data box, type 0, and then click OK.
5.      Exit Registry Editor.
6.      Restart Computer.


參考知識文件:
A Windows Server 2003-based computer responds slowly to RDP connections or to SMB connections that are made from a Windows Vista-based computer
http://support.microsoft.com/kb/947773


關鍵字:SQL ServerNetwork MonitorNetwork PacketSQL Server Connectity

2012年11月26日 星期一

歡迎參加 SQL PASS User Group Taiwan 聚會

以下內容感謝德瑞克同意分享: 德瑞克:SQL Server 學習筆記

2012年11月成立 SQL PASS User Group Taiwan。<


第一屆會長由 SQL Server 宗師:胡百敬 先生擔任。

歡迎各位夥伴前來參加 SQL PASS User Group Taiwan 聚會

認識 SQL PASS
Professional Association for SQL Server (PASS) 社群已經成立十幾年,應該是全球最大的 SQL Server 使用者社群。致力於 SQL Server 推廣與教育,以志工組成沒有營利,這也須貫徹到全球各個分部。

我們將在 12/1(六) 號 1:30 PM-4:30 PM 藉由台灣微軟總部 7F (台北市信義區松仁路七號七樓)舉辦第一次的聚會,讓好朋友們可以碰個面,彼此認識一下。

並針對以下議題稍做說明:

  1. 介紹 SQL PASS 社群
  2. 大家對 SQL User Group 的期待
  3. SQL Server 的現今與未來


有興趣的朋友都可以自由參加。
報名網頁:http://sdrv.ms/Uitd57

我們希望在台灣能成立 SQL Server 使用者的社群,以互相幫忙與分享。
讓大家不管在工作技術、或職場生涯都有聯繫與依靠。

但由於沒有經營社團的經驗,除了跟 SQL PASS 學習與借助其平台外,還請各位朋友告知 SQL 使用者社群可做些什麼。

台灣 SQL PASS 社群
https://www.facebook.com/sqlpass.tw?fref=ts


參考資料 Professional Association for SQL Server (PASS) 社群
http://www.sqlpass.org/

台灣 SQL PASS 社群
https://www.facebook.com/sqlpass.tw?fref=ts

SQL PASS User Group Taiwan 成立 http://byronhu.wordpress.com/2012/11/21/sql-pass-user-group-taiwan-%E6%88%90%E7%AB%8B/

關鍵字:SQL ServerSQL PASSProfessional Association for SQL Server

2012年11月21日 星期三

SQL Server - 如何透過DMV進行效能評估與監控

        SQL Server有許多監控的方式,較常用的就是透過活動監視器(Activity Monitor)觀察目前使所有的Session,藉以找出那一個Session使用的CPU、IO或執行最久,但是從SQL Server 2005之後,就推出了DMV(Dynamic Management Views)可以找出從SQL Server開機以後到目前的資訊,所以只要有效的利用這個資訊,在系統發生問題時,就可以利用這項功能有效的找出。

        底下我就透過一個例子讓你可以藉以找出目前有問題的語法,當然我也整理了一些常用的DMV用法,但是在管理與分析上,其實不只是透過DMV之外,最好也可以透過Performance Counter進行交叉比對,藉以找出語法執行過慢的問題並加以加析。

事件模擬:
下列我會開一個視窗啟動一個交易,並於交易中新增一筆記錄,但是並不下Commit或Rollback,藉以模擬交易鎖定的狀態。
begin tran
insert into [test_db2].[dbo].[Table_1]
([name] ,[clsid])
values('caryhsu', newid())

另外再開一個視窗,查詢同一個表格,由於此表格並未執行Commit或Rollback,所以會有鎖定的情況發生,請執行下列的語法。
select * from table_1
接下來只有查詢此表格的查詢都會有上述的情況發生,所以接下來我們就透過DMV來進行解析,藉以找出問題。

1、列出目前在執行的Process中有遇到Blocked的部份。
select * from sys.sysprocesses
where blocked <> 0





從上述的查詢中可以看出,目前Session ID 53,被Session ID 54給鎖定住,鎖定類型為LCK_M_S,當然另外我們也要注意waittime的部份,如果鎖定的越久,代表影響到其他的查詢相對也會越久。

PS:請特別注意,透過上述語法查出資料時,並不一定就代表有問題,因為鎖定本來就是合理與預期的動作,但需特別注意的事,但如果查詢出來的資料中waittime過大時,那就代表需特別注意。

2、另外我們可以透過下列的查詢,找出目前系統中等待的前10名類型為何,而查詢出的wait_type可以到下列的網址查詢類型的說明。
select top 10 *
from sys.dm_os_wait_stats
order by wait_time_ms desc

Wait Type參考連結:
sys.dm_os_wait_stats (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms179984.aspx

3、由於我們在第一個查詢知道Session ID 53被54給鎖定住,所以我們可以透過下列的語法找出Session ID 54正在進行的語法與內容。
dbcc inputbuffer(54)

透過上述的方式可以快速且簡單的找出目前的問題,另外下方我也提供了三個語句給大家,希望大家藉以分析並找出目前系統的瓶頸所在。

1、找出最耗用IO的語法
SELECT TOP 10
total_logical_reads,
total_logical_writes,
execution_count,
total_logical_reads+total_logical_writes AS [IO_total],
st.text AS query_text,
db_name(st.dbid) AS database_name,
st.objectid AS object_id
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(sql_handle) st
WHERE total_logical_reads+total_logical_writes> 0
ORDER BY [IO_total] DESC

2、列出目前最耗用CPU的前50個查詢
SELECT  TOP 50
qs.total_worker_time / qs.execution_count AS[Avg CPU Time],
SUBSTRING(qt.text, qs.statement_start_offset / 2,
(CASE WHEN qs.statement_end_offset = -1 THEN len(CONVERT (NVARCHAR (MAX), qt.text)) * 2
ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2) AS query_text,
qt.dbid,
qt.objectid
FROM     sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text (qs.sql_handle) AS qt
ORDER BY [Avg CPU Time] DESC;

3、列出目前最耗用Worker Time的前50個查詢
SELECT   TOP 50 sum(qs.total_worker_time) AS total_cpu_time,
                sum(qs.execution_count) AS total_execution_count,
                count(*) AS '#_statements',
                qt.dbid,
                qt.objectid,
                qs.sql_handle,
                qt.[text]
FROM     sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text (qs.sql_handle) AS qt
GROUP BY qt.dbid, qt.objectid, qs.sql_handle, qt.[text]
ORDER BY sum(qs.total_worker_time) DESC, qs.sql_handle;


鎖定類型參考:
LastwaittypeWaittype描述
LCK_M_SCH_S0x01結構描述穩定性
LCK_M_SCH_M0x02結構描述修改
LCK_M_IS0x03轉譯分享
LCK_M_SIU0x04要更新的轉譯分享
LCK_M_IS_S0x05共用轉譯分享 (機碼範圍鎖定)
LCK_M_IX0x06轉譯排除
LCK_M_SIX0x07共用轉譯排除
LCK_M_S0x08共用
LCK_M_U0x09更新
LCK_M_II_NL0x0A轉譯插入 NULL (機碼範圍鎖定)
LCK_M_II_X0x0B轉譯插入排除 (機碼範圍鎖定)
LCK_M_IU0x0C轉譯更新鎖定
LCK_M_IS_U0x0D轉譯分享更新 (機碼範圍鎖定)
LCK_M_X0x0E排除
LCK_M_BU0x0F大量更新


參考連結:
sys.sysprocesses (Transact-SQL)
http://support.microsoft.com/kb/244455/zh-tw


關鍵字:SQL ServerDMVDynamic Management ViewsPerformance Monitoring性能分析性能優化

2012年11月15日 星期四

SQL Server - 如何動態的變更資料庫

        最近接到一個需求,需要透過T-SQL進行檢示表(View)的建立,但是在程式中需要在A資料庫上建立在B資料庫上,相信大家都知道如何透過GUI的畫面與T-SQL變更目前的資料庫的方式,在T-SQL中,我們可以使用 USE 的關鍵字,但是如果要透過動態的SQL語法時,就無法正常的使用這個關鍵字,一但執行時會發生下列的錯誤訊息。

1、嘗式透過動態SQL的方式進行執行,但會遇到下列的錯誤。

原本的語法:
DECLARE @sql nvarchar(4000);

set @sql = 'USE Northwind '
set @sql = @sql + ' go '
set @sql = @sql + ' create view dbo.test_view '
set @sql = @sql + ' as'
set @sql = @sql + ' select * from customers;'

EXEC (@sql)
錯誤訊息:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'go'.
Msg 111, Level 15, State 1, Line 1
'CREATE VIEW' must be the first statement in a query batch.


2、透過上述的語法,想說可能不可以在動態SQL中進行,所以直接在View的前面嘗試加上資料庫名稱進行,但仍然有下列的錯誤。

調整後語法:
DECLARE @sql nvarchar(4000);

set @sql = ' create view Northwind.dbo.test_view '
set @sql = @sql + ' as'
set @sql = @sql + ' select * from customers;'

EXEC (@sql)
錯誤訊息:
Msg 166, Level 15, State 1, Line 1
'CREATE/ALTER VIEW' does not allow specifying the database name as a prefix to the object name.

3、最後終於找到一個方法,也就是透過在內層同時執行USE與建立View的語法,即可解決這個問題。

修改後的語法:
DECLARE @sql nvarchar(4000);
DECLARE @sql_package nvarchar(4000);
DECLARE @dbName varchar(100);

set @dbName = 'Northwind';
set @sql = 'create view dbo.test_view '
set @sql = @sql + ' as'
set @sql = @sql + ' select * from customers;'

SET @sql_package = 'USE ' + @dbName + '; EXEC sp_executesql N''' + @sql + '''';
EXEC (@sql_package)


參考網址:
sp_executesql (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms188001.aspx
USE (Transact-SQL)
http://technet.microsoft.com/zh-tw/library/ms188366.aspx


關鍵字:SQL ServerUSEsp_executesqlDynamic SQL Command

2012年11月10日 星期六

SQL Server - 文字檔控制

        最近接到一個新的需求,需要將表格中的資料輸出到文字檔案中,方法其實有很多種,如透過 CmdShell 來進行,但可能會有資訊安全的疑慮,所以建議可以透過連結伺服器 (Linked Server),但問題來了,在SQL Server 2008R2上,由於是64位元的應用程式,所以當要連線到文字檔如(*.txt、*.csv)或Office的檔案,如Excel時,就會發生下列的錯誤,所以本篇就來介紹解決這個問題。

錯誤訊息:
OLE DB provider "MSDASQL" for linked server "(null)" returned message "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "(null)".

連結伺服器 "(null)" 的 OLE DB 提供者 "MSDASQL" 傳回訊息 "[Microsoft][ODBC 驅動程式管理員] 找不到資料來源名稱且未指定預設的驅動程式"。
訊息 7303,層級 16,狀態 1,行 1
無法初始化連結伺服器 "(null)" 的 OLE DB 提供者 "MSDASQL" 的資料來源物件。


接下來我們就來介紹如何透過連結伺服器進行:

1、 建立連結伺服器
1-1 開啟Management Studio,點選[伺服器物件] -> [連結的伺服器] -> [新增連結的伺服器]




1-2 輸入連結的資訊。 下列資訊中資料來源主要是指定您的檔案存放位置,本範例我是放在C:\LogFolder下面。


1-3 建立完成後,您就可以在連結的伺服器下看到剛剛新增的連結伺服器

2、安裝 Microsoft.ACE.OLEDB.12.0 的驅動程式與設定。
2-1 由於在SQL Server 64位元中如果要去存取32位元的應用程式時,會發生問題,請先進行下列檔案的安裝。

2-2 下載安裝Microsoft.ACE.OLEDB.12.0
Microsoft Access Database Engine 2010 Redistributable
http://www.microsoft.com/en-us/download/details.aspx?id=13255


2-3 安裝的時候,如果你的機器上已有安裝Office 32位元的程式時,就會遇到下列的問題,由於無法同時安裝32與64位元的應用程式與同一台上,所以請先移除後再安裝即可。

錯誤訊息:
You cannot install the 64-bit version of Microsoft Access Database Engine 2010 because you currently have 32-bit office products installed. If you want to install 64-bit Microsoft Access Database Engine 2010, you will first need to remove the 32-bit installation of Office products. After uninstalling the following product(s), rerun setup in order to install 64-bit version of Microsoft Access Database Engine 2010:


2-4 安裝完成後,請重新啟動電腦。

2-5 安裝完成後,您如果直接使用,然會遇到下列的問題,必須啟用下列的設定後,您才可以讓此驅動程式運作。

EXEC
master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess', 1
GO


錯誤訊息:

訊息 7399,層級 16,狀態 1,行 1
連結伺服器 "LOGMANAGER" 的 OLE DB 提供者 "Microsoft.ACE.OLEDB.12.0" 報告了錯誤。提供者並未給予任何關於錯誤的資訊。
訊息 7330,層級 16,狀態 2,行 1
無法從連結伺服器 "LOGMANAGER" 的 OLE DB 提供者 "Microsoft.ACE.OLEDB.12.0" 提取資料列。

3、使用連結伺服器進行測試。

3-1 接下來請在 C:\LogFolder 目錄下新增一個檔案,本範例名稱為test_doc.txt。
3-2 透過下列的方式即可將進行文字檔的新增與查詢

3-2-1 查詢文字檔:
select * from LOGMANAGER...test_doc#txt

3-2-2 新增文字到文字檔中:
insert into LOGMANAGER...test_doc#txt values('12345')

透過上述介紹的方式,你就可以在SQL Server中進行文字檔的控制,即可整合應用。


參考連結:
How to connect to file-based data sources (Microsoft Access , Microsoft Excel and Text files ) from a 64 bit application
http://blogs.msdn.com/b/sqlblog/archive/2009/12/29/how-to-connect-to-file-based-data-sources-microsoft-access-microsoft-excel-and-text-files-from-a-64-bit-application.aspx

關鍵字:SQL ServerLinked Server連結伺服器Microsoft.ACE.OLEDBMicrosoft Access Database EngineMSDASQL

2012年11月8日 星期四

自動化管理 - 透過警示功能進行監控

        前面的文面已有介紹過多種進行SQL Server資料庫監控的方式,也有介紹到如何透過效能監視器進行監控,但這些都是屬於被動的方式進行,如果希望透過主動的方式,如當CPU、Memory、Disk等物件超過門檻值時,可以主動的通知管理者,如此一來就不用由管理者持續的監控資料庫也可以確認正常的運作,所以本章,我就來介紹如何透過SQL Server的警示功能來達到上述的需求。

1、郵件主機設定

如果你已有內部的專用郵件主機(Mail Server)的話,可以直接跳過本步驟。

1-1 選取功能 [SMTP 伺服器]

1-2 安裝完成後,請開啟 [Internet Information Services 6.0 Manager],然後點選 [SMTP Virtual Server #1] -> 內容。

1-3 選擇 [存取] -> [轉送]

1-4 選擇 [僅限下列清單],此時請將目前此台主機的IP加入後,即可完成設定。

2、設定Database Mail

2-1 點選 [Database Mail] -> [設定Database Mail]

2-2 選擇 [執行下列工作以設定Database Mail]

2-3 設定檔名稱輸入後,請輸入 [加入]。

2-4 在下列位置上輸入你的Mail與郵件主機的資訊。

2-5設定完成後,請點選 [傳送測試電子郵件],藉以確認Database Mail設定正確。

3、設定警示功能

3-1 請確認SQL Server Agent為啟動中。
3-2 點選 [SQL Server Agent] -> [屬性]

3-3 點選 [警示系統] ,勾選 [啟用郵件設定檔] 後,在郵件系統選擇[Database Mail],而在郵件設定檔,請選擇在第二個步驟中新增的設定檔 [profile_cary]。

3-4 點選 [警示] -> [新增警示]。

3-5 在下列選擇類型中主要有分成三類,分別為[SQL Server 事件警示]、[SQL Server 效能條件警示] 與 [WMI 事件警示],此處我們以 [SQL Server 效能條件警示] 為主,選擇後即可將在 [效能監視器] 中以SQLServer開頭的物件加入,此處我們以 [Data Files(s) Size (KB)]為例,當資料庫的大小超過1024KB時,就寄出Mail進行通知。

3-6 點選到 [回應],然後勾選 [通知操作員],選擇通知那些操作員,並勾選 [電子郵件]。

3-7 點選到 [選項],然後請勾選 [電子郵件]

4、測試與確認收件格式

4-1 如果你安裝 的版本為SQL Server 2012 RTM (11.0.2100.60)時,你在收到郵件時會遇到下列的問題,這個已確認為產品問題,再請安裝下列的Fix,或是安裝SQL Server CU3進行即可。


個別修正:
FIX: Incomplete Performance Condition alert in SQL Server 2012

累計更新:
Cumulative update package 3 for SQL Server 2012


4-2 正確的郵件格式

本章的功能可以大大的減輕DBA管理員的負擔,可以在同時管理多台主機的情況下,又可以兼固第一時間知道系統的異常,所以大家一定要多多的利用。

關鍵字:SQL ServerSQL Server Alert警示SQL Server Agent資料庫警示自我警示

2012年10月28日 星期日

如何在叢集上更換SQL Server的磁碟

        當有需要進行叢集(Cluster)上的磁碟更換時,其實是SQL Server的部份,其實有一定的步驟,手萬不要只用更換路徑或更改登錄檔的方式進行,因為這個方式你一定會遇到很多問題而且最後可能還是會有問題,由於近期內接到滿多使用者問到這個部份,所以我將方式整理如下,希望可以幫助大家在更換磁碟上減少問題。

Ex:
Disk group 1 (Old):
Disk T
Disk group 2 (New):
Disk S

設定方式:
 1、請您先將新磁碟上線。

2、開啟容錯移轉叢集管理員 -> 服務與應用程式,先將SQL Server的群組先行設定成 offline. 3、在SQL Server dependency list中,移除舊資料機的相依性

4、因為要將原本磁碟機上的資料拷貝到另外一顆新的磁碟機上,所以需先將原磁碟機重新上線才可以。


5、將SQL Server磁碟上的資料夾透過XCOPY的方式複制到新的磁碟上。

---Use the Xcopy command with the /O/X/E/H/K  to copy the files from Disk S to Disk R.

操作指令:
xopy /O/X/E/H/K S: T:


PS:請千萬注意,不要使檔案總管拖拉或複製貼上的方式,因為如此一來,可能檔案複製後,可能會有權限繼承的問題,所以請使用上述的方式。

6、確認新的磁碟上的資料夾權限與舊的磁碟上的權限設定是否相同。
7、在叢集管理員的介面上將舊的磁碟機代號換成其他的磁碟機


PS:如果無法進行更換時,代表您可能有其他的節點沒有正常上線,再請確認叢集中的所有節點都已正常的上線。

錯誤訊息:
無法取得可用的磁碟機代號
無法取得所有可用的磁碟機代號,因為此叢集的部份節點已經關閉。




8、將新的磁碟機換成原磁碟機的代號。

9、將新的磁碟機加入SQL Server的群組中。


10、將舊的磁碟機從SQL Server的群組中移除。。


11、將新的磁碟機加入SQL Server服務的相依性中。


12、將SQL Server設定成online,並確認是否有誤。

成功上線後,也請同時手動測試Failover是否可以成功。


關鍵字:SQL Server、

2012年10月20日 星期六

如何啟用與設定資料收集器(Data Collection)

        SQL Server的管理上,通常會遇到許多不同的問題,而這些問題,其實有時候很難一看到情況就知道問題為何與該如何處理,所以通常客戶遇到問題時,通常就會請客戶先進行檔案與相關資訊的收集。

         在以往我們可以透過SQL Profiler進行SQL Server上所有活動的收集,但有些問題畢竟關係到OS的層級,如CPU、Memory、Disk等的使用情況,所以也會搭配透過系統中的效能監視器(Performance Monitor)來進行。

         但如果你管理的SQL Server越來越多的時候,都需要每一台都設定效能監視器,在SQL Server 2008以後,推出了資料收集器(Data Collection)的功能,透過這個功能,可以同時收集不同台的SQL Server上的資訊到同一台Database上,所以此功能對許多DBA來說,可以算是一大福音,但其中有一個較大的限制,那就是你需要收集的資料庫必須是SQL 2008(含)以上的版本才可以,雖然我們的客戶中還是有許多仍在使用SQL 2000,但我想這個影響對許多公司來說,應該會越來越低。


Data Collection架構圖

系統架構



執行流程

系統環境:
Windows 2008 R2 SP1
SQL Server 2008 R2 SP1

設定流程:

1、設定資料倉儲(Data Warehouse)
1-1 開啟SQL Server Management Studio
1-2 點選 Management -> Data Collection -> Configure Management Data Warehouse


1-3 資料倉儲精靈畫面

1-4 選擇 [Create or update a management data warehouse]

1-5 選擇資料庫名稱,也可以點選 [New] 新增一個資料庫。


注意事項:
The Performance Data Collector is fully supported by the Enterprise and Standard editions of SQL Server 2008. Out of the box, it only works only on SQL Server 2008 instances, and is not backwards compatible with previous versions of SQL Server.


1-6 選擇 Login 與 Users 的對應,此步驟可以直接跳過即可。


1-7 設定儲存位置確認。

1-8 設定完成。

2、設定與啟用資料收集(Data Collection)
2-1 選擇 [Management] -> [Data Collection] -> [Configure Management Data Warehouse]

2-2 選擇 [Set up data collection]

2-3 設定儲存位置。
注意事項:
a. 此儲存位置只能選擇SQL Server版本為2008(含)以上才可以。
b. 快取的位置可以不用設定,如果維特空白時,會以系統的temp目錄為cache目錄。

2-4 資料倉儲設定完成。


3、啟用資料收集與報表預覽
3-1 展開 [Management] -> [Data Collection] 此時你就會看到已有三個資料收集設定完成。

3-2 此時我們立刻透過介面中的 [Collect and Upload Now] 將資料上傳與更新。


3-3 選擇 [Data Collection] -> [Reports] -> [Management Data Warehouse] -> [Server Activity History]

3-4 此時你就可以看到透過此主機上在統計區間內的相關統計資訊,當然也有其他兩種報表可以參考。



透過資料收集器 (Data Collection),可以快速的進行SQL Server的資料收集,當然更方便的事,你可以透過這個功能快速的產生相關的報表,相信這個功能可以讓許多DBA在管理上更簡單。

參考連結:
Introducing the Data Collector
http://msdn.microsoft.com/en-us/library/bb677248.aspx
Data Collector Architecture and Processing
http://msdn.microsoft.com/en-us/library/bb677355.aspx

關鍵字:SQL ServerData CollectionData Collector資料收集器Management Data warehouse