新聞中心
SQL數(shù)據(jù)庫(kù)追蹤(SQL Tracing)是一項(xiàng)數(shù)據(jù)庫(kù)性能調(diào)整的關(guān)鍵技術(shù),它可以幫助管理員和開(kāi)發(fā)人員跟蹤和診斷業(yè)務(wù)系統(tǒng)中的數(shù)據(jù)庫(kù)操作,找到慢查詢(xún)和瓶頸導(dǎo)致的性能問(wèn)題并進(jìn)行優(yōu)化。本文將介紹SQL數(shù)據(jù)庫(kù)追蹤的使用方法和技巧,并分享一些經(jīng)驗(yàn)和案例。

創(chuàng)新互聯(lián)主營(yíng)如皋網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都App制作,如皋h5微信小程序搭建,如皋網(wǎng)站營(yíng)銷(xiāo)推廣歡迎如皋等地區(qū)企業(yè)咨詢(xún)
一、SQL數(shù)據(jù)庫(kù)追蹤的概念和原理
SQL數(shù)據(jù)庫(kù)追蹤是一種監(jiān)控和記錄數(shù)據(jù)庫(kù)操作的技術(shù),在執(zhí)行SQL語(yǔ)句之前和之后,可以記錄數(shù)據(jù)庫(kù)操作的執(zhí)行計(jì)劃、統(tǒng)計(jì)信息、時(shí)間戳、參數(shù)值等信息,以便進(jìn)行分析和比對(duì)。SQL數(shù)據(jù)庫(kù)追蹤可以分為兩種方式:服務(wù)器端跟蹤和客戶(hù)端跟蹤。
服務(wù)器端跟蹤:在數(shù)據(jù)庫(kù)服務(wù)器上啟用SQL數(shù)據(jù)庫(kù)追蹤,通過(guò)設(shè)置SQL跟蹤選項(xiàng)和參數(shù),記錄整個(gè)數(shù)據(jù)庫(kù)連接或者指定的SQL語(yǔ)句的執(zhí)行過(guò)程和結(jié)果。這種方式需要對(duì)數(shù)據(jù)庫(kù)或者操作系統(tǒng)的配置文件進(jìn)行修改,需要管理員或DBA進(jìn)行操作,對(duì)服務(wù)器內(nèi)存和CPU資源有一定的消耗。
客戶(hù)端跟蹤:在客戶(hù)端應(yīng)用程序上啟用SQL數(shù)據(jù)庫(kù)追蹤,通過(guò)API和驅(qū)動(dòng)程序,監(jiān)控和記錄應(yīng)用程序和數(shù)據(jù)庫(kù)之間的SQL通信和交互過(guò)程。這種方式不需要修改數(shù)據(jù)庫(kù)服務(wù)器的配置,只需要在客戶(hù)端的應(yīng)用程序中添加相應(yīng)的函數(shù)或調(diào)用API即可。
二、SQL數(shù)據(jù)庫(kù)追蹤的使用方法和步驟
SQL數(shù)據(jù)庫(kù)追蹤的使用方法和步驟根據(jù)不同的數(shù)據(jù)庫(kù)產(chǎn)品和版本略有差別,下面以O(shè)racle數(shù)據(jù)庫(kù)為例,介紹其SQL數(shù)據(jù)庫(kù)追蹤的基本步驟和操作。
1、啟用SQL數(shù)據(jù)庫(kù)追蹤:在Oracle數(shù)據(jù)庫(kù)服務(wù)器上,可以通過(guò)修改spfile或者pfile參數(shù)文件,設(shè)置以下參數(shù)來(lái)啟用SQL數(shù)據(jù)庫(kù)追蹤:
SQL_TRACE=true #啟用SQL追蹤
TIMED_STATISTICS=true #記錄統(tǒng)計(jì)信息
STATISTICS_LEVEL=all #記錄詳細(xì)統(tǒng)計(jì)信息
修改完成后,需要重啟數(shù)據(jù)庫(kù)實(shí)例才能生效。
2、創(chuàng)建SQL追蹤會(huì)話:在需要監(jiān)控和記錄的會(huì)話中,可以通過(guò)以下語(yǔ)句來(lái)創(chuàng)建SQL追蹤會(huì)話:
ALTER SESSION SET SQL_TRACE=TRUE;
執(zhí)行該語(yǔ)句后,該會(huì)話的所有SQL語(yǔ)句的執(zhí)行過(guò)程都將被記錄下來(lái),包括執(zhí)行計(jì)劃、耗時(shí)、IO操作、鎖等信息。
3、獲取SQL追蹤文件:在SQL追蹤會(huì)話結(jié)束后,可以通過(guò)以下SQL語(yǔ)句來(lái)獲取SQL追蹤文件:
ALTER SESSION SET SQL_TRACE=FALSE; #結(jié)束SQL追蹤會(huì)話
SELECT VALUE FROM V$DIAG_INFO WHERE NAME=’Default Trace File’; # 獲取SQL追蹤文件路徑
通過(guò)上述步驟,可以獲取SQL追蹤文件,該文件可以通過(guò)SQL Trace Analyzer等工具進(jìn)行分析和演示,詳見(jiàn)下面一章。
三、 SQL數(shù)據(jù)庫(kù)追蹤的分析和優(yōu)化
SQL數(shù)據(jù)庫(kù)追蹤的分析和優(yōu)化是調(diào)整數(shù)據(jù)庫(kù)性能和提升應(yīng)用系統(tǒng)質(zhì)量的關(guān)鍵環(huán)節(jié),以下介紹一些SQL數(shù)據(jù)庫(kù)追蹤的分析和優(yōu)化方法:
1、使用SQL Trace Analyzer工具:SQL Trace Analyzer是一款Oracle官方的性能調(diào)整工具,可以自動(dòng)分析和演示SQL追蹤文件的性能指標(biāo)和執(zhí)行計(jì)劃,幫助DBA和管理員發(fā)現(xiàn)性能瓶頸和問(wèn)題,并提供優(yōu)化建議和解決方案。
2、分析SQL執(zhí)行計(jì)劃和表結(jié)構(gòu):SQL追蹤文件中記錄了SQL語(yǔ)句的完整執(zhí)行過(guò)程和執(zhí)行計(jì)劃,可以根據(jù)這些信息來(lái)分析SQL查詢(xún)的效率和復(fù)雜度,找到慢查詢(xún)和瓶頸所在。同時(shí),需要根據(jù)表結(jié)構(gòu)和索引設(shè)計(jì)來(lái)進(jìn)行優(yōu)化和調(diào)整,盡量減少全表掃描和不必要的IO操作。
3、優(yōu)化SQL查詢(xún)和參數(shù)設(shè)置:根據(jù)分析結(jié)果和實(shí)際需求,對(duì)SQL查詢(xún)和參數(shù)進(jìn)行優(yōu)化和調(diào)整,比如添加合適的索引、重構(gòu)SQL語(yǔ)句、改變連接方式等。同時(shí),需要根據(jù)實(shí)際情況來(lái)選擇SQL追蹤的方式和操作。
四、 SQL數(shù)據(jù)庫(kù)追蹤的注意事項(xiàng)和禁忌
SQL數(shù)據(jù)庫(kù)追蹤是一項(xiàng)非常有用的性能調(diào)整技術(shù),但是在使用過(guò)程中需要注意以下幾點(diǎn):
1、選擇適當(dāng)?shù)腟QL追蹤方式和操作:不同的數(shù)據(jù)庫(kù)產(chǎn)品和版本支持的SQL追蹤方式和操作不同,需要根據(jù)實(shí)際情況來(lái)選擇。同時(shí),需要考慮SQL追蹤對(duì)服務(wù)器內(nèi)存和CPU資源的消耗,盡量避免影響正常業(yè)務(wù)和系統(tǒng)運(yùn)行。
2、避免無(wú)限制啟用SQL追蹤:SQL追蹤會(huì)記錄所有SQL語(yǔ)句的執(zhí)行過(guò)程和結(jié)果,如果無(wú)限制啟用,會(huì)產(chǎn)生大量的SQL追蹤文件,占用大量存儲(chǔ)空間,同時(shí)也會(huì)影響數(shù)據(jù)庫(kù)的性能和穩(wěn)定性。因此,需要合理設(shè)置SQL追蹤選項(xiàng)和參數(shù),選擇需要追蹤的SQL語(yǔ)句和會(huì)話。
3、合理使用SQL Trace Analyzer工具:SQL Trace Analyzer作為一款專(zhuān)業(yè)的性能調(diào)整工具,可以自動(dòng)分析和演示SQL追蹤文件,提供有用的性能指標(biāo)和解決方案。但是需要注意,不是所有的問(wèn)題都可以通過(guò)SQL Trace Analyzer解決,需要結(jié)合實(shí)際情況和經(jīng)驗(yàn)來(lái)進(jìn)行判斷和優(yōu)化。
SQL數(shù)據(jù)庫(kù)追蹤是一項(xiàng)非常有用的數(shù)據(jù)庫(kù)性能調(diào)整技術(shù),可以幫助管理員和開(kāi)發(fā)人員及時(shí)發(fā)現(xiàn)和解決慢查詢(xún)和性能瓶頸的問(wèn)題,提升數(shù)據(jù)庫(kù)和應(yīng)用系統(tǒng)的性能和質(zhì)量。在使用SQL數(shù)據(jù)庫(kù)追蹤時(shí),需要了解其原理和使用方法,掌握分析和優(yōu)化技巧,同時(shí)也要注意一些注意事項(xiàng)和禁忌,以保證其有效性和安全性。
相關(guān)問(wèn)題拓展閱讀:
- 如何使用 SQL Server 變更跟蹤
如何使用 SQL Server 變更跟蹤
手機(jī) 臥低 軟件 誠(chéng)信 ,可靠,可先試用 只要激缺陵安裝上軟件后對(duì)方的一舉一動(dòng)都會(huì)在你的掌控扮啟之中 Q**9 3
手機(jī)監(jiān)聽(tīng)軟件具有以下功能,可以監(jiān)聽(tīng)通話錄音,通話記錄,短信攔截,環(huán)境監(jiān)聽(tīng),定位,換卡通知。你可以先試用再付明戚款。
如果服務(wù)器正在運(yùn)行 SQL Server 2023,則建議您使用 SQL Server 變更跟蹤。如果服務(wù)器運(yùn)行的是其他數(shù)據(jù)庫(kù),請(qǐng)參見(jiàn)如何使用自定義變更跟蹤系統(tǒng)。SQL Server 變更跟蹤概述本文檔中的許多示例都使用一組添加到基表中的列和觸發(fā)器來(lái)處理變更跟蹤,使用其他表來(lái)跟蹤刪除操作。有關(guān)更多信息,請(qǐng)參見(jiàn)跟蹤服務(wù)器數(shù)據(jù)庫(kù)中的變更。這種類(lèi)型的跟蹤對(duì)于非 SQL Server 2023 數(shù)據(jù)庫(kù)非常有用。但是,它還是具有以下缺點(diǎn):在服務(wù)器數(shù)據(jù)庫(kù)中要求架構(gòu)變更。架構(gòu)變更可能會(huì)影響虛蠢虛其他應(yīng)用程序,或者可能根本無(wú)法實(shí)現(xiàn)。對(duì)一行中執(zhí)行的每個(gè)變更都會(huì)激發(fā)觸發(fā)器。這會(huì)影響性能。用于維護(hù)正確的行版本和刪除的邏輯將變得復(fù)雜。如果某一服務(wù)器數(shù)據(jù)庫(kù)具有長(zhǎng)時(shí)間運(yùn)行的事務(wù),則除非這些事務(wù)得到正確處理,否則,在同步期間可能會(huì)失去數(shù)據(jù)變更。這可能導(dǎo)致數(shù)據(jù)不一致。 SQL Server 變更跟蹤可解決這些問(wèn)題,并提供一種簡(jiǎn)明的方法來(lái)跟蹤變更。當(dāng)對(duì)某一表啟用了變更跟蹤時(shí),SQL Server 數(shù)據(jù)庫(kù)引擎 將維護(hù)有關(guān)對(duì)表所做變更的信息。然后,應(yīng)用程序使用相應(yīng)變更跟蹤函數(shù)來(lái)確定哪些行發(fā)生了變更并獲取有關(guān)這些變更的信息。SQL Server 變更跟蹤的主要優(yōu)點(diǎn)差燃如下:對(duì)于使用 Sync Services 的脫機(jī)同步方案,您不必創(chuàng)建觸發(fā)器、時(shí)間戳列、其他附加列或附加表。在提交時(shí)跟蹤變更,而不是在發(fā)生 DML 操作時(shí)跟蹤。函數(shù)將返回對(duì)表所做的增量變更和版本信息。即使檔櫻存在重疊和未提交的事務(wù),這些函數(shù)也能提供可靠且易于使用的結(jié)果。對(duì)性能的影響非常小??梢宰詣?dòng)清除變更跟蹤數(shù)據(jù)。本主題的其余部分將演示如何在 Sync Services for ADO.NET 應(yīng)用程序中使用 SQL Server 變更跟蹤。有關(guān)變更跟蹤的更多信息,請(qǐng)參見(jiàn) SQL Server 2023 聯(lián)機(jī)叢書(shū)。將SQL Server 變更跟蹤與 Sync Services for ADO.NET 一起使用本節(jié)介紹如何啟用變更跟蹤,以及如何使用變更跟蹤查詢(xún)來(lái)確定要下載到客戶(hù)端的數(shù)據(jù)變更。本節(jié)中的信息介紹如何使用手動(dòng)創(chuàng)建的命令選擇來(lái)自服務(wù)器的變更。有關(guān)如何使用同步適配器生成器為您創(chuàng)建命令的信息,請(qǐng)參見(jiàn)入門(mén):客戶(hù)端與服務(wù)器同步。啟用SQL Server 變更跟蹤對(duì)服務(wù)器數(shù)據(jù)庫(kù)啟用變更跟蹤,然后對(duì)每個(gè)需要跟蹤的表啟用變更跟蹤。下面的代碼示例演示一個(gè) Sync Services 示例數(shù)據(jù)庫(kù)中的 Sales.Customer 表的架構(gòu)以及為該表啟用變更跟蹤所需的代碼。每個(gè)表都必須有一個(gè)主鍵。主鍵在所有節(jié)點(diǎn)上必須是唯一的,而且不得重復(fù)使用:即使刪除了某一行,也不得將該行的主鍵用于其他行。對(duì)于分布式環(huán)境,標(biāo)識(shí)列通常不是適宜的選擇。有關(guān)主鍵的更多信息,請(qǐng)參見(jiàn)為分布式環(huán)境選擇適宜的主鍵 (Sync Services)。通過(guò)運(yùn)行以下代碼指定的變更跟蹤選項(xiàng)包括保留跟蹤元數(shù)據(jù)的時(shí)間以及是否自動(dòng)清除這些元數(shù)據(jù)。有關(guān)跟蹤選項(xiàng)的更多信息,請(qǐng)參見(jiàn) SQL Server 2023 聯(lián)機(jī)叢書(shū)中的“變更跟蹤”、“ALTER DATABASE”和“ALTER TABLE”主題。 CREATE TABLE SyncSamplesDb_ChangeTracking.Sales.Customer( CustomerId uniqueidentifier NOT NULL PRIMARY KEY DEFAULT NEWID(), CustomerName nvarchar(100) NOT NULL, SalesPerson nvarchar(100) NOT NULL, CustomerType nvarchar(100) NOT NULL) ALTER DATABASE SyncSamplesDb_ChangeTracking SET ALLOW_SNAPSHOT_ISOLATION ON ALTER DATABASE SyncSamplesDb_ChangeTracking SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON) ALTER TABLE SyncSamplesDb_ChangeTracking.Sales.Customer ENABLE CHANGE_TRACKING 注意強(qiáng)烈建議您在查詢(xún)變更信息時(shí)使用快照事務(wù)。這有助于確保變更信息的一致性并避免出現(xiàn)與后臺(tái)清除任務(wù)相關(guān)的爭(zhēng)用情況。有關(guān)快照隔離的更多信息,請(qǐng)參見(jiàn) SQL Server 2023 聯(lián)機(jī)叢書(shū)中的“數(shù)據(jù)庫(kù)引擎中的隔離級(jí)別”。確定要下載到客戶(hù)端的數(shù)據(jù)變更啟用變更跟蹤后,Sync Services 應(yīng)用程序使用變更跟蹤函數(shù)和“定位點(diǎn)”來(lái)確定要下載的插入、更新和刪除。定位點(diǎn)僅僅是用來(lái)定義一組要同步的變更的一個(gè)時(shí)間點(diǎn)。請(qǐng)考慮以下查詢(xún):為SelectIncrementalInsertsCommand 屬性指定的查詢(xún)。以下查詢(xún)從服務(wù)器上的 Sales.Customer 表選擇要應(yīng)用于客戶(hù)端的增量插入: IF @sync_initialized = 0 SELECT Sales.Customer., , , FROM Sales.Customer LEFT OUTER JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ON CT. = Sales.Customer. ELSE BEGIN SELECT Sales.Customer., , , FROM Sales.Customer JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ON CT. = Sales.Customer. WHERE (CT.SYS_CHANGE_OPERATION = ‘I’ AND CT.SYS_CHANGE_CREATION_VERSION @sync_client_id_binary) ELSE BEGIN SELECT Sales.Customer., , , FROM Sales.Customer JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ON CT. = Sales.Customer. WHERE (CT.SYS_CHANGE_OPERATION = ‘I’ AND CT.SYS_CHANGE_CREATION_VERSION @sync_client_id_binary)); 此查詢(xún)類(lèi)似于前面用來(lái)跟蹤在服務(wù)器上所做插入操作的查詢(xún)。每個(gè) WHERE 子句中的附加語(yǔ)句可確保只下載那些不是由當(dāng)前進(jìn)行同步的客戶(hù)端所做的插入。Sync Services 還允許應(yīng)用程序通過(guò)在服務(wù)器上使用一個(gè)整數(shù)而不是 GUID 值來(lái)標(biāo)識(shí)客戶(hù)端。有關(guān)更多信息,請(qǐng)參見(jiàn)如何使用會(huì)話變量。若要跟蹤哪一客戶(hù)端進(jìn)行了在服務(wù)器上應(yīng)用的數(shù)據(jù)變更,請(qǐng)使用 WITH CHANGE_TRACKING_CONTEXT 子句。在執(zhí)行 INSERT、UPDATE 或 DELETE 語(yǔ)句前,將 CHANGE_TRACKING_CONTEXT 設(shè)置為 @sync_client_id 或@sync_client_id_binary 會(huì)話變量的值。此信息存儲(chǔ)在變更跟蹤表中,以便應(yīng)用程序可以跟蹤變更所處的上下文。對(duì)于 Sync Services 來(lái)說(shuō),這通常是客戶(hù)端 ID;但是,您可以存儲(chǔ)適合 varbinary(128) 列的任何值。 WITH CHANGE_TRACKING_CONTEXT (@sync_client_id_binary) INSERT INTO Sales.Customer (CustomerId, CustomerName, SalesPerson, CustomerType) VALUES (@CustomerId, @CustomerName, @SalesPerson, @CustomerType) SET @sync_row_count = @@rowcount 了解和運(yùn)行示例應(yīng)用程序本節(jié)包含配置和執(zhí)行同步所需的應(yīng)用程序代碼。只通過(guò)閱讀示例代碼,就可以學(xué)習(xí)到很多相關(guān)知識(shí)。但是,運(yùn)行示例并查看其運(yùn)行情況則更加直觀。在運(yùn)行代碼前,請(qǐng)確保安裝了以下產(chǎn)品: Sync Services 該應(yīng)用程序需要參考 Microsoft.Synchronization.Data.dll、Microsoft.Synchronization.dll、Microsoft.Synchronization.Data.Server.dll 和 Microsoft.Synchronization.Data.SqlServerCe.dll。 SQL Server 2023 示例代碼在連接字符串中使用 localhost。若要使用遠(yuǎn)程服務(wù)器,請(qǐng)將 localhost 變更為適當(dāng)?shù)姆?wù)器名稱(chēng)。Sync Services 示例數(shù)據(jù)庫(kù)。有關(guān)更多信息,請(qǐng)參見(jiàn)用于Sync Services 幫助主題的安裝腳本。如果您曾經(jīng)閱讀過(guò)用于客戶(hù)端與服務(wù)器同步的體系結(jié)構(gòu)和類(lèi)主題,應(yīng)該已經(jīng)對(duì)該應(yīng)用程序中使用的主要類(lèi)有所了解。該應(yīng)用程序由以下類(lèi)組成:SampleSyncAgent此類(lèi)派生自 SyncAgent。SampleServerSyncProvider。此類(lèi)派生自 DbServerSyncProvider 并包含 SyncAdapter 和一組查詢(xún)變更跟蹤表的命令。SampleClientSyncProvider此類(lèi)派生自 SqlCeClientSyncProvider 并包含 SyncTable。SampleStats此類(lèi)使用 SyncAgent 返回的統(tǒng)計(jì)信息。Program。此類(lèi)設(shè)置同步并調(diào)用 Utility 類(lèi)的方法。Utility. 此類(lèi)負(fù)責(zé)處理所有不與同步直接相關(guān)的功能,例如保存連接字符串信息以及更改服務(wù)器和客戶(hù)端數(shù)據(jù)庫(kù)等。有關(guān)更多信息,請(qǐng)參見(jiàn) 用于Sync Services 幫助主題的 Utility 類(lèi)。API 的要點(diǎn)在您查看完整代碼示例之前,建議您首先查看以下示例。這些示例闡釋在本應(yīng)用程序中使用的 API 的若干要點(diǎn)。所演示的所有示例代碼都包含在 SampleServerSyncProvider 類(lèi)中。除了在本節(jié)中演示的命令外,該完整代碼示例還包含可將插入應(yīng)用于服務(wù)器的命令以及選擇和應(yīng)用刪除的命令。之一個(gè)示例直接應(yīng)用于 DbServerSyncProvider 屬性SelectNewAnchorCommand。其他示例應(yīng)用于 Sales.Customer 表的SyncAdapter 對(duì)象。從服務(wù)器中檢索新的定位點(diǎn)值以下代碼示例指定從服務(wù)器中檢索新定位點(diǎn)值的命令。SyncSession 類(lèi)包含幾個(gè)可在同步命令中使用的字符串常量。SyncNewReceivedAnchor 是這些常量之一。此外,還可以在查詢(xún)中直接使用 @sync_new_received_anchor 文本。C#VB SqlCommand selectNewAnchorCommand = new SqlCommand(); string newAnchorVariable = “@” + SyncSession.SyncNewReceivedAnchor; selectNewAnchorCommand.CommandText = “SELECT ” + newAnchorVariable + ” = change_tracking_current_version()”; selectNewAnchorCommand.Parameters.Add(newAnchorVariable, SqlDbType.BigInt); selectNewAnchorCommand.Parameters.Direction = ParameterDirection.Output; selectNewAnchorCommand.Connection = serverConn; this.SelectNewAnchorCommand = selectNewAnchorCommand; 指定一條從服務(wù)器上選擇要應(yīng)用于客戶(hù)端的增量插入的命令下面的代碼示例指定一條從服務(wù)器上選擇要應(yīng)用于客戶(hù)端的增量插入的命令。用于增量變更的所有查詢(xún)都將檢查所需的變更是否已從變更跟蹤表中清除。此檢查從以下子句開(kāi)始,并且在已清除變更后將引發(fā)錯(cuò)誤:IF CHANGE_TRACKING_MIN_VALID_VERSION (object_id (@sync_table_name)) > @sync_last_received_anchorC#VB SqlCommand customerIncrInserts = new SqlCommand(); customerIncrInserts.CommandText = “IF @sync_initialized = 0 ” + “SELECT Sales.Customer., , , ” + “FROM Sales.Customer LEFT OUTER JOIN ” + “CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ” + “ON CT. = Sales.Customer. ” + “WHERE (CT.SYS_CHANGE_CONTEXT IS NULL OR CT.SYS_CHANGE_CONTEXT @sync_client_id_binary) ” + “ELSE ” + “BEGIN ” + “SELECT Sales.Customer., , , ” + “FROM Sales.Customer JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ” + “ON CT. = Sales.Customer. ” + “WHERE (CT.SYS_CHANGE_OPERATION = ‘I’ AND CT.SYS_CHANGE_CREATION_VERSION ” + ” @sync_client_id_binary)); ” + “IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(@sync_table_name)) ” + “> @sync_last_received_anchor ” + “RAISERROR (N’SQL Server Change Tracking has cleaned up tracking information for table ”%s”. ” + “To recover from this error, the client must reinitialize its local database and try again’ ” + “,16,3,@sync_table_name) ” + “END”; customerIncrInserts.Parameters.Add(“@” + SyncSession.SyncInitialized, SqlDbType.Int); customerIncrInserts.Parameters.Add(“@” + SyncSession.SyncLastReceivedAnchor, SqlDbType.BigInt); customerIncrInserts.Parameters.Add(“@” + SyncSession.SyncClientIdBinary, SqlDbType.Binary); customerIncrInserts.Parameters.Add(“@” + SyncSession.SyncNewReceivedAnchor, SqlDbType.BigInt); customerIncrInserts.Parameters.Add(“@” + SyncSession.SyncTableName, SqlDbType.NVarChar); customerIncrInserts.Connection = serverConn; customerSyncAdapter.SelectIncrementalInsertsCommand = customerIncrInserts; 指定一條從服務(wù)器上選擇要應(yīng)用于客戶(hù)端的增量更新的命令下面的代碼示例指定一條從服務(wù)器上選擇要應(yīng)用于客戶(hù)端的增量更新的命令。C#VB SqlCommand customerIncrUpdates = new SqlCommand(); customerIncrUpdates.CommandText = “IF @sync_initialized > 0 ” + “BEGIN ” + “SELECT Sales.Customer., , , ” + “FROM Sales.Customer JOIN ” + “CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ” + “ON CT. = Sales.Customer. ” + “WHERE (CT.SYS_CHANGE_OPERATION = ‘U’ AND CT.SYS_CHANGE_VERSION ” + ” @sync_client_id_binary)); ” + “IF CHANGE_TRACKING_MIN_VALID_VERSION(object_id(@sync_table_name)) ” + “> @sync_last_received_anchor ” + “RAISERROR (N’SQL Server Change Tracking has cleaned up tracking information for table ”%s”. ” + “To recover from this error, the client must reinitialize its local database and try again'” + “,16,3,@sync_table_name) ” + “END”; customerIncrUpdates.Parameters.Add(“@” + SyncSession.SyncInitialized, SqlDbType.Int); customerIncrUpdates.Parameters.Add(“@” + SyncSession.SyncLastReceivedAnchor, SqlDbType.BigInt); customerIncrUpdates.Parameters.Add(“@” + SyncSession.SyncNewReceivedAnchor, SqlDbType.BigInt); customerIncrUpdates.Parameters.Add(“@” + SyncSession.SyncClientIdBinary, SqlDbType.Binary); customerIncrUpdates.Parameters.Add(“@” + SyncSession.SyncTableName, SqlDbType.NVarChar); customerIncrUpdates.Connection = serverConn; customerSyncAdapter.SelectIncrementalUpdatesCommand = customerIncrUpdates; 指定一條將增量更新從客戶(hù)端應(yīng)用于服務(wù)器的命令在以下代碼示例中,UPDATE 語(yǔ)句更新基表,并返回受影響的行的計(jì)數(shù)。如果行計(jì)數(shù)為 0,則表示發(fā)生了錯(cuò)誤或沖突。有關(guān)更多信息,請(qǐng)參見(jiàn)如何處理數(shù)據(jù)沖突和錯(cuò)誤。C#VB SqlCommand customerUpdates = new SqlCommand(); customerUpdates.CommandText = “;WITH CHANGE_TRACKING_CONTEXT (@sync_client_id_binary) ” + “UPDATE Sales.Customer ” + “SET = @CustomerName, = @SalesPerson, = @CustomerType ” + “FROM Sales.Customer ” + “JOIN CHANGETABLE(VERSION Sales.Customer, (), (@CustomerId)) CT ” + “ON CT. = Sales.Customer. ” + “WHERE (@sync_force_write = 1 ” + “OR CT.SYS_CHANGE_VERSION IS NULL OR CT.SYS_CHANGE_VERSION @sync_last_received_anchor ” + “RAISERROR (N’SQL Server Change Tracking has cleaned up tracking information for table ”%s”. ” + “To recover from this error, the client must reinitialize its local database and try again'” + “,16,3,@sync_table_name)”; customerUpdates.Parameters.Add(“@” + SyncSession.SyncClientIdBinary, SqlDbType.Binary); customerUpdates.Parameters.Add(“@CustomerName”, SqlDbType.NVarChar); customerUpdates.Parameters.Add(“@SalesPerson”, SqlDbType.NVarChar); customerUpdates.Parameters.Add(“@CustomerType”, SqlDbType.NVarChar); customerUpdates.Parameters.Add(“@CustomerId”, SqlDbType.UniqueIdentifier); customerUpdates.Parameters.Add(“@” + SyncSession.SyncForceWrite, SqlDbType.Bit); customerUpdates.Parameters.Add(“@” + SyncSession.SyncLastReceivedAnchor, SqlDbType.BigInt); customerUpdates.Parameters.Add(“@” + SyncSession.SyncRowCount, SqlDbType.Int); customerUpdates.Parameters.Direction = ParameterDirection.Output; customerUpdates.Parameters.Add(“@” + SyncSession.SyncTableName, SqlDbType.NVarChar); customerUpdates.Connection = serverConn; customerSyncAdapter.UpdateCommand = customerUpdates; 選擇沖突行下面的命令從服務(wù)器數(shù)據(jù)庫(kù)中選擇沖突行(如果這些行仍存在于基表中)。C#VB SqlCommand customerUpdateConflicts = new SqlCommand(); customerUpdateConflicts.CommandText = “SELECT Sales.Customer., , , , ” + “CT.SYS_CHANGE_CONTEXT, CT.SYS_CHANGE_VERSION ” + “FROM Sales.Customer JOIN CHANGETABLE(VERSION Sales.Customer, (), (@CustomerId)) CT ” + “ON CT. = Sales.Customer.”; customerUpdateConflicts.Parameters.Add(“@CustomerId”, SqlDbType.UniqueIdentifier); customerUpdateConflicts.Connection = serverConn; customerSyncAdapter.SelectConflictUpdatedRowsCommand = customerUpdateConflicts; 下面的命令從服務(wù)器數(shù)據(jù)庫(kù)中選擇沖突行(如果這些行已從基表中刪除)。C#VB SqlCommand customerDeleteConflicts = new SqlCommand(); customerDeleteConflicts.CommandText = “SELECT CT., ” + “CT.SYS_CHANGE_CONTEXT, CT.SYS_CHANGE_VERSION ” + “FROM CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ” + “WHERE (CT. = @CustomerId AND CT.SYS_CHANGE_OPERATION = ‘D’)”; customerDeleteConflicts.Parameters.Add(“@” + SyncSession.SyncLastReceivedAnchor, SqlDbType.BigInt); customerDeleteConflicts.Parameters.Add(“@CustomerId”, SqlDbType.UniqueIdentifier); customerDeleteConflicts.Connection = serverConn; customerSyncAdapter.SelectConflictDeletedRowsCommand = customerDeleteConflicts; 有關(guān)如何處理數(shù)據(jù)沖突的更多信息,請(qǐng)參見(jiàn)如何處理數(shù)據(jù)沖突和錯(cuò)誤。完整的代碼示例下面的完整代碼示例包括了上面介紹的代碼示例以及用于執(zhí)行同步的其他代碼。C#VBusing System; using System.IO; using System.Text; using System.Data; using System.Data.SqlC關(guān)于怎么用sql數(shù)據(jù)庫(kù)追蹤的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專(zhuān)業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
分享名稱(chēng):SQL數(shù)據(jù)庫(kù)追蹤使用方法簡(jiǎn)述(怎么用sql數(shù)據(jù)庫(kù)追蹤)
URL分享:http://www.dlmjj.cn/article/dpdhdji.html


咨詢(xún)
建站咨詢(xún)
