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 ]
    [ -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, image, 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
    원본 서버 및 대상 서버에 대한 연결 제한 시간(초)을 설정합니다.

반환 값

설명

0

성공

1

오류

2

테이블 차이

주의

SQL Server 이외 서버에서는 tablediff 유틸리티를 사용할 수 없습니다.

데이터 형식이 sql_variant인 열이 있는 테이블은 지원되지 않습니다.

기본적으로 tablediff 유틸리티는 원본 열과 대상 열 간에 다음 데이터 형식 매핑을 지원합니다.

원본 데이터 형식

대상 데이터 형식

tinyint

smallint, int 또는 bigint

smallint

int 또는 bigint

int

bigint

timestamp

varbinary

varchar(max)

text

nvarchar(max)

ntext

varbinary(max)

image

text

varchar(max)

ntext

nvarchar(max)

image

varbinary(max)

-strict 옵션을 사용하여 이러한 매핑을 허용하지 않고 유효성 검사를 엄격하게 수행할 수 있습니다.

비교할 원본 테이블에는 하나 이상의 기본 키, ID 또는 ROWGUID 열이 있어야 합니다. -strict 옵션을 사용하는 경우에는 대상 테이블에도 기본 키, ID 또는 ROWGUID 열이 있어야 합니다.

대상 테이블을 일치시키기 위해 생성된 Transact-SQL 스크립트에는 다음 데이터 형식이 포함되지 않습니다.

  • varchar(max)

  • nvarchar(max)

  • varbinary(max)

  • timestamp

  • xml

  • text

  • ntext

  • image

사용 권한

테이블을 비교하려면 비교할 테이블 개체에 대한 SELECT ALL 권한이 있어야 합니다.

-et 옵션을 사용하려면 db_owner 고정 데이터베이스 역할의 멤버이거나 적어도 구독 데이터베이스에 대한 CREATE TABLE 권한과 대상 서버의 대상 소유자 스키마에 대한 ALTER 권한이 있어야 합니다.

-dt 옵션을 사용하려면 db_owner 고정 데이터베이스 역할의 멤버이거나 적어도 대상 서버의 대상 소유자 스키마에 대한 ALTER 권한이 있어야 합니다.

-o 또는 -f 옵션을 사용하려면 지정된 파일 디렉터리 위치에 대한 쓰기 권한이 있어야 합니다.

참고 항목

태스크

복제된 테이블의 차이점 비교(복제 프로그래밍)