다음을 통해 공유


SQL Server 복제(문제 해결)

이 항목에는 OLE DB Provider for DB2와 SQL Server(데이터 공급자) 및 SQL Server 간의 문제 해결과 관련된 다음 섹션이 포함되어 있습니다.

잘못된 데이터 형식 매핑

DB2 TIMESTAMP 열에 DATETIME2 열을 복제하지 못했습니다.

SQL Server 복제에 대한 자세한 내용은 SQL Server 온라인 설명서 의 개발자 가이드(복제)https://go.microsoft.com/fwlink/?LinkId=193231 참조하세요.

잘못된 데이터 형식 매핑

SQL Server 복제는 SQL Server에서 DB2 데이터 형식으로의 기본 매핑에 따라 데이터를 잘못 변환할 수 있습니다. 관리자와 개발자는 다음 SQL Server 시스템 저장 프로시저를 사용하여 복제 데이터 형식 매핑을 검토하고 수정하는 것이 좋습니다.

sp_helpdatatypemap

sp_getdefaultdatatypemapping

sp_setdefaultdatatypemapping

자세한 내용은 [시스템 저장 프로시저(Transact-SQL)](https://go.microsoft.com/fwlink/?LinkID=180765\)를 참조하세요.

DB2 TIMESTAMP 열에 DATETIME2 열을 복제하지 못했습니다.

문제

Z/OS용 DB2에 대한 SQL Server 2008 복제는 SQLCODE -188 실패할 수 있습니다(datetime 값의 문자열 표현은 유효한 datetime 값이 아님). 이는 DATETIME2 DB2 VARCHAR(27)에 매핑하도록 복제를 구성하고 문자열 리터럴 데이터 값이 있는 구독 아티클 명령을 사용하는 경우에 발생합니다.

해결책

매개 변수가 있는 DB2 TIMESTAMP 및 구독 문서 명령에 DATETIME2 매핑하도록 SQL Server 2008 복제를 다시 구성합니다. 이렇게 하면 데이터 공급자가 DATETIME2 IBM DB2 데이터베이스 서버에서 지원하는 DB2 TIMESTAMP 구조체로 서식을 지정할 수 있습니다.

단계별 지침

1단계. 수정할 데이터 형식 매핑을 식별합니다. USE MASTER 모든 단계에서

select * from sys.fn_helpdatatypemap  
(  
   'MSSQLSERVER',  
    '%',  
    '%',  
    '%',  
    '%',  
    '%',  
    0  
)  
where destination_dbms = 'DB2' and source_type = 'datetime2'  
  

결과는 수정할 mapping_id 나타내야 합니다. 다음 표에서는 mapping_id 189인 이 예제의 결과 창을 보여줍니다.

매핑_아이디 원본 DBMS (Database Management System) 원본_유형 destination_dbms 목적지_유형 목적지 길이
189 MSSQLSERVER datetime2은(는) 데이터베이스 날짜 및 시간 형식의 데이터 타입입니다. DB2 VARCHAR 27

2단계. 데이터 형식 매핑을 삭제합니다.

exec sp_dropdatatypemapping  189  

3단계. 데이터 형식 매핑을 추가합니다.

exec  sp_adddatatypemapping   
    @source_dbms                  = 'MSSQLSERVER',    
    @source_type                  = 'datetime2',  
    @destination_dbms             = 'DB2',  
    @destination_type             = 'TIMESTAMP',  
    @destination_nullable         = 1,  
    @destination_createparams     = 0,  
    @dataloss                     = 0,  
    @is_default                   = 1  
  

4단계. 쿼리를 다시 실행하여 새 데이터 형식 매핑을 확인합니다.

select * from sys.fn_helpdatatypemap  
(  
   'MSSQLSERVER',  
    '%',  
    '%',  
    '%',  
    '%',  
    '%',  
    0  
)  
where destination_dbms = 'DB2' and source_type = 'datetime2'  
  

결과에 새 데이터 형식 매핑이 표시됩니다. 이 예제에서는 다음 표에 표시된 mapping_id 189입니다.

맵핑_ID source_dbms 원본_유형 destination_dbms 목적지 유형 목적지_길이
494 MSSQLSERVER datetime2은(는) 데이터베이스 날짜 및 시간 형식의 데이터 타입입니다. DB2 타임 스탬프 없음

5단계 다시 구성할 복제 구독 문서를 식별합니다. Transact-SQL USE 문을 사용하여 마스터 데이터베이스에서 복제 중인 데이터베이스로 전환합니다.

USE [Test]  
select name, status from sysarticles  

결과에 수정할 아티클의 이름이 표시됩니다. 이 예제에서는 다음 표가 이름이 DB2TS01인 결과를 보여줍니다.

이름 상태
DB2TS01 이십오 (25)

상태 값이 1 또는 9이면 문자열 리터럴 서식 지정을 위해 아티클이 구성됩니다.

상태 값이 17 또는 25이면 매개 변수가 있는 서식 지정을 위해 아티클이 구성됩니다.

6단계. 매개 변수가 있는 명령에 대한 복제 구독 문서를 구성합니다.

USE [Test]  
DECLARE @publication AS sysname;  
DECLARE @article AS sysname;  
SET @publication = N'DB2TS_PUB01';  
SET @article = N'DB2TS01';  
  
EXEC sp_changearticle @publication, @article, 'status' , 'parameters' , 0 , 0;  
  

자세한 내용은 SQL Server 온라인 설명서의 복제 시스템 저장 프로시저 개념 (https://go.microsoft.com/fwlink/?LinkId=193232)을 참조하세요.

오류 8152로 인해 복제 INSERT 작업이 실패합니다. 문자열 또는 이진 데이터가 잘립니다.

문제

SQL Server 오류 8152로 인해 SQL Server 복제 INSERT 작업이 실패할 수 있습니다(문자열 또는 이진 데이터가 잘립니다.). 이는 (1) 데이터 공급자가 초기 메타데이터를 사용하도록 구성되지 않고 (2) 매개 변수가 있는 INSERT 문을 사용하도록 복제가 구성되지 않은 경우에 발생할 수 있습니다.

해결책

1단계. 데이터 공급자 연결을 다시 구성하여 SQL Server 복제 구독자 데이터 원본 정의에서 "초기 메타데이터=true 사용"을 지정합니다.

자세한 내용은 DB2용 OLE DB 공급자의 DB2(데이터 링크) 모든 속성 구성 설명서를 참조하세요.

2단계 옵션 "24"를 포함하도록 SQL Server 복제 구독 문서를 다시 구성합니다("INSERT 문에 열 이름을 포함하고 매개 변수가 있는 문을 사용합니다.").

자세한 내용은 SQL Server 설명서의 SQL Server 복제 sp_addarticle(Transact-SQL) 를 참조하세요.