다음을 통해 공유


SQL Server 복제(문제 해결)

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

잘못된 데이터 형식 매핑

DATETIME2 열에서 DB2 TIMESTAMP 열로 복제 실패

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

잘못된 데이터 형식 매핑

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

sp_helpdatatypemap

sp_getdefaultdatatypemapping

sp_setdefaultdatatypemapping

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

DATETIME2 열에서 DB2 TIMESTAMP 열로 복제 실패

문제

z/OS용 DB2로의 SQL Server 2008 복제가 실패하여 SQLCODE -188(datetime 값의 문자열 표현이 유효한 datetime 값이 아닙니다.)이 표시될 수 있습니다. 이 오류는 복제가 DATETIME2를 DB2 VARCHAR(27)로 매핑하도록 구성되어 있고 구독 아티클 명령을 문자열 리터럴 데이터 값과 함께 사용하는 경우에 발생합니다.

해결 방법

SQL Server 2008 복제가 DATETIME2를 DB2 TIMESTAMP로 매핑하도록 다시 구성하고 매개 변수를 사용하여 구독 아티클 명령을 다시 구성합니다. 이렇게 하면 데이터 공급자가 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인 이 예의 결과 창을 보여 줍니다.

mapping_id source_dbms source_type destination_dbms destination_type destination_length
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입니다.

mapping_id source_dbms source_type destination_dbms destination_type destination_length
494 MSSQLSERVER datetime2 DB2 timestamp NULL

5단계. 다시 구성할 복제 구독 아티클을 식별합니다. Transact-SQL USE 문을 사용하여 master 데이터베이스에서 복제할 원본 데이터베이스로 전환합니다.

USE [Test]  
select name, status from sysarticles  

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

name 상태
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”(“INSERT 문에 열 이름도 포함하고 매개 변수화된 문도 사용합니다.”)를 포함하도록 SQL Server 복제 구독 아티클을 다시 구성합니다.

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