日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TabelDiff实用工具

發布時間:2025/5/22 编程问答 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TabelDiff实用工具 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. tablediff是什么?

tablediff 實用工具用于比較兩個非收斂的表中的數據,它對于排除復制拓撲中的非收斂故障非常有用。 后來發現SSIS中的Lookup控件同樣可以實現對表的比較,而且不限于tabel column一致的情況;具體實現可以參照另外一篇博文:http://zalman.blog.51cto.com/5251664/1396468

2. tablediff用哪些用法?

1) . 在充當復制發布服務器的 Microsoft SQL Server 實例中的源表與充當復制訂閱服務器的一個或多個 SQL Server 實例中的目標表之間進行逐行比較。
2) . 通過只比較行數和架構可以執行快速比較。
3) . 執行列級比較。
4) . 生成 Transact-SQL 腳本,用以修復目標服務器中的差異,以使源表和目標表實現收斂。
5) . 將結果記錄到輸出文件或目標數據庫的表中。

3. tablediff ?語法

tablediff [ -? ] | {-sourceserver source_server_name[\instance_name]-sourcedatabase source_database -sourcetable source_table_name [ -sourceschema source_schema_name ][ -sourcepassword source_password ][ -sourceuser source_login ][ -sourcelocked ]-destinationserver destination_server_name[\instance_name]-destinationdatabase subscription_database -destinationtable destination_table [ -destinationschema destination_schema_name ][ -destinationpassword destination_password ][ -destinationuser destination_login ][ -destinationlocked ][ -b large_object_bytes ] [ -bf number_of_statements ] [ -c ] [ -dt ] [ -et table_name ] [ -f [ file_name ] ] [ -o output_file_name ] [ -q ] [ -rc number_of_retries ] [ -ri retry_interval ] [ -strict ][ -t connection_timeouts ] }

參數說明:[ -? ]  返回支持參數的列表。-sourceserver source_server_name[\instance_name] 源服務器的名稱。 指定 SQL Server 默認實例的 source_server_name。指定 SQL Server 命名實例的 source_server_name\instance_name。-sourcedatabase source_database 源數據庫的名稱。-sourcetable source_table_name 正在檢查的源表的名稱。-sourceschema source_schema_name ?源表的架構所有者。 默認情況下,表所有者假定為 dbo。-sourcepassword source_password ? ?使用 SQL Server 身份驗證連接到源服務器時所使用的登錄帳戶的密碼。
安全說明

可能的話,請在運行時提供安全憑據。 如果必須在腳本文件中存儲憑據,則應保護文件以防止未經授權的訪問。

-sourceuser source_login ?使用 SQL Server 身份驗證連接到源服務器時所使用的登錄帳戶。 如果未提供 source_login,則連接到源服務器時使用 Windows 身份驗證。請盡可能使用 Windows 身份驗證。-sourcelocked ?在使用 TABLOCK 和 HOLDLOCK 表提示的比較過程中鎖定源表。-destinationserver destination_server_name[\instance_name] ?目標服務器的名稱。 指定 SQL Server 默認實例的 destination_server_name。指定 SQL Server 命名實例的 destination_server_name\instance_name。-destinationdatabase subscription_database ?目標數據庫的名稱。-destinationtable destination_table ?目標表的名稱。-destinationschema destination_schema_name 目標表的架構所有者。 默認情況下,表所有者假定為 dbo。-destinationpassword destination_password ?使用 SQL Server 身份驗證連接到目標服務器時所使用的登錄帳戶的密碼。
安全說明

可能的話,請在運行時提供安全憑據。 如果必須在腳本文件中存儲憑據,則應保護文件以防止未經授權的訪問。

-destinationuser destination_login ?使用 SQL Server 身份驗證連接到目標服務器時所使用的登錄帳戶。 如果未提供 destination_login,則連接到該服務器時使用 Windows 身份驗證。請盡可能使用 Windows 身份驗證。-destinationlocked ?在使用 TABLOCK 和 HOLDLOCK 表提示的比較過程中鎖定目標表。-b large_object_bytes 大型對象數據類型列中要比較的字節數,這些數據類型包括:text、ntext、p_w_picpath、varchar(max)、nvarchar(max) 和 varbinary(max)。 large_object_bytes 默認為列的大小。任何大于 large_object_bytes 的數據將不進行比較。-bf number_of_statements ?使用 -f 選項時要寫入到當前 Transact-SQL 腳本文件中的 Transact-SQL 語句數。 當 Transact-SQL 語句數超過 number_of_statements 時,將創建一個新的 Transact-SQL 腳本文件。-c   比較列級差異。-dt ? 刪除 table_name 指定的結果表(如果該表已經存在)。-et table_name  指定要創建的結果表的名稱。 如果該表已經存在,則必須使用 -DT,否則操作將失敗。-f [ file_name ]  生成 Transact-SQL 腳本,以使目標服務器中的表與源服務器中的表實現收斂。 (可選)可以指定生成的 Transact-SQL 腳本文件的名稱和路徑。如果未指定 file_name,則會在運行實用工具的目錄中生成 Transact-SQL 腳本文件。-o output_file_name  輸出文件的完整名稱和路徑。-q   通過只比較行數和架構可以執行快速比較。-rc number_of_retries  實用工具重試失敗操作的次數。-ri retry_interval   兩次重試之間的等待間隔(秒)。-strict  對源架構和目標架構進行嚴格比較。-t connection_timeouts  設置與源服務器和目標服務器連接時的連接超時時間(秒)。

4. tablediff 注意事項
tablediff 默認存放路徑(SQL SERVER 2008) : C:\Program Files\Microsoft SQL Server\100\COM
tablediff 實用工具不能用于非SQL SERVE服務器
若要比較表,您必須要有比較表對象的 SELECT ALL 權限

5. tablediff 使用舉例

創建測試環境:--SERVER :HOUYAJUNuse TESTgocreatetable person(id intidentity(1,1),name varchar(50) default('guoqiang'),[address]varchar(100) default('anhui hefei'),infro varchar(100))goinsertinto person(infro)select'test1'unionselect'test2'unionselect'test3'goselect*from TEST.dbo.person with(nolock)-- SERVER: HOUYAJUN\JHIDCDBS005use RepTestgocreatetable person(id intidentity(1,1),name varchar(50) default('guoqiang'),[address]varchar(100) default('anhui hefei'),infro varchar(100))goaltertable RepTest.dbo.person add t1 intinsertinto person(infro)select'test1'unionselect'test2'unionselect'test3'go2select*from TEST.dbo.person with(nolock)

參數 -c : 比較列差異

a.兩個表結構完全相同且數據相同

b. 我們來在HOUYAJUN\JHIDCSDBS005上面的表加10行數據

insertinto RepTest.dbo.personselect't_04', 't_05' ,'t_06'go10

再執行上面同樣的命令可以看到以下不同:

在此處我們可以看到我對B表修改的列的主鍵,我們可以根據這些可對表進行操作。在下面會講述如此對這些數據不一致進行生動生成腳本

c. 如果我們再對表結構進行修改

altertable RepTest.dbo.person add te01 int

再執行上述語句可以看到以下情況:

d. 在此處我們可以看到不同,但不能看到具體的不同,我們再來把剛才多余的數據進行刪除看看有什么

deletefrom RepTest.dbo.person where id in (4 ,5 ,6 ,7 ,8 ,9 ,10,11 ,12,13)

可以看到和上面一樣的錯誤,但是沒有出現錯誤到底是什么不同哦。

參數 -q : 通過只比較行數和架構可以執行較快速比較

和上面-c的基本是一樣。我們再來把多出的一列刪除掉,插入2條記錄看一下。

altertable reptest.dbo.person dropcolumn te01
go
insertinto RepTest.dbo.personselect't_04', 't_05' ,'t_06'go2

現在應該是表結構一樣,數據多了2個

可以看到這個是把2個表的數據行寫出來了,一個為3,另外一個為5,沒有指定那些不同,但是可以到出2個表是不一樣的。

參數 –f: 生成T-SQL腳本,以使目標服務器上的表與源服務器上的表實現收斂

參數 –o: 輸出文件的完整名稱和路徑。可以輸出日志信息。

在這里我們沒有看到錯誤信息了,因為錯誤信息已經寫在了log里面,而persondiff則為對應的SQL修改語句。

log 信息為:

Table[test].[dbo].[person]on houyajun andTable[reptest].[dbo].[person]on houyajun\jhidcdbs005 have 2 differences.Fix SQL written to d:persondiff.sql.Err ? ?id ? ?ColDest. Only14 ? ?Dest. Only15 ? ?The requested operation took 0.154 seconds.

persondiff.sql 的信息為:

-- Host: houyajun\jhidcdbs005-- Database: [reptest]-- Table: [dbo].[person]SETIDENTITY_INSERT[dbo].[person]ONDELETEFROM[dbo].[person]WHERE[id]=14DELETEFROM[dbo].[person]WHERE[id]=15SETIDENTITY_INSERT[dbo].[person]OFF


附一個查詢,可以直接粘在dos下,然后修改一下對應的參數:

DECLARE@sourceserver sysnameDECLARE@sourcedatabase sysnameDECLARE@sourceschema sysnameDECLARE@sourcetablenvarchar(1000)DECLARE@destinationserver sysnameDECLARE@destinationdatabase sysnameDECLARE@destinationschema sysnameDECLARE@destinationtablenvarchar(1000)select@sourceserver='HOUYAJUN' ,@sourcedatabase='TEST',@sourceschema='dbo',@sourcetable='REPET',@destinationserver='HOUYAJUN\SS005',@destinationdatabase='TEST',@destinationschema='dbo',@destinationtable='REPET'SELECT'tablediff -sourceserver '+@sourceserver+' -sourcedatabase '+@sourcedatabase+' -sourceschema '+@sourceschema+' -sourcetable '+@sourcetable+' -destinationserver '+@destinationserver+' -destinationdatabase '+@destinationdatabase+


摘自:http://www.cnblogs.com/zerocc/p/3233277.html


轉載于:https://blog.51cto.com/zalman/1396465

總結

以上是生活随笔為你收集整理的TabelDiff实用工具的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。