用TableDiff產生SQL Server同步腳本_Mssql數據庫教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:微軟SQL Server 2008 的新壓縮特性
      關于SQL Server壓縮的故事,最早是從SQL Server 2005開始的,在企業版和開發版中增加了一種叫做vardecimal的新存儲格式,這個表級的選項會影響到decimal和numeric字段。當對值的精度要求低于字

      TableDiff是一個控制臺,它可以在SQL Server的表之間進行數據比較。另外,因為它是用SQL Server打包的,所以如果你想在不同的數據庫環境下檢查查找表的話,你就不需要另外購買其他工具。

      在不同的數據庫環境中,DBA經常不得不在查找表中尋找它們的不同(例如:開發、質量保證和生產等不同的環境下)。這些查找表中的數據必須適應于所有的環境,這樣才能確保測試的準確。

      在市場上有一些非常好的工具可以進行這些比較,也能執行很多其它功能。但是現在你不需要去購買它們了,因為SQL Server已經自帶了這種工具,那就是TableDiff,它能為你完成這些功能。

      TableDiff使你可以很輕松地在表中進行數據比較,同時它也可以會為你創建腳本來同步程序環境。另外,作為一個能使查找表在測試環境和產品環境之間同步的優秀工具,TableDiff對于數據在產品服務器和復制服務器之間的同步也同樣是非常有用的,這樣,當發生復制問題的時候,它就能體現出優勢了。

      示例

      TabelDiff是一個控制臺應用軟件,所以,你需要通過命令提示符、批處理文件或者通過使用xp_cmdshell的SQL Server來調用它。在這個例子中,我將在同一個服務器上的兩個數據庫之間搭建一個小的環境,然后比較兩個表中的數據。在這里我是通過一個批處理文件來調用TableDiff。

      Listing A中的腳本創建了兩個數據庫,并在每個數據庫中創建了一個SourceTable表。然后將數據分別插入到每個環境中的SourceTable表里面,這時候,插入到兩個表中的數據是明顯不同的。(就我的SQL Server 2005環境而言,TableDiff在這個目錄下:C:Program FilesMicrosoft SQL ServerCOM。文件的位置對你指定安裝是非常重要的,因為你調用批處理文件進行創建的時候需要知道它的確切位置。

      批處理文件

      在這個例子中,我將調用TableDiff utility,同時帶上了一些必要的參數,對DatabaseA和DatabaseB兩個數據庫中各自的SourceTable表的數據進行比較。Listing B中的腳本帶著參數通過源服務器(SourceServer)、源數據庫( SourceDatabase)、源表 SourceTable、目標服務器( DestinationServer)、目標數據庫( DestinationDatabase)和目標表(DestinationTable)到達TableDiff utility。對于每一個站點來說,服務器名和表名都是相同的,因為我是在同一個數據庫服務器的兩個不同的數據庫中比較使用的同一個名字的表。我通過的最后目的地是當地,同步腳本放置在那里。我將這個腳本存放在C:/根目錄下,名字為diffs.txt。

      一旦我執行了這個批處理文件,在Listing C中的文本信息就會被放到C:diffs.txt這個文件里面。這個TSQL腳本能同步運行兩個數據庫之間的表。

      使用簡單

      TableDiff utility使用非常簡單,配置也很方便,因為它是用SQL Server打包的,所以不需要購買任何其他附加的工具來同步不同環境下的表。由于它使用非常方便,也很容易獲得它,所以如果有必要,我們就能使用它來開發一些解決方案自動創建腳本,以便同步不同的環境。

      Tim Chapman是一位SQL Server數據庫管理員,他現在在Louisville, KY的一家銀行工作,他具有7年以上的IT經驗,同時也獲得了微軟SQL Server 2000和SQL Server 2005認證。

      列表A

      以下為引用的內容:
      use master
      Go
      IF DB_ID('DatabaseA') IS NOT NULL DROP DATABASE DatabaseA
      GO
      IF DB_ID('DatabaseB') IS NOT NULL DROP DATABASE DatabaseB
      GO
      CREATE DATABASE DatabaseA
      GO
      CREATE DATABASE DatabaseB
      GO
      USE DatabaseA
      GO
      CREATE TABLE SourceTable
      ( IDCol INT IDENTITY(1,1), Field1 SMALLINT, Field2 SMALLINT, Field3 SMALLINT, Field4 SMALLINT
      )
      GO
      USE DatabaseB
      GO
      CREATE TABLE SourceTable
      ( IDCol INT IDENTITY(1,1), Field1 SMALLINT, Field2 SMALLINT, Field3 SMALLINT, Field4 SMALLINT
      )
      GO
      USE DatabaseA
      GO
      INSERT INTO SourceTable
      (Field1, Field2, Field3, Field4)
      SELECT 1, 1, 1, 2
      UNION
      SELECT 1, 1, 2, 2
      UNION
      SELECT 1, 3, 2, 2
      UNION
      SELECT 1, 3, 2, 2
      UNION
      SELECT 4, 3, 2, 2
      GO
      USE DatabaseB
      GO
      INSERT INTO SourceTable
      (Field1, Field2, Field3, Field4)
      SELECT 1, 1, 1, 2
      UNION
      SELECT 1, 3, 2, 1
      UNION
      SELECT 1, 3, 2, 2
      UNION
      SELECT 1, 3, 2, 2
      UNION
      SELECT 5, 3, 2, 2
      UNION
      SELECT 5, 4, 3, 2
      GO

      列表B

      以下為引用的內容:

      cd Program FilesMicrosoft SQL ServerCOMTableDiff -sourceserver "DatabaseServer" -sourcedatabase "DatabaseA" -sourcetable "SourceTable" -destinationserver "DatabaseServer" -destinationdatabase "DatabaseB" -destinationtable "SourceTable" -f "C:diffs.txt"
      PAUSE

      分享:3個步驟結束網站惡夢-SQL注入隱患!
      許多網站程序在編寫時,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。 SQL注入是什么? 許多網站程序在編寫時,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱

      來源:模板無憂//所屬分類:Mssql數據庫教程/更新時間:2008-08-22
      相關Mssql數據庫教程