『壹』 sql 事件探測器怎麼去跟蹤一條數據呢
就是你在知道該執行那一條數據之前,讓SQL 事件探測器開始跟蹤,等執行後,取那裡查看,具體操作時可以在執行sql的語句前下一個斷點,然後等執行到斷點時,開始監聽,然後繼續執行,如果執行的sql語句較多,在執行你要檢查的語句的後面也加一個斷點,這樣事件探測器就接受了一條語句,便於你查看。
『貳』 如何使用 SQL Server 變更跟蹤
如果伺服器正在運行 SQL Server 2008,則建議您使用 SQL Server 變更跟蹤。如果伺服器運行的是其他資料庫,請參見如何使用自定義變更跟蹤系統。SQL Server 變更跟蹤概述本文檔中的許多示例都使用一組添加到基表中的列和觸發器來處理變更跟蹤,使用其他表來跟蹤刪除操作。有關更多信息,請參見跟蹤伺服器資料庫中的變更。這種類型的跟蹤對於非 SQL Server 2008 資料庫非常有用。但是,它還是具有以下缺點:在伺服器資料庫中要求架構變更。架構變更可能會影響虛蠢虛其他應用程序,或者可能根本無法實現。對一行中執行的每個變更都會激發觸發器。這會影響性能。用於維護正確的行版本和刪除的邏輯將變得復雜。如果某一伺服器資料庫具有長時間運行的事務,則除非這些事務得到正確處理,否則,在同步期間可能會失去數據變更。這可能導致數據不一致。 SQL Server 變更跟蹤可解決這些問題,並提供一種簡明的方法來跟蹤變更。當對某一表啟用了變更跟蹤時,SQL Server 資料庫引擎 將維護有關對表所做變更的信息。然後,應用程序使用相應變更跟蹤函數來確定哪些行發生了變更並獲取有關這些變更的信息。SQL Server 變更跟蹤的主要優點差燃如下:對於使用 Sync Services 的離線同步方案,您不必創建觸發器、時間戳列、其他附加列或附加表。在提交時跟蹤變更,而不是在發生 DML 操作時跟蹤。函數將返回對表所做的增量變更和版本信息。即使檔櫻存在重疊和未提交的事務,這些函數也能提供可靠且易於使用的結果。對性能的影響非常小。可以自動清除變更跟蹤數據。本主題的其餘部分將演示如何在 Sync Services for ADO.NET 應用程序中使用 SQL Server 變更跟蹤。有關變更跟蹤的更多信息,請參見 SQL Server 2008 聯機叢書。將SQL Server 變更跟蹤與 Sync Services for ADO.NET 一起使用本節介紹如何啟用變更跟蹤,以及如何使用變更跟蹤查詢來確定要下載到客戶端的數據變更。本節中的信息介紹如何使用手動創建的命令選擇來自伺服器的變更。有關如何使用同步適配器生成器為您創建命令的信息,請參見入門:客戶端與伺服器同步。啟用SQL Server 變更跟蹤對伺服器資料庫啟用變更跟蹤,然後對每個需要跟蹤的表啟用變更跟蹤。下面的代碼示例演示一個 Sync Services 示例資料庫中的 Sales.Customer 表的架構以及為該表啟用變更跟蹤所需的代碼。每個表都必須有一個主鍵。主鍵在所有節點上必須是唯一的,而且不得重復使用:即使刪除了某一行,也不得將該行的主鍵用於其他行。對於分布式環境,標識列通常不是適宜的選擇。有關主鍵的更多信息,請參見為分布式環境選擇適宜的主鍵 (Sync Services)。通過運行以下代碼指定的變更跟蹤選項包括保留跟蹤元數據的時間以及是否自動清除這些元數據。有關跟蹤選項的更多信息,請參見 SQL Server 2008 聯機叢書中的「變更跟蹤」、「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 注意強烈建議您在查詢變更信息時使用快照事務。這有助於確保變更信息的一致性並避免出現與後台清除任務相關的爭用情況。有關快照隔離的更多信息,請參見 SQL Server 2008 聯機叢書中的「資料庫引擎中的隔離級別」。確定要下載到客戶端的數據變更啟用變更跟蹤後,Sync Services 應用程序使用變更跟蹤函數和「定位點」來確定要下載的插入、更新和刪除。定位點僅僅是用來定義一組要同步的變更的一個時間點。請考慮以下查詢:為 屬性指定的查詢。以下查詢從伺服器上的 Sales.Customer 表選擇要應用於客戶端的增量插入: IF @sync_initialized = 0 SELECT Sales.Customer.[CustomerId], [CustomerName], [SalesPerson], [CustomerType] FROM Sales.Customer LEFT OUTER JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ON CT.[CustomerId] = Sales.Customer.[CustomerId] ELSE BEGIN SELECT Sales.Customer.[CustomerId], [CustomerName], [SalesPerson], [CustomerType] FROM Sales.Customer JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ON CT.[CustomerId] = Sales.Customer.[CustomerId] WHERE (CT.SYS_CHANGE_OPERATION = 'I' AND CT.SYS_CHANGE_CREATION_VERSION <= @sync_new_received_anchor) END 如果這是某個客戶端的第一個同步會話 (@sync_initialized = 0),則會從 Sales.Customer 基表直接選擇架構和所有行。在以後的同步期間,通過執行基表與其變更跟蹤表的內部聯接來選擇新插入的行。變更跟蹤表中的元數據由 CHANGETABLE() 函數公開。該函數將基表名稱和前一同步操作所存儲的變更跟蹤版本作為參數。SYS_CHANGE_OPERATION 列定義存儲在變更跟蹤錶行中的變更的類型。注意查詢還應檢查所需的所有變更是否都已從跟蹤表中清除。有關示例,請參見本主題後面的「指定一條從伺服器上選擇要應用於客戶端的增量插入的命令」。為SelectNewAnchorCommand 屬性指定的查詢。此查詢檢索一個時間點值。以下查詢通過使用 change_tracking_current_version() 函數從伺服器中檢索新的定位點值。這一內置的 SQL Server 函數返回一個版本整數,它與通過變更跟蹤進行跟蹤的上次提交的事務相關聯。 SELECT @sync_new_received_anchor = change_tracking_current_version() 該整數值存儲在客戶端資料庫中,並且由同步變更的命令使用。在每次同步會話期間,將使用新的定位點值以及來自先前同步會話的上一個定位點值:這意味著將對在這兩個作為上下限的定位點值之間做出的變更集進行同步。在某些情況下,應用程序只要求每個客戶端上的一部分數據。可以在 WHERE 子句中包括附加的條件,以便篩選數據。有關更多信息,請參見如何篩選行和列。「基於非鍵列的篩選器」一節中包括與使用 SQL Server 變更跟蹤進行篩選有關的重要信息。在同步過程中執行的查詢如果是首次同步 Sales.Customer 表,則會執行以下過程:執行新的定位點命令。該命令返回一個整數值,如 372。此值存儲在客戶端資料庫中。該表從未進行過同步。因此,客戶端資料庫中原本沒有存儲任何從先前同步操作所得到的定位點值。在這種情況下,Sync Services 使用值 0。Sync Services 執行的查詢如下所示: exec sp_executesql N'IF @sync_initialized = 0 SELECT Sales.Customer.[CustomerId], [CustomerName], [SalesPerson], [CustomerType] FROM Sales.Customer LEFT OUTER JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ON CT.[CustomerId] = Sales.Customer.[CustomerId] ELSE BEGIN SELECT Sales.Customer.[CustomerId], [CustomerName], [SalesPerson], [CustomerType] FROM Sales.Customer JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ON CT.[CustomerId] = Sales.Customer.[CustomerId] WHERE (CT.SYS_CHANGE_OPERATION = ''I'' AND CT.SYS_CHANGE_CREATION_VERSION <= @sync_new_received_anchor) END', N'@sync_initialized int, @sync_last_received_anchor bigint, @sync_new_received_anchor bigint', @sync_initialized=0, @sync_last_received_anchor=0, @sync_new_received_anchor=372 在第二次同步會話期間,執行新的定位點命令。自上一會話以來已經插入了一些行。因此,該命令返回值 375。該表以前已進行過同步。因此,Sync Services 可檢索先前同步操作所得到的客戶端資料庫中存儲的 372 的定位點值。執行的查詢如下所示。該查詢只從表中下載在兩個定位點值之間插入的行。 exec sp_executesql N'IF @sync_initialized = 0 SELECT Sales.Customer.[CustomerId], [CustomerName], [SalesPerson], [CustomerType] FROM Sales.Customer LEFT OUTER JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ON CT.[CustomerId] = Sales.Customer.[CustomerId] ELSE BEGIN SELECT Sales.Customer.[CustomerId], [CustomerName], [SalesPerson], [CustomerType] FROM Sales.Customer JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ON CT.[CustomerId] = Sales.Customer.[CustomerId] WHERE (CT.SYS_CHANGE_OPERATION = ''I'' AND CT.SYS_CHANGE_CREATION_VERSION <= @sync_new_received_anchor) END', N'@sync_initialized int, @sync_last_received_anchor bigint, @sync_new_received_anchor bigint', @sync_initialized=1, @sync_last_received_anchor=372, @sync_new_received_anchor=375 有關更新和刪除命令的示例,請參見本主題後面的完整代碼示例。標識執行數據變更的客戶端之所以要標識執行數據變更的客戶端,主要有兩個原因:在僅進行上載的同步和雙向同步中為沖突檢測和沖突解決提供支持。如果伺服器和某個客戶端(或多個客戶端)可以變更某個給定行,您可能希望標識出變更的執行者。此信息有助於您編寫代碼,例如,編寫確定哪一個變更具有更高的優先順序的代碼。如果沒有此信息,將保留對該行的最近一次變更。在雙向同步期間,防止將變更回送給客戶端。 Sync Services 首先將變更上載到伺服器,然後將變更下載到客戶端。如果不跟蹤執行變更的客戶端的標識,該變更將上載到伺服器,然後在同一個同步會話中下載回到該客戶端。某些情況下,回送變更是必需的,但是在另一些情況下並非如此。變更跟蹤提供一個機制,可以將應用程序數據與變更行時的變更信息一起存儲。這些應用程序數據可用於標識正在進行變更的客戶端。然後,在您查詢變更時可返回進行了變更的客戶端的這一標識。SYS_CHANGE_CONTEXT 列可與 ClientId 屬性一起使用,以確定每個插入、更新或刪除操作是由哪個客戶端執行的。在任何錶使用除快照同步以外的方法進行第一次同步時,Sync Services 會在客戶端上存儲一個 GUID 值以標識該客戶端。然後將此 ID 傳遞給 DbServerSyncProvider,以便能夠由每個 SyncAdapter 對象的命令使用。可以通過 ClientId 屬性以及 @sync_client_id 和@sync_client_id_binary 會話變數獲得該 ID 值。請考慮以下 Transact-SQL 查詢: IF @sync_initialized = 0 SELECT Sales.Customer.[CustomerId], [CustomerName], [SalesPerson], [CustomerType] FROM Sales.Customer LEFT OUTER JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ON CT.[CustomerId] = Sales.Customer.[CustomerId] WHERE (CT.SYS_CHANGE_CONTEXT IS NULL OR CT.SYS_CHANGE_CONTEXT <> @sync_client_id_binary) ELSE BEGIN SELECT Sales.Customer.[CustomerId], [CustomerName], [SalesPerson], [CustomerType] FROM Sales.Customer JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT ON CT.[CustomerId] = Sales.Customer.[CustomerId] WHERE (CT.SYS_CHANGE_OPERATION = 'I' AND CT.SYS_CHANGE_CREATION_VERSION <= @sync_new_received_anchor AND (CT.SYS_CHANGE_CONTEXT IS NULL OR CT.SYS_CHANGE_CONTEXT <> @sync_client_id_binary)); 此查詢類似於前面用來跟蹤在伺服器上所做插入操作的查詢。每個 WHERE 子句中的附加語句可確保只下載那些不是由當前進行同步的客戶端所做的插入。Sync Services 還允許應用程序通過在伺服器上使用一個整數而不是 GUID 值來標識客戶端。有關更多信息,請參見如何使用會話變數。若要跟蹤哪一客戶端進行了在伺服器上應用的數據變更,請使用 WITH CHANGE_TRACKING_CONTEXT 子句。在執行 INSERT、UPDATE 或 DELETE 語句前,將 CHANGE_TRACKING_CONTEXT 設置為 @sync_client_id 或@sync_client_id_binary 會話變數的值。此信息存儲在變更跟蹤表中,以便應用程序可以跟蹤變更所處的上下文。對於 Sync Services 來說,這通常是客戶端 ID;但是,您可以存儲適合 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 了解和運行示例應用程序本節包含配置和執行同步所需的應用程序代碼。只通過閱讀示例代碼,就可以學習到很多相關知識。但是,運行示例並查看其運行情況則更加直觀。在運行代碼前,請確保安裝了以下產品: Sync Services 該應用程序需要參考 Microsoft.Synchronization.Data.dll、Microsoft.Synchronization.dll、Microsoft.Synchronization.Data.Server.dll 和 Microsoft.Synchronization.Data.SqlServerCe.dll。 SQL Server 2008 示例代碼在連接字元串中使用 localhost。若要使用遠程伺服器,請將 localhost 變更為適當的伺服器名稱。Sync Services 示例資料庫。有關更多信息,請參見用於Sync Services 幫助主題的安裝腳本。如果您曾經閱讀過用於客戶端與伺服器同步的體系結構和類主題,應該已經對該應用程序中使用的主要類有所了解。該應用程序由以下類組成:SampleSyncAgent此類派生自 SyncAgent。SampleServerSyncProvider。此類派生自 DbServerSyncProvider 並包含 SyncAdapter 和一組查詢變更跟蹤表的命令。SampleClientSyncProvider此類派生自 SqlCeClientSyncProvider 並包含 SyncTable。SampleStats此類使用 SyncAgent 返回的統計信息。Program。此類設置同步並調用 Utility 類的方法。Utility. 此類負責處理所有不與同步直接相關的功能,例如保存連接字元串信息以及更改伺服器和客戶端資料庫等。有關更多信息,請參見 用於Sync Services 幫助主題的 Utility 類。API 的要點在您查看完整代碼示例之前,建議您首先查看以下示例。這些示例闡釋在本應用程序中使用的 API 的若干要點。所演示的所有示例代碼都包含在 SampleServerSyncProvider 類中。除了在本節中演示的命令外,該完整代碼示例還包含可將插入應用於伺服器的命令以及選擇和應用刪除的命令。第一個示例直接應用於 DbServerSyncProvider 屬性SelectNewAnchorCommand。其他示例應用於 Sales.Customer 表的SyncAdapter 對象。從伺服器中檢索新的定位點值以下代碼示例指定從伺服器中檢索新定位點值的命令。SyncSession 類包含幾個可在同步命令中使用的字元串常量。SyncNewReceivedAnchor 是這些常量之一。此外,還可以在查詢中直接使用 @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[newAnchorVariable].Direction = ParameterDirection.Output; selectNewAnchorCommand.Connection = serverConn; this.SelectNewAnchorCommand = selectNewAnchorCommand; 指定一條從伺服器上選擇要應用於客戶端的增量插入的命令下面的代碼示例指定一條從伺服器上選擇要應用於客戶端的增量插入的命令。用於增量變更的所有查詢都將檢查所需的變更是否已從變更跟蹤表中清除。此檢查從以下子句開始,並且在已清除變更後將引發錯誤: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.[CustomerId], [CustomerName], [SalesPerson], [CustomerType] " + "FROM Sales.Customer LEFT OUTER JOIN " + "CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT " + "ON CT.[CustomerId] = Sales.Customer.[CustomerId] " + "WHERE (CT.SYS_CHANGE_CONTEXT IS NULL OR CT.SYS_CHANGE_CONTEXT <> @sync_client_id_binary) " + "ELSE " + "BEGIN " + "SELECT Sales.Customer.[CustomerId], [CustomerName], [SalesPerson], [CustomerType] " + "FROM Sales.Customer JOIN CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT " + "ON CT.[CustomerId] = Sales.Customer.[CustomerId] " + "WHERE (CT.SYS_CHANGE_OPERATION = 'I' AND CT.SYS_CHANGE_CREATION_VERSION " + "<= @sync_new_received_anchor " + "AND (CT.SYS_CHANGE_CONTEXT IS NULL OR CT.SYS_CHANGE_CONTEXT <> @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. = customerIncrInserts; 指定一條從伺服器上選擇要應用於客戶端的增量更新的命令下面的代碼示例指定一條從伺服器上選擇要應用於客戶端的增量更新的命令。C#VB SqlCommand customerIncrUpdates = new SqlCommand(); customerIncrUpdates.CommandText = "IF @sync_initialized > 0 " + "BEGIN " + "SELECT Sales.Customer.[CustomerId], [CustomerName], [SalesPerson], [CustomerType] " + "FROM Sales.Customer JOIN " + "CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT " + "ON CT.[CustomerId] = Sales.Customer.[CustomerId] " + "WHERE (CT.SYS_CHANGE_OPERATION = 'U' AND CT.SYS_CHANGE_VERSION " + "<= @sync_new_received_anchor " + "AND (CT.SYS_CHANGE_CONTEXT IS NULL OR CT.SYS_CHANGE_CONTEXT <> @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. = customerIncrUpdates; 指定一條將增量更新從客戶端應用於伺服器的命令在以下代碼示例中,UPDATE 語句更新基表,並返回受影響的行的計數。如果行計數為 0,則表示發生了錯誤或沖突。有關更多信息,請參見如何處理數據沖突和錯誤。C#VB SqlCommand customerUpdates = new SqlCommand(); customerUpdates.CommandText = ";WITH CHANGE_TRACKING_CONTEXT (@sync_client_id_binary) " + "UPDATE Sales.Customer " + "SET [CustomerName] = @CustomerName, [SalesPerson] = @SalesPerson, [CustomerType] = @CustomerType " + "FROM Sales.Customer " + "JOIN CHANGETABLE(VERSION Sales.Customer, ([CustomerId]), (@CustomerId)) CT " + "ON CT.[CustomerId] = Sales.Customer.[CustomerId] " + "WHERE (@sync_force_write = 1 " + "OR CT.SYS_CHANGE_VERSION IS NULL OR CT.SYS_CHANGE_VERSION <= @sync_last_received_anchor " + "OR (CT.SYS_CHANGE_CONTEXT IS NOT NULL AND CT.SYS_CHANGE_CONTEXT = @sync_client_id_binary)) " + "SET @sync_row_count = @@rowcount; " + "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)"; 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["@" + SyncSession.SyncRowCount].Direction = ParameterDirection.Output; customerUpdates.Parameters.Add("@" + SyncSession.SyncTableName, SqlDbType.NVarChar); customerUpdates.Connection = serverConn; customerSyncAdapter.UpdateCommand = customerUpdates; 選擇沖突行下面的命令從伺服器資料庫中選擇沖突行(如果這些行仍存在於基表中)。C#VB SqlCommand customerUpdateConflicts = new SqlCommand(); customerUpdateConflicts.CommandText = "SELECT Sales.Customer.[CustomerId], [CustomerName], [SalesPerson], [CustomerType], " + "CT.SYS_CHANGE_CONTEXT, CT.SYS_CHANGE_VERSION " + "FROM Sales.Customer JOIN CHANGETABLE(VERSION Sales.Customer, ([CustomerId]), (@CustomerId)) CT " + "ON CT.[CustomerId] = Sales.Customer.[CustomerId]"; customerUpdateConflicts.Parameters.Add("@CustomerId", SqlDbType.UniqueIdentifier); customerUpdateConflicts.Connection = serverConn; customerSyncAdapter. = customerUpdateConflicts; 下面的命令從伺服器資料庫中選擇沖突行(如果這些行已從基表中刪除)。C#VB SqlCommand customerDeleteConflicts = new SqlCommand(); customerDeleteConflicts.CommandText = "SELECT CT.[CustomerId], " + "CT.SYS_CHANGE_CONTEXT, CT.SYS_CHANGE_VERSION " + "FROM CHANGETABLE(CHANGES Sales.Customer, @sync_last_received_anchor) CT " + "WHERE (CT.[CustomerId] = @CustomerId AND CT.SYS_CHANGE_OPERATION = 'D')"; customerDeleteConflicts.Parameters.Add("@" + SyncSession.SyncLastReceivedAnchor, SqlDbType.BigInt); customerDeleteConflicts.Parameters.Add("@CustomerId", SqlDbType.UniqueIdentifier); customerDeleteConflicts.Connection = serverConn; customerSyncAdapter. = customerDeleteConflicts; 有關如何處理數據沖突的更多信息,請參見如何處理數據沖突和錯誤。完整的代碼示例下面的完整代碼示例包括了上面介紹的代碼示例以及用於執行同步的其他代碼。C#VBusing System; using System.IO; using System.Text; using System.Data; using System.Data.SqlC
『叄』 SQL2008如何跟蹤某台電腦的執行語句
1、選擇要操作的資料庫。
『肆』 SQL 跟蹤問題在 SQL 跟蹤中,如何判斷SQL語句執行是否錯誤。
在你的sql語句後可以print一些標識信息,比如 insert into ***(***,***,...) values(***,***,...) print 'OK' 這樣的話,如果執行失敗,OK是不會數出來的
『伍』 如何跟蹤SQL SERVER 正在執行的語句
打開Microsoft SQL Server Management Studio , 在菜單欄有個工具(Tool), 裡面有個事跡族件追蹤(SQL Server Profiler)。
打開sql server profiler, 連接資料庫。彈出Trace Properties(跟蹤屬性), 選擇事件(Events Selection),右下角選擇Show All Columns(選擇所茄凱有列), 點擊列過濾顫州喚(Columns Filters)按鈕。在裡面就有HostName 設置電腦的主機名.
『陸』 如何追蹤應用程序正在執行的sql
---跟蹤
開始--程序--MS SQLSERVER
--事件探察器(SQL Profiler)
--文件
--新建--跟蹤...
--設置要跟蹤的伺服器的信息(連接伺服器)--確定
--設置跟蹤的項目...
--然後數據蘆敬棗庫的調用情況就會顯示出來
在跟蹤項目設置中,如果不熟悉的話,一般用默認設置稿磨
篩選項目有幾個可以注意一下:
1.DatabaseName 同於你要檢測的資料庫名
2.Error 同於錯誤,如果經常出現某個編號的錯誤,則針對此錯陪拆誤號
3.Seccess 同於0,失敗,1,成功,如果是排錯,就過濾掉成功的處理
『柒』 模擬器調用sql怎麼跟蹤
1.先打開菜單欄【工具】–【SQL Server Profiler】 2.彈出如下登錄界面,選擇對應伺服器名稱,進行身份驗證 3.連接成功後,彈出如下界面,選【事件選擇】頁簽,勾選第4、5個選項,並勾選【顯示所有列】 勾選【顯示所有列】後,界面如下圖 4.然後點【1.列篩選器】彈出【編輯篩選器界面】,在該界面中找到【2.DatabaseName】後,在右邊小框展開【類似於】可以看到一個空白的可輸入的格子【3.】 在這個格子里粘貼上你想要跟蹤的數唯枝據庫名稱,(eg:復制資料庫名稱 Mimo_study) 粘貼到【類似於】下的空格里,如下圖 (表示你接下來想跟蹤的內容是在這個資料庫實例,而不是其他資料庫實例) 然後點擊【確定】 5.點擊【運行】 彈出如下界面 此時你就可以進行跟蹤,在這個界面會記錄你的所有操作 6.當想結束跟蹤時,點擊菜單欄上的停止圖標即可 7.若想看SQL語譽中句執行,可將跟蹤內容導出,【文件】–【導出】–【提取SQL Server 事件】–【提取 Transact-SQL 事件】 導出SQL文件後,打開文件並運行它,看到報錯的地方,如下圖 雙擊紅字部分,雙擊雙擊,會跳到發生錯誤的位置,再進指虛敏一步分析問題就好了
『捌』 BS的oracle程序運行的SQL語句怎麼跟蹤需要詳細的方法和步驟
需要建立一張表來記錄
explain plan SET statement_id='name' FOR (這里是你要調試的語句 )
SELECT
A.OPERATION,
OPTIONS,
OBJECT_NAME,
OBJECT_TYPE,
ID,
PARENT_ID
FROM
PLAN_TABLE A
斗閉WHERE
STATEMENT_ID='name'
ORDER BY
Id;
ID 'name'是一個標識,你可以自己取,欄位有很多個,以下是各個欄位的解釋(可能格式不對,你可以復制後看):
欄位名 欄位類型 含義
STATEMENT_ID VARCHAR2(30) explain PLAN 語句中所指定的最優STATEMENT_ID 參數值, 如果在EXPLAN PLAN語句中沒有使用SET STATEMENT_ID,那麼此值會被設為NULL。
REMARKS VARCHAR2(80) 與被解釋規劃的各步驟相關聯的注釋最長可達80 位元組
OPERATION VARCHAR2(30) 各步驟所執行內部操作的名稱在某條語句所產生的第一行中該列的可能取值如下DELETE STATEMENT INSERT STATEMENT SELECT STATEMENT UPDATE STATEMENT
OPTIONS VARCHAR2(30) 對OPERATION 列中所描述操作的變種
OBJECT_NODE VARCHAR2(128) 用於訪問對象的資料庫鏈接database link 的名稱對於使用並行執行的本地查詢該列能夠描述操作中輸出的次序
OBJECT_OWNER VARCHAR2(30) 對於包含有表或索引的架構schema 給出其所有告銷晌者的名稱
OBJECT_NAME VARCHAR2(30) 表或索引的名稱
OBJECT_INSTANCE INTEGER 根據對象出現在原始original 語句中的次序所給出的相應次序編號就原始的語句文本而論其處理順序為自左至右自外向內景象擴張view
OBJECT_TYPE VARCHAR2(30) 用於提供對象描述性信襪鋒息的修飾符例如索引的NON-UNIQUE
OPTIMIZER VARCHAR2(255) 當前優化程序的模式
ID INTEGER 分配給執行規劃各步驟的編號
PARENT_ID INTEGER 對ID 步驟的輸出進行操作的下一個執行步驟的ID
POSITION INTEGER 對於具有相同PARENT_ID 的步驟其相應的處理次序
COST INTEGER 根據優化程序的基於開銷的方法所估計出的操作開銷值對於使用基於規則方法的語句該列為空該列值沒有特定的測量單位它只是一個用於比較執行規劃開銷大小的權重值
CARDINALITY INTEGER 根據基於開銷的方法對操作所訪問行數的估計值
BYTES INTEGER 根據基於開銷的方法對操作所訪問位元組的估計
=============================================
你按照我說的做,後面用
SELECT
*
FROM
PLAN_TABLE A
WHERE
STATEMENT_ID='name'
結果已經很清楚了,全部滿足你的要求。
各列的具體含義上面已經給出。
『玖』 請教:如何SQL Server用事件探查器是只跟蹤某個表某個欄位的操作。
創建跟蹤的步驟:
1. 首先從「開始」菜單指向「所有程序」,打開SQL Server Management Studio。
2. 從「工具」菜單選擇「事件探查器」。
3. 當「事件探查器」主界面打開後,從「文件」菜單選擇「新跟蹤」。
4. 這時候,SQL Server事件探查器會提示你連接到你想要探查跟蹤的 SQL Server實例。提供連接所需的詳細信息,點擊「連接」按鈕繼續。
5. 在「跟蹤名稱」文本框中輸入你想要為這個跟蹤創建的跟蹤名稱。
6. 從「模板名稱」下拉菜單為你創建的跟蹤選擇一個模板。(下文的提示會一些常用跟蹤模板的用途的信息)。
7. 選擇「保存到文件」選項,將你創建的跟蹤保存到本地硬碟的某個文件中。點擊復選框後,在彈出的「存儲為」窗口輸入一個文件名及其位置。
8. 點擊「事件」選項卡,查看你在創建的跟蹤計劃里想要跟蹤監測的事件。根據你選擇的模板,系統會自動選擇一些事件,不過你可以修改這些默認的選項設置。通過點擊「顯示全部事件」和「顯示全部列」復選框來查看其他的選項。
9. 點擊「運行」按鈕開始進行跟蹤。SQL Server就會開始創建該跟蹤,並在保存的文件中顯示跟蹤的詳細信息。運行完畢後,從「文件」菜單選擇「停止跟蹤」。
提示:
1. 跟蹤模板選項所提供「標准」(Standard)模板用於捕獲關於 SQL Server連接、存儲過程和Transact-SQL語句的大量信息。
2. 「優化」(Tuning)模板用於捕獲可以被資料庫引擎優化顧問用來優化SQL Server性能的信息。
3. 「TSQL_Replay」模板用來捕獲將來重新運行這個跟蹤所需的所有Transact-SQL語句的詳細信息。
『拾』 如何使用SQL Server 跟蹤資料庫變化
1、找到SQL Server Profiler並登錄
位置:單擊開始--程序--Microsoft SQL Server--性能工具--SQL Server Profiler
詳解:
需要過濾具體的列名值,則選擇對應的列,在右邊樹形框錄入具體的值,並必須選擇排除不包含值的行哈。
各個選項的具體含義,如下:
TextDate 依賴於跟蹤中捕獲的事件類的文本值;
ApplicationName 創建 SQL Server 連接的客戶端應用程序的名稱。此列由該應用程序傳遞的值填充,而不是由所顯示的程序名填充的;
NTusername Windows 用戶名。
LoginName用戶的登錄名(SQL Server 安全登錄或 Windows 登錄憑據,格式為「域用戶名」)
CPU 事件使用的 CPU 時間(毫秒)。
Reads 由伺服器代表事件讀取邏輯磁碟的次數。
Writes 由伺服器代表事件寫入物理磁碟的次數。
Duration 事件佔用的時間。盡管伺服器以微秒計算持續時間,SQL Server Profiler 卻能夠以毫秒為單位顯示該值,具體情況取決於「工具」>「選項」對話框中的設置
ClientProcessID 調用 SQL Server 的應用程序的進程 ID。
SPID SQL Server 為客戶端的相關進程分配的伺服器進程 ID。
StratTime 事件(如果可用)的啟動時間。
EndTime事件結束的時間。對指示事件開始的事件類(例如 SQL:BatchStarting 或 SP:Starting)將不填充此列。
BinaryData 依賴於跟蹤中捕獲的事件類的二進制值。
然後,單擊運行即可!