什么是SQL Server 分布式事務(wù)以及包含了什么?
以下的文章主要介紹的是SQL Server 分布式事務(wù)的概念,以及對SQL Server 分布式事務(wù)所包括的項(xiàng)目描述,我們大家都知道SQL Server 數(shù)據(jù)庫的分布式事務(wù)主要是涉及來自兩個(gè)或多個(gè)源的資源的事務(wù)。
Microsoft® SQL Server™ 2000 支持分布式事務(wù),使用戶得以創(chuàng)建事務(wù)來更新多個(gè) SQL Server 數(shù)據(jù)庫和其它數(shù)據(jù)源。
分布式事務(wù)包括:
資源管理器
控制分布式事務(wù)所涉及的每個(gè)資源的軟件稱為資源管理器。SQL Server 分布式事務(wù)由各個(gè)資源管理器內(nèi)的本地事務(wù)組成。每個(gè)資源管理器必須能夠與分布式事務(wù)內(nèi)的所有其它資源管理器相協(xié)調(diào),以提交或回滾自己的本地事務(wù)。SQL Server 可以作為分布式事務(wù)內(nèi)的資源管理器工作,并遵從用于分布式事務(wù)處理的 X/Open XA 規(guī)范。
事務(wù)管理器
提交或回滾分布式事務(wù)由稱為事務(wù)管理器的軟件組件控制。事務(wù)管理器與每個(gè)資源管理器相協(xié)調(diào),確保一起提交或回滾所有組成分布式事務(wù)的本地事務(wù)。Microsoft 分布式事務(wù)處理協(xié)調(diào)器 (MS DTC) 服務(wù)如事務(wù)管理器一樣工作。MS DTC 遵從用于分布式事務(wù)處理的 X/Open XA 規(guī)范。
兩階段提交 (2PC)
需要進(jìn)行特殊的提交處理,以防止在管理跨越多個(gè)資源管理器的事務(wù)時(shí)出現(xiàn)問題。當(dāng)刷新日志緩沖區(qū)使其可用時(shí),提交大事務(wù)可能需要相對較長的時(shí)間。提交進(jìn)程本身還可能遇到錯(cuò)誤,需要強(qiáng)行回滾。
如果事務(wù)管理器只是請求每個(gè)資源管理器提交,則可能從一些資源管理器返回成功狀態(tài),然后從某個(gè)資源管理器得到錯(cuò)誤信息。這會導(dǎo)致沖突,因?yàn)樗蠸QL Server 分布式事務(wù)都應(yīng)回滾,而部分事務(wù)已提交。兩階段提交通過將提交分成兩相可以解決此問題:
準(zhǔn)備
事務(wù)管理器給每個(gè)資源管理器發(fā)送一個(gè)準(zhǔn)備提交的請求。然后,每個(gè)資源管理器執(zhí)行完成提交進(jìn)程所需的所有大量占用資源的操作,如刷新所有日志緩沖區(qū)。資源管理器只保留維護(hù)事務(wù)完整性所需的最少的鎖,然后給事務(wù)管理器返回成功狀態(tài)。
提交
如果所有資源管理對發(fā)給它們的準(zhǔn)備請求返回成功狀態(tài),事務(wù)管理器將給每個(gè)資源管理器發(fā)送提交命令。然后,每個(gè)資源管理器快速將事務(wù)記錄為已完成,并釋放上次控制的資源。如果有任何資源管理器對準(zhǔn)備請求返回錯(cuò)誤信息,事務(wù)管理器將給每個(gè)資源管理器發(fā)送回滾命令。
有幾種方法可以使應(yīng)用程序在分布式事務(wù)內(nèi)包括 SQL Server 2000:
如果應(yīng)用程序有本地事務(wù)并且發(fā)出分布式查詢,本地事務(wù)將升級到分布式事務(wù)。
發(fā)出 BEGIN DISTRIBUTED TRANSACTION 語句。
如果應(yīng)用程序有本地事務(wù)并且將 REMOTE_PROC_TRANSACTIONS 選項(xiàng)設(shè)置為>
使用用于 SQL Server 的 OLE DB 提供程序或 SQL Server ODBC 驅(qū)動(dòng)程序的應(yīng)用程序,可以使用 OLE DB 方法或 ODBC 函數(shù)讓 SQL Server 連接聯(lián)接由應(yīng)用程序啟動(dòng)的SQL Server 分布式事務(wù)。
SQL server對全文目錄執(zhí)行調(diào)查和清除任務(wù)敬業(yè)的IT人 2008-2-27 22:25:00 在本示例中,將執(zhí)行典型的調(diào)查和清除任務(wù)。假設(shè)您已連接到 pubs 數(shù)據(jù)庫,全文服務(wù)已經(jīng)啟動(dòng),并且正在處理虛構(gòu)的 writers 表和 books 表。
1.通過執(zhí)行下列存儲過程,以獲取一份已鏈接到 pubs 數(shù)據(jù)庫的所有全文目錄的列表:
- sp_help_fulltext_catalogs
因?yàn)?pubs 數(shù)據(jù)庫是當(dāng)前數(shù)據(jù)庫,該存儲過程將為鏈接到 pubs 數(shù)據(jù)庫的所有全文目錄返回下列元數(shù)據(jù):
全文目錄的名稱和整數(shù)標(biāo)識符
全文目錄根目錄
全文目錄填充狀態(tài)
鏈接到此全文目錄的表的數(shù)目
與上述存儲過程稍有不同的另一個(gè)存儲過程(在其中指定了全文目錄的名稱參數(shù))可以為單個(gè)全文目錄返回這方面的信息。
2.執(zhí)行下列存儲過程,以獲取一份已為全文處理而啟用的數(shù)據(jù)庫中所有表的列表:
- sp_help_fulltext_tables
此存儲過程為每個(gè)表返回下列元數(shù)據(jù):
由兩部分組成的表名
用作表的全文鍵的列的整數(shù)標(biāo)識符
用于對全文鍵列施加***約束的索引的名稱
表的全文狀態(tài)
表的全文目錄名
支持與此存儲過程稍有不同的其它兩種存儲過程。如果指定了 fulltext_catalog_name 參數(shù),將為與該全文目錄鏈接的所有表返回這方面的信息。如果同時(shí)指定了 catalog_name 參數(shù)和 table_name 參數(shù),或者僅指定了 table_name 參數(shù),則為該表返回這些信息。
3.執(zhí)行下列存儲過程,以獲取一份已為全文處理而啟用的數(shù)據(jù)庫中所有表的列表:
- sp_help_fulltext_columns
此存儲過程將為每個(gè)列返回下列元數(shù)據(jù):
列中由兩部分組成的表名
列的名稱和整數(shù)標(biāo)識符
與此存儲過程稍有不同的一種存儲過程(在其中指定了表名參數(shù))可以為單個(gè)表返回這方面的信息。
經(jīng)過編譯的列表會指出一些問題。除 mytable 表外不再有任何表使用 mycatalog 全文目錄,而 mytable 表不再有任何可被查詢的全文列。
4.執(zhí)行下列存儲過程,以取消將 mytable 表注冊為用于全文處理:
- sp_fulltext_table 'MyTable', 'drop'
這將除去該表有關(guān)全文索引的元數(shù)據(jù)。直至下一次完全填充或除去全文目錄之前,現(xiàn)有的全文索引將保持原樣。但它也保持為不使用狀態(tài)。有關(guān)更多信息,請參見 sp_fulltext_table。
5.通過執(zhí)行下列存儲過程,從文件系統(tǒng)中除去 mycatalog 全文目錄并從系統(tǒng)表中除去其元數(shù)據(jù):
- sp_fulltext_catalog 'MyCatalogue', 'drop'
必須完成步驟 4 才能除去全文目錄,因?yàn)楸仨毟缕湮谋灸夸浀脑獢?shù)據(jù)才能刪除所有全文索引。
在文件系統(tǒng)中至少存在一個(gè)不再有相應(yīng)的 SQL Server 元數(shù)據(jù)的全文目錄。這種現(xiàn)象的原因通常是因?yàn)閯h除了某個(gè)數(shù)據(jù)庫。
6.通過執(zhí)行下列存儲過程,從文件系統(tǒng)中刪除所有在 SQL Server 中不再有元數(shù)據(jù)的全文目錄:
- sp_fulltext_service 'Clean_Up'
MixedUpCtlg 全文目錄的結(jié)構(gòu)與當(dāng)前在 SQL Server 中為它記錄的元數(shù)據(jù)不匹配。當(dāng)全文目錄正在被除去,或者數(shù)據(jù)庫正在被除去并且 Microsoft 搜索服務(wù)不在運(yùn)行時(shí),就可能發(fā)生這種情況。除去操作會更改與全文目錄相關(guān)的元數(shù)據(jù),但無法完成該操作,因?yàn)?Microsoft 搜索服務(wù)沒有運(yùn)行。
這將導(dǎo)致 SQL Server 中的全文元數(shù)據(jù)與文件系統(tǒng)中相關(guān)的物理全文目錄之間不一致。通過喚醒調(diào)用 sp_fulltext_service 上的清除操作可以糾正這種不一致。(Microsoft 搜索服務(wù)必須正在運(yùn)行。)
7.執(zhí)行下列存儲過程,以重建(但不重新填充)MixedUpCtlg 全文目錄:
- sp_fulltext_catalog 'MixedUpCtlg', 'Rebuild'
帶有 ENABLE 選項(xiàng)的 sp_fulltext_database 存儲過程可以用于重建所有已知的全文目錄。
8.執(zhí)行下列存儲過程,以啟動(dòng)對 MixedUpCtlg 全文目錄的完全填充:
- sp_fulltext_catalog 'MixedUpCtlg', 'start_full'
上述的相關(guān)內(nèi)容就是對SQL Server 分布式事務(wù)的概念的描述,希望會給你帶來一些幫助在此方面。
【編輯推薦】