2011-08-26

答客問:WITH (NOLOCK) 與 unlock 的差異?

使用版本:
SQL Server 2005
SQL Server 2008
SQL Server 2008 R2

有朋友來信詢問:

--EX1. WITH (NOLOCK)
select * from mytest with (nolock)
GO
--EX2. unlock
select * from mytest unlock
GO


以上,這兩句語法有什麼差異?


(一)關於 EX1. WITH (NOLOCK)

NOLOCK:這相當於 READUNCOMMITTED。

READUNCOMMITTED
指定允許中途讀取。

不會發出任何共用鎖定來防止其他交易修改目前交易所讀取的資料,其他交易所設定的獨佔鎖定也不會封鎖目前交易,使它無法讀取鎖定的資料。

允許中途讀取可以提高並行程度,但代價是所讀取的資料修改後來會被其他交易回復。

這可能會使您的交易發生錯誤、為使用者提供永遠不被認可的資料,或是讓使用者看到記錄兩次 (或是根本看不到)。

如需有關中途讀取、不可重複讀取和幽靈讀取的詳細資訊,請參閱<並行效果>。

READUNCOMMITTED 和 NOLOCK 提示只適用於資料鎖定。

所有的查詢 (包括具有 READUNCOMMITTED 和 NOLOCK 提示的查詢),都會在編譯和執行期間取得 Sch-S (結構描述穩定性) 鎖定。

因此,當並行交易在資料表上保有 Sch-M (結構描述修改) 鎖定時,查詢將會遭到封鎖。
例如,資料定義語言 (DDL) 作業會在修改資料表的結構描述資訊之前先取得 Sch-M 鎖定。

任何並行查詢,包括以 READUNCOMMITTED 或 NOLOCK 提示執行的查詢,會在嘗試取得 Sch-S 鎖定時遭到封鎖。

相反地,保有 Sch-S 鎖定的查詢將會封鎖嘗試取得 Sch-M 鎖定的並行交易。

如需有關鎖定行為的詳細資訊,請參閱<鎖定相容性 (Database Engine)>。

無法針對插入、更新或刪除作業修改的資料表指定 READUNCOMMITTED 和 NOLOCK。

SQL Server 查詢最佳化工具會忽略套用在 UPDATE 或 DELETE 陳述式目標資料表的 FROM 子句中的 READUNCOMMITTED 和 NOLOCK 提示。

SQL Server 的未來版本將移除套用到 UPDATE 或 DELETE 陳述式目標資料表的 FROM 子句中 READUNCOMMITTED 和 NOLOCK 提示的使用支援。

請避免在新的開發工作中使用此內容中的這些提示,並規劃修改目前在使用這些提示的應用程式。

您可以使用下列其中一個選項,防止交易讀到尚未認可的資料修改 (中途讀取),同時也將鎖定爭用的情況減到最低:

(1) READ_COMMITTED_SNAPSHOT 資料庫選項設為 ON 的 READ COMMITTED 隔離等級。
(2) SNAPSHOT 隔離等級。


(二)關於 EX2. unlock

印象中,SQL Server 沒有 unlock 這類的用法,這應該是「資料表別名(Table Aliases)」的寫法,請參考以下的範例程式碼:

--01 查詢資料表:Orders
-- 回傳 830 筆資料列。
USE Northwind
GO
SELECT * FROM Orders
GO

--02 設定「資料表別名(Table Aliases)」為:unlock
-- 回傳 830 筆資料列。
SELECT * FROM Orders unlock
GO

--03 使用此「資料表別名」,搭配 WHERE 子句來篩選資料列
-- 僅是回傳 1 筆資料列。
SELECT * FROM Orders unlock
WHERE unlock.OrderID =10248
GO



也就是說,若是使用 EX1. WITH (NOLOCK),是允許「中途讀取」。

若是使用 EX2. unlock,應該是當「資料表別名(Table Aliases)」來使用,無法支援「中途讀取」。

在此,感謝熊爺的解惑與說明。



參考資料:

資料表提示 (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms187373.aspx

使用資料表別名
http://msdn.microsoft.com/zh-tw/library/ms187455%28v=SQL.105%29.aspx

聯結基礎觀念
http://msdn.microsoft.com/zh-tw/library/ms191517%28v=SQL.105%29.aspx

2011-08-23

遭遇 Microsoft SQL Server, Error: 468;情境:使用 SSMS 管理工具執行作業

使用環境:
SQL Server 2008
SQL Server 2008 R2

在使用 SSMS 管理工具執行作業,例如:檢視資料庫的屬性時,可能遭遇到以下的錯誤:


--01 SSMS 管理工具,遭遇 錯誤: 468


錯誤訊息:

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

無法顯示要求的對話方塊。

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

無法顯示要求的對話方塊。 (SqlMgmt)

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

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

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

無法解析 equal to 作業中 "Chinese_Taiwan_Stroke_CI_AS" 與 "Chinese_Taiwan_Stroke_BIN" 之間的定序衝突。 (Microsoft SQL Server, 錯誤: 468)

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



--01 查詢各個資料庫的「預設定序(default collation)」
SELECT name N'資料庫', collation_name N'預設定序'
FROM sys.databases 

--02 查詢各個資料庫的「預設定序(default collation)」



檢視上圖,可以觀察到系統資料庫 model、tempdb 使用的「定序」是:Chinese_Taiwan_Stroke_CI_AS。

但系統資料庫 master 使用的是:Chinese_Taiwan_Stroke_BIN。




若要修正此類問題,方式是讓系統資料庫的定序要一致,可能的解決方式是:

(1)
重建系統資料庫,指定使用正確的定序。

(2)
找到與系統資料庫 master 一樣定序的系統資料庫 model。
使用備份與還原或是檔案覆蓋方式來處理系統資料庫 model。
重新啟動 SQL Server 服務。

--03 各個系統資料庫的「定序」都是一樣的



參考資料

重建系統資料庫
http://msdn.microsoft.com/zh-tw/library/dd207003.aspx

重建系統資料庫;Rebuilding System Databases
http://sharedderrick.blogspot.com/2011/05/rebuilding-system-databases.html

無法重建系統資料庫,以 SQL Server 2008 R2 版本為例
http://sharedderrick.blogspot.com/2011/05/sql-server-2008-r2.html

還原系統資料庫:master、model、msdb
http://sharedderrick.blogspot.com/2011/05/mastermodelmsdb.html

無法解析 equal to 作業中...之間的定序衝突(Cannot resolve the collation conflict between...in the equal to operation) :當資料行的定序不相同,資料表聯結無法正常執行;Msg 468, Level 16, State 9, Line 3 (1)
http://sharedderrick.blogspot.com/2011/04/equal-to-cannot-resolve-collation.html

無法解析 equal to 作業中...之間的定序衝突(Cannot resolve the collation conflict between...in the equal to operation) :當資料行的定序不相同,資料表聯結無法正常執行(2)
http://sharedderrick.blogspot.com/2011/04/equal-to-cannot-resolve-collation_23.html

2011-08-21

認識「傳遞查詢 (Pass-Through Queries)」,使用 OPENROWSET 與 OPENQUERY 函數

「傳遞查詢 (Pass-Through Queries)」

SQL Server 可將傳遞查詢作為 OLE DB 資料來源未解譯的查詢字串。

查詢必須採用 OLE DB 資料來源可接受的語法。
Transact-SQL 陳述式可使用傳遞查詢的結果,就好像它是一般的資料表參考一樣。

下列是從 OLE DB 提供者產生資料列集的方法:
1. 參考提供者可公開成表格化資料列集之資料來源內的物件。所有的提供者都支援此功能。

2. 將提供者所能處理的指令傳給提供者,並將指令的結果公開成資料列集。此功能要求提供者支援 OLE DB Command 物件,以及它所有的強制介面。

當提供者支援 Command 物件時,這些 Transact-SQL 函數可用來傳送提供者命令,稱為傳遞查詢:
1. OPENQUERY 可將命令字串傳送給使用連結伺服器名稱的 OLE DB 資料來源。
2. OPENROWSET 可支援將指令字串傳送給 OLE DB 資料來源。您可使用特定名稱來參考產生的資料列集。

OPENROWSET 與 OPENQUERY 支援傳遞查詢,只有當查詢具備下列其中一項特性時,查詢字串才會包含預存程序呼叫:
1. 執行單一靜態 SELECT 陳述式。

2. 不使用任何動態的 EXECUTE 陳述式。

3. 不執行任何資料修改作業。



使用 OPENQUERY 函數,請參考以下的範例程式碼:

--EX1. OPENQUERY 搭配 *.accdb:執行 SELECT 傳遞查詢
SELECT *
FROM OPENQUERY([Access_NW2010tw], 'SELECT * FROM 產品資料') 


--EX2. OPENQUERY 搭配 *.accdb:執行 SELECT 傳遞查詢
-- 產品別銷貨季報表
SELECT *
FROM OPENQUERY([Access_NW2010tw], 
'TRANSFORM Sum(CCur([訂貨明細].[單價]*[數量]*(1-[折扣])/100)*100) AS ProductAmount
SELECT 產品資料.產品, 訂貨主檔.客戶編號, Year([訂單日期]) AS 訂貨年份
FROM 產品資料 INNER JOIN (訂貨主檔 INNER JOIN 訂貨明細 ON 訂貨主檔.訂單號碼 = 訂貨明細.訂單號碼) ON 產品資料.產品編號 = 訂貨明細.產品編號
WHERE (((訂貨主檔.訂單日期) Between #1/1/1997# And #12/31/1997#))
GROUP BY 產品資料.產品, 訂貨主檔.客戶編號, Year([訂單日期])
PIVOT "Qtr " & DatePart("q",[訂單日期],1,0) In ("Qtr 1","Qtr 2","Qtr 3","Qtr 4");') 




認識 OPENQUERY (Transact-SQL)

在指定的連結伺服器上,執行指定的傳遞查詢。
這部伺服器是 OLE DB 資料來源。

您可以依照資料表名稱的相同方式,在查詢的 FROM 子句中參考 OPENQUERY。
OPENQUERY 也可以被當作 INSERT、UPDATE 或 DELETE 陳述式的目標資料表加以參考。

它是根據 OLE DB 提供者的功能而定。
雖然查詢可以傳回多個結果集,但 OPENQUERY 只傳回第一個結果集。

權限
任何使用者都可以執行 OPENQUERY。
您可以從定義給連結伺服器的設定,取得用來連接到遠端伺服器的權限。



使用傳遞查詢做為資料表
http://msdn.microsoft.com/zh-tw/library/ms190448.aspx

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

以 SQL Server 測試 OLE DB 提供者
http://msdn.microsoft.com/zh-tw/library/ms187072.aspx

認識 OPENROWSET 與 OPENDATASOURCE 函數;以 SQL Server 2008 R2 x64 位元平台為例
http://sharedderrick.blogspot.com/2011/08/openrowset-opendatasource-sql-server.html

遭遇錯誤: Msg 7308、Msg 7320、Msg 7415(訊息 7302、訊息 7308、訊息 7415);以使用 OPENROWSET 與 OPENDATASOURCE 函數為例
http://sharedderrick.blogspot.com/2011/08/msg-7308msg-7320msg-7415-7302-7308-7415.html

啟用 Ad Hoc Distributed Queries。訊息 15281,SQL Server 已封鎖元件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 之存取,因為此元件已經由此伺服器的安全性組態關閉。
http://sharedderrick.blogspot.com/2011/02/sql-server-2008-surface-area.html

檢查是否已經安裝 「Microsoft Access Database Engine 2010 可轉散發套件」驅動程式;Microsoft Access Database Engine 2010 Redistributable
http://sharedderrick.blogspot.com/2011/08/microsoft-access-database-engine-2010.html

Microsoft Access Database Engine 2010 可轉散發套件
http://www.microsoft.com/downloads/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D&displayLang=zh-tw

檢查是否已經安裝 「Microsoft Access Database Engine 2010 可轉散發套件」驅動程式;Microsoft Access Database Engine 2010 Redistributable

Microsoft Access Database Engine 2010 可轉散發套件 -- 驅動程式

下載將安裝一組元件,方便現有 Microsoft Office 檔案 (例如 Microsoft Office Access 2010 (*. mdb 和 *. accdb) 檔案) 和 Microsoft Office Excel 2010 (*. xls、*. xlsx 和 *.xlsb) 檔案的資料傳輸到其他資料來源 (例如 Microsoft SQL Server)。

也可支援連線至現有文字檔案。應用程式開發人員可安裝 ODBC 和 OLEDB 驅動程式,在開發連線至 Office 檔案格式的應用程式時使用。

若要檢視所安裝的「Microsoft Access Database Engine 2010 可轉散發套件」是為 32 還是 x64 位元的版本。


注意事項:

1. Microsoft.Jet.OLEDB.4.0 目前沒有 x64 位元版本。

2. 「Microsoft Access Database Engine 2010 可轉散發套件」驅動程式,提供:
Access 2010:*. mdb 和 *. accdb 檔案。
Excel 2010:*. xls、*. xlsx 和 *.xlsb 檔案。



可以使用數種方法,今以下使用 SQL Server 的「匯入和匯出資料精靈」來示範。

--00 SQL Server 匯入和匯出資料精靈



01_匯入和匯出資料 (32 位元)

--01 使用「匯入和匯出資料精靈」 (32 位元)版本 + 已經安裝 32 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」。




--02 使用「匯入和匯出資料精靈」 (64 位元)版本,但並未安裝。




--03 使用「匯入和匯出資料精靈」 (64 位元)版本 + 已經安裝 64 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」。




若作業系統上已經先安裝了 32 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」,要再安裝 x64 位元版本時,將會遇到以下的訊息:

由於您目前已安裝 32 位元的 Office 產品,因此無法安裝 64 位元版本的 Microsoft Access Database Engine 2010。
如果想要安裝 64 位元的 Microsoft Access Database Engine 2010,必須先移除安裝的 32 位元 Office 產品。

為安裝 64 位元版本的 Microsoft Access Database Engine 2010,請在解除安裝下列產品後重新安裝程式:
Microsoft Office Professional Plus 201,
Microsoft Office Visio 2010,
Microsoft Office Project Professional 2010


04_開啟檔案_AccessDatabaseEngine_X64.exe



05_已安裝 32 位元版本,無法再安裝 x64 位元版本。




06_發生錯誤,安裝失敗




請先安裝 Access Database Engine 2010 後,才能安裝 Service Pack 1 for Microsoft Access Database Engine 2010 。

--01 安裝 accessdatabaseengine2010sp1-kb2460011-x64-fullfile-zh-tw.exe


--02 安裝 Microsoft Access Database Engine 2010 Service Pack 1


--03 此系統未安裝受此套件影響的產品




參考資料

認識 OPENROWSET 與 OPENDATASOURCE 函數;以 SQL Server 2008 R2 x64 位元平台為例
http://sharedderrick.blogspot.com/2011/08/openrowset-opendatasource-sql-server.html

遭遇錯誤: Msg 7308、Msg 7320、Msg 7415(訊息 7302、訊息 7308、訊息 7415);以使用 OPENROWSET 與 OPENDATASOURCE 函數為例
http://sharedderrick.blogspot.com/2011/08/msg-7308msg-7320msg-7415-7302-7308-7415.html

啟用 Ad Hoc Distributed Queries。訊息 15281,SQL Server 已封鎖元件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 之存取,因為此元件已經由此伺服器的安全性組態關閉。
http://sharedderrick.blogspot.com/2011/02/sql-server-2008-surface-area.html

Microsoft Access Database Engine 2010 可轉散發套件
http://www.microsoft.com/downloads/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D&displayLang=zh-tw

--
說明 Access 資料庫引擎 2010 Service Pack 1
http://support.microsoft.com/kb/2460011

Service Pack 1 for Microsoft Access Database Engine 2010 (KB2460011) 32-bit Edition - 中文(繁體)
http://www.microsoft.com/downloads/zh-tw/details.aspx?FamilyID=b663a458-2fe9-4d45-9c2d-992298fe4434

Service Pack 1 for Microsoft Access Database Engine 2010 (KB2460011) 64-bit Edition - 中文(繁體)
http://www.microsoft.com/downloads/zh-tw/details.aspx?FamilyID=0baaba09-abb5-4ea9-b92d-242890bc017f

2011-08-19

遭遇錯誤: Msg 7308、Msg 7320、Msg 7415(訊息 7302、訊息 7308、訊息 7415);以使用 OPENROWSET 與 OPENDATASOURCE 函數為例

使用版本:
SQL Server 2008 x64
SQL Server 2008 R2 x64

x64 位元的 SQL Server 2008 版本上,若要存取 Excel 或是 Access 的資料,這可能會遭到問題,因為:
Microsoft.Jet.OLEDB.4.0 目前沒有 x64 位元版本。

變通的作法是:
在 x64 位元作業系統 + SQL Server 2008 x64 位元,可以安裝 x64 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」。

在安裝 x64 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」後,執行 OPENROWSET 與 OPENDATASOURCE 函數時,就可以利用此驅動程式來連線以下的檔案類型,例如:
(1) Excel 的:*.xls、*.xlsx。
(2) Access 的:*.mdb、*.accdb。


根據測試,若環境是:
在 x64 位元作業系統+ SQL Server 2008 x64 位元上,安裝 32 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」。

執行 OPENROWSET 與 OPENDATASOURCE 函數上,仍是無法正常使用。



以下為在 x64 位元作業系統+ SQL Server 2008 x64 位元,但並未安裝 x64 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」環境上。

使用 OPENROWSET 與 OPENDATASOURCE 函數所遭遇的錯誤訊息:

--01 在 SQL Server 2008 x64 位元上,使用 Microsoft.Jet.OLEDB.4.0 驅動程式

--EX1. 使用 Microsoft OLE DB Provider for Jet
SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','C:\myAdmin\OtherSource\北風貿易01.mdb';'admin';'',客戶);
GO

/* 錯誤訊息
訊息 7308,層級 16,狀態 1,行 1
OLE DB 提供者 'Microsoft.Jet.OLEDB.4.0' 不能用來散佈查詢,因為提供者是設定成以單一執行緒 Apartment 模式執行。

Msg 7308,Level 16,State 1,Line 2
OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
*/



--02 與 03 在 SQL Server 2008 x64 位元上,尚未安裝 x64 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」。

--EX2. 使用 Microsoft.ACE.OLEDB.12.0,連接到 *.accdb
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','C:\myAdmin\OtherSource\NW2010tw.accdb';'admin';'',客戶);
GO

/* 錯誤訊息
沒有安裝 x64 位元版本時的錯誤:

訊息 7302,層級 16,狀態 1,行 1
無法建立連結伺服器 "(null)" 的 OLE DB 提供者 "Microsoft.ACE.OLEDB.12.0" 的執行個體。

Msg 7302,Level 16,State 1,Line 1
Cannot create an instance of OLE DB provider Microsoft.ACE.OLEDB.12.0 for linked server (null).

Msg 7415,Level 16,State 1,Line 2
Ad hoc access to OLE DB provider 'Microsoft.ACE.OLEDB.12.0' has been denied. You must access this provider through a linked server.
*/





雖然已經安裝了 32 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」,但仍是無法使用。

也就是說:
(1) 32 位元版本的 SQL Server 是對應到 32 位元版本的驅動程式。
(2) x64 位元版本的 SQL Server 是對應到 x64 位元版本的驅動程式。




在 x64 位元作業系統 + SQL Server 2008 x64 位元,可以安裝 x64 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」。
請到以下的網址下載:

Microsoft Access Database Engine 2010 可轉散發套件
http://www.microsoft.com/downloads/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D&displayLang=zh-tw

--04 下載Access Database Engine 2010 可轉散發套件



參考資料

認識 OPENROWSET 與 OPENDATASOURCE 函數;以 SQL Server 2008 R2 x64 位元平台為例
http://sharedderrick.blogspot.com/2011/08/openrowset-opendatasource-sql-server.html

啟用 Ad Hoc Distributed Queries。訊息 15281,SQL Server 已封鎖元件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 之存取,因為此元件已經由此伺服器的安全性組態關閉。
http://sharedderrick.blogspot.com/2011/02/sql-server-2008-surface-area.html

Microsoft Access Database Engine 2010 可轉散發套件
http://www.microsoft.com/downloads/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D&displayLang=zh-tw

2011-08-18

認識 OPENROWSET 與 OPENDATASOURCE 函數;以 SQL Server 2008 R2 x64 位元平台為例

使用版本:
SQL Server 2008 x64
SQL Server 2008 R2 x64


「分散式查詢(Distributed Queries)」可存取多個異質資料來源的資料。
這些資料來源可以儲存在相同或不同的電腦上。

Microsoft SQL Server 藉由使用 OLE DB 來支援分散式查詢。

當 OLE DB 資料來源不會被經常參考,因而不保證可設定連結伺服器時,您就可以使用特定名稱來做為資料表參考。

在 SQL Server 中,您可以使用 OPENROWSET 與 OPENDATASOURCE 函數來提供特定名稱。


根據預設,SQL Server 不允許使用 OPENROWSET 和 OPENDATASOURCE 進行特定分散式查詢。
也就是說,「特定分散式查詢(Ad Hoc Distributed Queries)」選項是停用的。

當此選項設定為 1 時,SQL Server 就會允許特定存取。當此選項未設定或設定為 0 時,SQL Server 就不允許特定存取。

特定分散式查詢會使用 OPENROWSET 和 OPENDATASOURCE 函數,連接到使用 OLE DB 的遠端資料來源。

OPENROWSET 與 OPENDATASOURCE 只能用來參考不常存取的 OLE DB 資料來源。
對於經常存取的資料來源,請定義連結伺服器。

如果啟用特定名稱的使用,就代表 SQL Server 的任何驗證登入都可以存取該提供者。
SQL Server 管理員應該針對由任何本機登入存取都很安全的提供者啟用此功能。

如需詳細資訊,請參閱<存取外部資料>中的 DisallowAdhocAccess 選項。

尚未啟用「特定分散式查詢(Ad Hoc Distributed Queries)」選項之錯誤訊息:

--01 尚未啟用「特定分散式查詢(Ad Hoc Distributed Queries)」選項之錯誤訊息

錯誤訊息:

訊息 15281,層級 16,狀態 1,行 1
SQL Server 已封鎖元件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 之存取,因為此元件已經由此伺服器的安全性組態關閉。
系統管理員可以使用 sp_configure 來啟用 'Ad Hoc Distributed Queries' 的使用。
如需有關啟用 'Ad Hoc Distributed Queries' 的詳細資訊,請參閱《SQL Server 線上叢書》中的<介面區組態>(Surface Area Configuration)。

Msg 15281, Level 16, State 1, Line 1
SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. 
A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', see "Surface Area Configuration" in SQL Server Books Online.




若要啟用「特定分散式查詢(Ad Hoc Distributed Queries)」選項,請參考以下的文章:

SQL Server 2008 介面區組態(Surface Area Configuration,SAC):
啟用 Ad Hoc Distributed Queries。訊息 15281,SQL Server 已封鎖元件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 之存取,因為此元件已經由此伺服器的安全性組態關閉。
http://sharedderrick.blogspot.com/2011/02/sql-server-2008-surface-area.html


在啟用「特定分散式查詢(Ad Hoc Distributed Queries)」選項後,就可以使用 OPENROWSET 與 OPENDATASOURCE 函數。



以下為使用 OPENROWSET 與 OPENDATASOURCE 函數的範例程式碼:

(一)使用 OPENROWSET 函數

包含所有從 OLE DB 資料來源存取遠端資料所需的連接資訊。

這個方法是存取連結伺服器資料表的另一個方法,而且是使用 OLE DB 來連接和存取遠端資料的單次特定方法。

對於更常用到的 OLE DB 資料來源參考,請改用連結的伺服器。

您可以依照資料表名稱的相同方式,在查詢的 FROM 子句中參考 OPENROWSET 函數。

根據 OLE DB 提供者的能力而定,OPENROWSET 函數也可以被當做 INSERT、UPDATE 或 DELETE 陳述式的目標資料表加以參考。

雖然查詢可以傳回多個結果集,但是 OPENROWSET 只能傳回第一個。

OPENROWSET 也支援透過內建 BULK 提供者執行大量作業,可讓檔案資料被讀取,並且當做資料列集傳回。

OPENROWSET 權限是由傳遞給 OLE DB 提供者之使用者名稱的權限所決定。
若要使用 BULK 選項,需要 ADMINISTER BULK OPERATIONS 權限。


--EX1. SQL Server Native Client OLE DB 提供者來使用 OPENROWSET
/*
下列範例會利用 SQL Server Native Client OLE DB 提供者來存取遠端伺服器 localhost\I2 上 Northwind_TW 資料庫中的 客戶 資料表。
 (使用 SQLNCLI 和 SQL Server 將會重新導向至最新版的 SQL Server Native Client OLE DB 提供者)。
 
 SELECT 陳述式是用來定義傳回的資料列集。提供者字串包含 Server 和 Trusted_Connection 關鍵字。
 這些關鍵字是由 SQL Server Native Client OLE DB 提供者所辨識。
*/
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=localhost\I2 ;Trusted_Connection=yes;',
     'SELECT 客戶編號,公司名稱,地址 FROM Northwind_TW.dbo.客戶') AS a;
GO

--EX2. 使用 Microsoft OLE DB Provider for Jet
/*
注意:
1. Microsoft.Jet.OLEDB.4.0 目前沒有 x64 位元版本。

2. 在 x64 位元作業系統 + SQL Server 2008 x64 位元,可以安裝 x64 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」。
*/

SELECT *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','C:\myAdmin\OtherSource\北風貿易01.mdb';'admin';'',客戶);
GO

/* 錯誤訊息
訊息 7308,層級 16,狀態 1,行 1
OLE DB 提供者 'Microsoft.Jet.OLEDB.4.0' 不能用來散佈查詢,因為提供者是設定成以單一執行緒 Apartment 模式執行。

訊息 7308,層級 16,狀態 1,行 2
OLE DB provider 'Microsoft.Jet.OLEDB.4.0' cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode.
*/

--02 在 SQL Server 2008 R2 x64 版本,但 Microsoft.Jet.OLEDB.4.0 目前沒有 x64 位元版本,產生的錯誤:




--EX3. 使用 Microsoft.ACE.OLEDB.12.0,連接到 *.accdb
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','C:\myAdmin\OtherSource\NW2010tw.accdb';'admin';'',客戶);
GO

/* 
沒有安裝 x64 位元版本時的錯誤:

訊息 7302,層級 16,狀態 1,行 1
無法建立連結伺服器 "(null)" 的 OLE DB 提供者 "Microsoft.ACE.OLEDB.12.0" 的執行個體。
*/

SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','C:\myAdmin\OtherSource\NW2010tw.accdb';'admin';'','SELECT * FROM [供應商]');
GO


--EX4. 使用 Microsoft.ACE.OLEDB.12.0,連接到 *.mdb
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','C:\myAdmin\OtherSource\NW2ktw.mdb';'admin';'',客戶);
GO

--
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','C:\myAdmin\OtherSource\NW2ktw.mdb';'admin';'','SELECT * FROM [供應商]');
GO


--EX5. 使用 Microsoft.ACE.OLEDB.12.0,連接到 *.xls
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\myAdmin\OtherSource\NW2ktw.xls;HDR=YES;IMEX=1','SELECT * FROM [客戶$]'); 
GO


--EX6. 使用 Microsoft.ACE.OLEDB.12.0,連接到 *.xlsx
SELECT *
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=C:\myAdmin\OtherSource\NW2010tw.xlsx;HDR=YES;IMEX=1','SELECT * FROM [客戶$]'); 
GO




(二)使用 OPENDATASOURCE 函數

語法:OPENDATASOURCE ( provider_name, init_string )

提供特定連接資訊做為四部分物件名稱,而不使用連結伺服器名稱。

唯有針對指定的提供者將 DisallowAdhocAccess 登錄選項明確設為 0 時,且已啟用 [特定分散式查詢] 進階組態選項時,才可使用 OPENDATASOURCE 來存取 OLE DB 資料來源的遠端資料。

若未設定這些選項,預設行為便不允許特定存取。

OPENDATASOURCE 函數可使用於與連結伺服器名稱相同的 Transact-SQL 語法位置。

因此,OPENDATASOURCE 可做為四部分名稱的第一部分使用,來參考 SELECT、INSERT、UPDATE 或 DELETE 陳述式中的資料表或檢視名稱,或參考 EXECUTE 陳述式中的遠端預存程序。

執行遠端預存程序時,OPENDATASOURCE 應該參考 SQL Server 的另一個執行個體。
OPENDATASOURCE 不接受變數做為其引數。

如同 OPENROWSET 函數,OPENDATASOURCE 只應該參考不常存取的 OLE DB 資料來源。請為存取多次的資料來源定義連結伺服器。

OPENDATASOURCE 或 OPENROWSET 都不提供連結伺服器定義的所有功能,例如安全性管理和查詢目錄資訊的能力。
每次在呼叫 OPENDATASOURCE 時,都必須提供所有連接資訊,包括密碼在內。

重要事項:
Windows 驗證比 SQL Server 驗證更安全。
可能的話,您應該使用 Windows 驗證。OPENDATASOURCE 不應與連接字串中的明確密碼一起使用。


--EX1. SQL Server Native Client OLE DB 提供者來使用 OPENDATASOURCE
SELECT *
FROM OPENDATASOURCE('SQLNCLI','Data Source=Localhost\I2;Integrated Security=SSPI').Northwind_TW.dbo.客戶;
GO


--EX2. 使用 Microsoft.ACE.OLEDB.12.0,連接到 *.mdb
SELECT * 
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
'Data Source="C:\myAdmin\OtherSource\NW2ktw.mdb";User ID=Admin;Password=;')...[客戶];
GO


--EX3. 使用 Microsoft.ACE.OLEDB.12.0,連接到 *.accdb
SELECT * 
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
'Data Source="C:\myAdmin\OtherSource\NW2010tw.accdb";User ID=Admin;Password=;')...[客戶];
GO


--EX4. 使用 Microsoft.ACE.OLEDB.12.0,連接到 *.xls
SELECT * 
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
'Data Source="C:\myAdmin\OtherSource\NW2ktw.xls";Extended Properties=EXCEL 12.0')...[客戶$];
GO


--EX5. 使用 Microsoft.ACE.OLEDB.12.0,連接到 *.xlsx
SELECT * 
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
'Data Source="C:\myAdmin\OtherSource\NW2010tw.xlsx";Extended Properties=EXCEL 12.0')...[客戶$];
GO



認識 OPENROWSET 與 OPENDATASOURCE 函數

當 OLE DB 資料來源不會被經常參考,因而不保證可設定連結伺服器時,您就可以使用特定名稱來做為資料表參考。

在 SQL Server 中,您可以使用 OPENROWSET 與 OPENDATASOURCE 函數來提供特定名稱。

若要控制可存取特定資料來源的人員,只能透過連結伺服器來進行。

針對 SQL Server 的每個執行個體,系統管理員 (sysadmin) 固定伺服器角色的成員可以使用 DisallowAdhocAccess 提供者選項及 Ad Hoc Distributed Queries 伺服器組態選項,
來啟用或停用 OLE DB 提供者的特定連接子名稱。

當啟用特定存取時,登入該執行個體的任何使用者都可以執行包含特定連接子的名稱的 SQL 陳述式,連接子名稱會參照可使用 OLE DB 提供者來存取之網路上的任何資料來源。

若要控制資料來源的存取權,系統管理員 (sysadmin) 角色的成員可以停用 OLE DB 提供者的特定存取權,進而限制使用者只能存取由系統管理員定義之連結伺服器名稱所參考的資料來源。

依預設,會啟用 SQL Server Native Client OLE DB Provider 的特定存取權,並停用所有其他 OLE DB 提供者的特定存取權。

OPENROWSET 及 OPENDATASOURCE 都有提供特定連接資訊。

您可以使用這二個函數來指定存取 OLE DB 資料來源所需的所有資訊;然而,您不能交替使用 OPENROWSET 及 OPENDATASOURCE:

(1)
每當 OLE DB 提供者藉由指定資料表 (或檢視) 名稱,或藉由指定會傳回資料列集的查詢來傳回資料列集時,您就可使用 OPENROWSET 函數。
OPENROWSET 可用來代替 Transact-SQL 陳述式中的資料表或檢視名稱。

(2)
唯有當提供者公開資料列集,並使用 catalog.schema.object 標記法時,才能使用 OPENDATASOURCE。
在 Transact-SQL 語法中,可以使用連結伺服器名稱的地方,就可以使用 OPENDATASOURCE。

因此,在 catalog.schema.object 標記法中,OPENDATASOURCE 可做為參考資料表或檢視之四部份名稱的第一部份。


應該只有在無法設定永久性連結伺服器的特定情況下,才使用 OPENROWSET 和 OPENDATASOURCE 來存取外部資料。

OPENROWSET 和 OPENDATASOURCE 並沒有提供連結伺服器的所有功能,例如:管理登入對應、查詢連結伺服器之中繼資料的功能,以及設定各種連接設定 (例如逾時值) 的功能。

SQL Server 在連接到另一個資料來源時,會模擬適用於 Windows 驗證登入的登入方式;然而,SQL Server 無法模擬 SQL Server 的驗證登入。

因此,若為 SQL Server 驗證登入,SQL Server 可以使用執行 SQL Server 服務之 Windows 帳戶的安全性內容,來存取其他資料來源,例如:檔案、非關聯式資料來源 (如 Active Directory)。

這麼做可能會讓這些登入存取他們沒有權限的其他資料來源 (因為執行 SQL Server 服務的帳戶擁有該權限)。

當您使用 SQL Server 驗證登入時,應考量這種可能性。

OPENROWSET 和 OPENDATASOURCE 的引數不支援變數。

這些引數必須指定成字串常值。如果變數必須當成引數來傳遞,則可用動態方式來建構包含該變數的查詢字串,並使用 EXECUTE 陳述式來執行。



綜合前述來看:

(1)
使用 OPENROWSET 函數,其語法架構是:

SELECT * FROM OPENROWSET ('連線字串','SQL語法')

(2)
使用 OPENDATASOURCE 函數,其語法架構是:

SELECT * FROM OPENDATASOURCE ('連線字串').Database.Owner.Object
或是
SELECT * FROM OPENDATASOURCE ('連線字串').Database.Schame.Object

也就是使用「多部分名稱」、「四部分的名稱」:server_name .[database_name].[schema_name].object_name。




在 x64 位元作業系統 + SQL Server 2008 x64 位元,可以安裝 x64 位元版本的 「Microsoft Access Database Engine 2010 可轉散發套件」。

請到以下的網址下載:

Microsoft Access Database Engine 2010 可轉散發套件
http://www.microsoft.com/downloads/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D&displayLang=zh-tw

--03 下載Access Database Engine 2010 可轉散發套件



參考資料

遭遇錯誤: Msg 7308、Msg 7320、Msg 7415(訊息 7302、訊息 7308、訊息 7415);以使用 OPENROWSET 與 OPENDATASOURCE 函數為例
http://sharedderrick.blogspot.com/2011/08/msg-7308msg-7320msg-7415-7302-7308-7415.html

分散式查詢
http://msdn.microsoft.com/zh-tw/library/ms188721.aspx

OPENROWSET (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms190312.aspx

OPENDATASOURCE (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms179856.aspx

使用特定名稱來識別資料來源
http://msdn.microsoft.com/zh-tw/library/ms187873.aspx

設定伺服器組態選項
http://msdn.microsoft.com/zh-tw/library/ms189631.aspx

特定分散式查詢選項
http://msdn.microsoft.com/zh-tw/library/ms187569.aspx

設定分散式查詢的 OLE DB 提供者
http://msdn.microsoft.com/zh-tw/library/ms190918.aspx

Connecting via a linked server to an access 2010 database file
https://connect.microsoft.com/SQLServer/feedback/details/587897/connecting-via-a-linked-server-to-an-access-2010-database-file

Cannot create instance of "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" on x64 Vista with x64 SQL Server 2008
http://social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/4887d91f-6ac7-40c0-9fc8-5cdd0634e603

Microsoft Access Database Engine 2010 可轉散發套件
http://www.microsoft.com/downloads/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D&displayLang=zh-tw

啟用 Ad Hoc Distributed Queries。訊息 15281,SQL Server 已封鎖元件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 之存取,因為此元件已經由此伺服器的安全性組態關閉。
http://sharedderrick.blogspot.com/2011/02/sql-server-2008-surface-area.html

2011-08-15

SSIS 上手 03 :初探控制流程(2)

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2008/05/12

使用版本:SQL Server 2005




在設計資料轉換程式時,若資料來源是存放在資料夾內的數個檔案時,那我們該如何擷取資料夾內的每一個檔案,當作資料來源進行後續的資料轉換程式設計呢?

在本文中,我們將討論[容器]物件,在[容器]物件內的[Foreach 迴圈容器],讓您可以輕鬆列舉每一個檔案作為資料來源,以利後續的程式處理。







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





文章的檔案名稱:20080512_SSIS 上手 03 :初探控制流程(2).7z

SQL Server 與使用防火牆(1)

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2008/06/02

使用版本:SQL Server 2005



壞人別來!在資料庫內存放了企業營運所需要的資料,這些資料皆是惡意人士所想要窺探的機密。

一般而言,要防護資料,避免被侵入的第一步是:設定存取資料庫的連線密碼。但是在實務上,卻面臨到幾個棘手的問題難以處理,例如:有些資料庫程式是根本尚未設定密碼;密碼太過於簡單;密碼是很多人都知道的;密碼是寫死在應用程式的連線字串內,造成不容易修改等等問題。

換句話說,單獨僅使用密碼來保護資料庫系統,卻會因為密碼設計的太簡陋,密碼無法定期修改、密碼遭人竊取等等問題,讓密碼機制所提供的保護效果大打折扣。在此建議您,請將密碼機制與防火牆系統整合搭配,進行保護資料庫系統。






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





文章的檔案名稱:20080602_SQL Server 與使用防火牆(1).7z

SSIS Lab02:初探 SSIS 方案(3)

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2008/03/10

使用版本:SQL Server 2005



本期延續[SSIS Lab02:初探 SSIS 方案(2)],將繼續帶領各位上手使用:
OLE DB 來源、資料列計數、一般檔案目的地、SMTP 連接管理員、事件處理常式、建立註解說明、建置與執行 SSIS 專案、檢視執行狀態期間各元件所顯示的色彩等等事項。

我們延續前一期的實做步驟,請各位開啟先前存檔的專案[mySol2],開啟繼續編輯。







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





文章的檔案名稱:20080310_SSIS Lab02:初探 SSIS 方案(3).7z

SQL Server 2005 複寫簡介

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2008/03/17

使用版本:SQL Server 2005



隨著資訊應用的多元化,硬體運算力增強與網路發達,讓系統間的連結變得日形重要。由於資料廣泛分布在多個系統,甚至是散佈在全球,或是各式手持裝置中,如何穩定有效地同步資料,變成重要的課題。

SQL Server 隨著版本更迭,越來越強化分散資料的整合,不管是透過連結伺服器(Linked Server)、OpenRowset 函數、Execute … At 語法、乃至於SSIS 服務等等,都可以存取分散式資料。但若要自動且只針對變動過的資料同步,則首推複寫(Replication)功能。






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





文章的檔案名稱:20080317_SQL Server 2005 複寫簡介.7z

SSIS 上手 03:初探控制流程(1)

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2008/04/07

使用版本:SQL Server 2005


本期延續先前的[SSIS Lab02:初探 SSIS 方案(下)],將繼續帶領各位上手認識:初探控制流程、設置優先順序條件約束、初探容器。

在實際在設計資料轉換封裝時,可能會需要利用到數個不同的工作,經過整合設計發揮所需要的功能,但是各個工作彼此之間在執行時,可能會有先後執行順序的需求,例如:A 工作執行成功後,或是執行失敗之後才能夠接下來執行 B 工作,關於這個部分,我們將利用[優先順序條件約束],設計各個工作所需的執行先後來解決此類問題。






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





文章的檔案名稱:20080407_SSIS 上手 03:初探控制流程(1).7z

範例程式碼的檔案名稱:20080405_SSIS2005上手_M03.7z

SSIS Lab01 :初探 SSIS(2)

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2008/02/18

使用版本:SQL Server 2005



本期我們將帶領各位使用 SQL Server Business Intelligence Development Studio(BIDS)來進行開發 SSIS 資料轉換的專案程式;在實作練習中,將先讓各位初探 SSIS 所提供的各項功能,先具備一個整體概
觀,暫不討論細部設計事項,筆者將會在後續的文章中,更進一步的討論各項功能的實作方式與注意事項。

本文將討論三項實作練習,分別是:建立 SSIS 方案、建立封裝、建置與執行專案。

其中在建立封裝練習中,將先快速使用各項主要功能,讓各位對於 SSIS 的功能有一個整體,所以各位在建立封裝練習中,初探數項SSIS 常用的功能。






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





文章的檔案名稱:20080218_SSIS Lab01 :初探 SSIS(2).7z

SSIS Lab01 :初探 SSIS(1)

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2008/02/04

使用版本:SQL Server 2005



SQL Server 2005 新提供的資料轉換平台:SQL Server Integration Services(SSIS),可用於建立高效能資料整合方案,包括:資料倉儲的擷取、轉換和載入 (ETL) 封裝。

SSIS 是用來取代 SQL Server 7.0 版本提供的Data Transformation Services (DTS)。

SSIS 提供豐富眾多的功能,本文計畫以實做練習的方式,按部就班,一步一步,帶領各位快速認識 SSIS,適時補充相關理論知識部分,並且建議各位可以搭配 SQL Server 線上說明一同閱讀,將可更清楚認識 SSIS 的功能與實做方式。






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





文章的檔案名稱:20080204_SSIS Lab01 :初探 SSIS(1).7z

SQL 小技巧─管理篇(1)

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2006/12/18

使用版本:SQL Server 2005



SQL Server 2005 於 2005/11/7 對外發表上市,算算至今已經是屆滿一年了,筆者藉此機會整理有關於 SQL Server 各項管理維護、程式開發設計等等的小技巧分享給各位讀者,希望能協助各位讀者以不同的角度來看SQL Server,各位就當作小品集來恣意瀏覽即可。

筆者計畫將會先推出『SQL 小技巧─管理篇』,將會以管理維護 SQL Server 為主軸,協助各位解決相關的問題。






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





文章的檔案名稱:20061218_SQL 小技巧─管理篇(1).7z

預設的追蹤(Default Trace)之簡介

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2007/10/15

使用版本:SQL Server 2005



SQL Server 2005 提供了數項可用於安全監控的功能,本文將帶領各位初探:[預設的追蹤](default trace)。

[預設的追蹤]可為資料庫管理師提供疑難排解協助,可以提供相關基礎的的記錄檔資料,讓我們能夠在問題發生的第一時間進行診斷。






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





文章的檔案名稱:20071015_預設的追蹤(Default Trace)之簡介.7z

自製SQL Server 2000 營運監控系統(3)

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2005/03/14

使用版本:SQL Server 2000



在前一篇的文章中,我們討論了 SQL Server 2000 營運監控(operation monitor)系統(縮寫成:SOM)的相關功能,小計包含有:自動偵測發生死結(Deadlocks)的處理序、調校 SQL Server 錯誤記錄檔、全新的保全操作員、與系統因故重新啟動時的處理等等的功能與機制。

在本期的文章中,我們將會繼續討論:建置 SQL Agent Mail 的注意事項之議題。






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





文章的檔案名稱:20050314_自製SQL Server 2000 營運監控系統(3).7z

災難復原 - 搶救 SQL Server

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2005/04/18

使用版本:SQL Server 2000



這下子真的是糟糕了,資料庫伺服器SQL Server 根本沒有辦法啟動或是整個硬碟都損毀了,那該如何處理呢?總不能提著腦袋去向老闆遞辭呈吧。

各位讀者,別擔心,筆者將藉由本文的討論,讓各位明瞭該如何處理這樣的災難。

筆者將討論以下幾種情境,並提供災難復原的解決方案給各位,請各位讀者依不同的情境來進行閱讀。






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





文章的檔案名稱:20050418_災難復原 - 搶救 SQL Server.7z

高可用性( H.A )系統之簡介(1)

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2005/06/06

使用版本:SQL Server 2000



『資訊系統,Information System』對今日的企業而言,就像是人們在日常生活中所依靠的水與電,皆是不可或缺的一部份!
也就是說:一旦發生『系統停機』,這就如同停水停電一般地不便!直接、間接地造成企業與用戶端的實質損失。

筆者計畫藉由本文的介紹,並且搭配應用Microsoft SQL Server™ 2000 所提供的功能,使各位讀者能夠瞭解如何去整合各類的IT 技術,讓資訊系統的運行能更加穩健、提供全年無休的優值服務。






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





文章的檔案名稱:20050606_高可用性( H.A )系統之簡介(1).pdf.7z

自製SQL Server 2000 營運監控系統(2)



本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2005/01/17

使用版本:SQL Server 2000



在前一篇的文章中,我們協助各位自製一套簡易版的 SQL Server 2000 營運監控(operation monitor)系統(在本文將其簡稱為『SOM 系統』);她能夠協助資料庫管理人員在第一時間得知系統的運行狀況,並且自動處理與解除特定的問題。
在本期中,我們將繼續介紹 SOM 系統所提供的相關功能、觀念說明等等的主題。


歡迎進入 Microsoft SQL Server 2000 資料庫的世界裡,此系統不但提供完整的資料庫功能與資料分析能力(包含有:整合的分析服務Analysis Services、資料採擷 Data Mining),更完整支援 XML、強化系統管理和效能調整等工具,以及在各種電子商務等應用程式上卓越的擴充性和可靠性,讓 Microsoft SQL Server 2000 成為企業級資料庫解決方案的最佳選擇。






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





文章的檔案名稱:20050117_自製SQL Server 2000 營運監控系統(2).7z

新感動:SQL Server 2005(4) 管理工具篇之二

本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2004/12/13

使用版本:SQL Server 2005



在前一期中的文章中,我們討論了『SQL Server Management Studio』工具的使用方法,這個全新的工具是結合了原本的 Enterprise Manager、Query Analyzer 與 Analysis Manager 等等為大成的工具。

在本期中將接著介紹一個全新的管理工具:『SQL Computer Manager』與特別強化其功能的 osql 公用程式,在 SQL Server 2005 中,現以更名為『sqlcmd』命令提示公用程式。






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





文章的檔案名稱:20041213_新感動:SQL Server 2005(4)_管理工具篇之二.7z

自製SQL Server 2000 營運監控系統(1)


本文是發表於:
DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

日期:2005/01/03

使用版本:SQL Server 2000



怎麼辦?不管您是資料庫管理師,還是兼任資料庫管理師,都將會面臨以下的問題。

1. 『資料庫掛了,但每次都是前端使用者氣急敗壞地,打電話罵人時,MIS 人員才知道。』
2. 『我連不上 ERP 系統或進銷存系統,是不是資料庫有問題?』
3. 『SQL Server 怎麼這麼慢,是因為太多人在使用?還是因為鎖定(Lock)所造成的?』
4. 『交易記錄檔又爆了,不是都有定期執行備份?』
5. 『磁碟空間都被 SQL Server 的資料庫用完了。』
6. 『SQL Server 已經發生嚴重的事件,但是資料庫管理師都不知道。』

為了這樣的需求,筆者計畫藉由本文來協助各位自製一套簡易版的 SQL Server 2000 營運監控(operation monitor)系統,本文將其簡稱為『SOM
系統』。






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





文章的檔案名稱:20050103_自製SQL Server 2000 營運監控系統(1).7z

範例程式碼的檔案名稱:20050103_自製SQL Server 2000 營運監控系統(1)_Code.7z