zoukankan      html  css  js  c++  java
  • tablediff 实用工具/数据同步

    --------------------

    tablediff 实用工具



    tablediff 实用工具用于比较两个非收敛的表中的数据,它对于排除复制拓扑中的非收敛故障非常有用。可以从命令提示符或在批处理文件中使用该实用工具执行以下任务:

    在充当复制发布服务器的 Microsoft SQL Server 实例中的源表与充当复制订阅服务器的一个或多个 SQL Server 实例上的目标表之间进行逐行比较。


    通过只比较行数和架构可以执行快速比较。


    同时比较多个目标服务器上的目标表。


    执行列级比较。


    生成 Transact-SQL 脚本,用以修复目标服务器上的差异,以使源表和目标表实现收敛。


    将结果记录到输出文件或目标数据库的表中。


    语法

    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 ]
    [ , ... n ]
    }
    [ -b large_object_bytes ]
    [ -c ]
    [ -dt ]
    [ -et table_name ]
    [ -f ]
    [ -o output_file_name ]
    [ -q ]
    [ -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 身份验证。

    -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 身份验证。

    -destinationlocked
    在使用 TABLOCK 和 HOLDLOCK 表提示的比较过程中锁定目标表。

    -b large_object_bytes
    要比较的大型对象数据类型列的字节数,包括:text、ntext、varchar(max)、nvarchar(max) 和 varbinary(max)。默认值是 1000 字节,最大值是 8000 字节。任何大于 large_object_bytes 的数据将不进行比较。

    -c
    比较列级差异。

    -dt
    删除 table_name 指定的结果表(如果该表已经存在)。

    -et table_name
    指定要创建的结果表的名称。如果该表已经存在,则必须使用 -DT,否则操作将失败。

    -f
    生成 Transact-SQL 脚本,以使目标服务器上的表与源服务器上的表实现收敛。

    -o output_file_name
    输出文件的完整名称和路径。

    -q
    通过只比较行数和架构可以执行快速比较。

    -t connection_timeouts
    设置与源服务器和每个目标服务器连接时的连接超时时间(秒)。

    备注
    tablediff 实用工具不能用于非 SQL Server 服务器。

    通过将每组订阅参数用逗号 (,) 或为 custom_destination_delimiter 指定的字符分隔开来,即可同时比较多个订阅中的表。必须为每个订阅指定同一组订阅参数。有关详细信息,请参阅How to: Compare Replicated Tables for Differences (Replication Programming)。

    权限
    若要比较表,您必须有要比较的表对象的 SELECT ALL 权限。

    若要使用 -et 选项,您必须是 db_owner 固定数据库角色的成员,或者在订阅数据库中至少有 CREATE TABLE 权限,并且对目标服务器上的目标所有者架构拥有 ALTER 权限。

    若要使用 -dt 选项,您必须是 db_owner 固定数据库角色的成员,或者至少对目标服务器上的目标所有者架构拥有 ALTER 权限。

    若要使用 -o 选项,您必须对指定的文件目录位置拥有写入权限。
    -------------------------------------------------------------------------------------------------

    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

    "C:\Program Files\Microsoft SQL Server\100\COM\tablediff.exe " -sourceserver ".\sql2005" -sourcedatabase "DatabaseA" -sourcetable "SourceTable" -destinationserver ".\sql2005" -destinationdatabase "DatabaseB" -destinationtable "SourceTable" -f "C:\diffs.txt" -destinationlocked
    pause

  • 相关阅读:
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
    @RequestParam设置默认可以传空值
    python清空列表的方法
    Git分支管理的基本操作
    判断一个坐标点是否在不规则多边形内部的算法
    Flask 解析 Web 端 请求 数组
    SQL server 获取异常
    SQL server 大量数据导入和系统运行慢的问题
    SQL SERVER 跨服务器连接
    #pragma once
  • 原文地址:https://www.cnblogs.com/qanholas/p/2388910.html
Copyright © 2011-2022 走看看