다음을 통해 공유


Oracle 게시자의 디자인 고려 사항과 제한 사항

적용 대상: SQL Server

Oracle 데이터베이스의 게시 작업은 Microsoft SQL Server 데이터베이스의 게시 작업과 거의 동일합니다. 그러나 Oracle 데이터베이스에서의 게시 작업에 대한 다음과 같은 제한 사항 및 문제점을 알고 있어야 합니다.

  • Oracle 게이트웨이 옵션은 Oracle 완료 옵션에 대해 향상된 성능을 제공합니다. 그러나 이 옵션은 여러 트랜잭션 게시물에 동일한 테이블을 게시하는 데 사용할 수 없습니다. 테이블은 최대 하나의 트랜잭션 게시와 임의의 수의 스냅샷 게시물에 표시할 수 있습니다. 동일한 테이블을 여러 트랜잭션 게시물에 게시해야 하는 경우 Oracle 완료 옵션을 선택합니다.

  • 복제는 테이블, 인덱스 및 구체화된 뷰 게시물을 지원합니다. 다른 개체는 복제되지 않습니다.

  • Oracle 및 SQL Server 데이터베이스의 데이터 스토리지와 처리 간에는 복제에 영향을 주는 몇 가지 작은 차이점이 있습니다.

  • Oracle 게시자 사용 시 트랜잭션 복제 기능이 지원되는 방식이 매우 다릅니다.

Oracle 개체 게시 지원

복제는 Oracle 데이터베이스에서 다음 개체를 복제할 수 있습니다.

  • 테이블

  • 인덱스 구성 테이블

  • 인덱스

  • 구체화된 뷰(테이블로 복제됨)

다음은 게시된 테이블에 있을 수 있지만 복제되지는 않습니다.

  • 도메인 기반 인덱스

  • 함수 기반 인덱스

  • Defaults

  • CHECK 제약 조건

  • 외래 키

  • 스토리지 옵션(테이블스페이스, 클러스터 등)

다음 개체는 복제할 수 없습니다.

  • 중첩 테이블

  • 패키지, 패키지 본문, 프로시저 및 트리거

  • 시퀀스

  • 동의어

지원되는 데이터 형식에 대한 자세한 정보는 Oracle 게시자에 대한 데이터 형식 매핑을 참조 하세요.

Oracle과 SQL Server 간의 차이점

  • Oracle에서는 일부 개체에 대한 최대 크기 제한이 서로 다릅니다. Oracle 게시 데이터베이스에서 만든 모든 개체는 SQL Server의 해당 개체에 대한 최대 크기 제한을 준수해야 합니다. SQL Server의 제한 사항에 대해 자세한 정보는 SQL Server의 최대 용량 사양을 참조하세요.

  • 기본적으로 Oracle 개체 이름은 대문자로 만들어집니다. Oracle 데이터베이스에서 Oracle 개체 이름이 대문자인 경우 이 개체를 SQL Server 배포자를 통해 게시할 때 해당 이름을 대문자로 입력해야 합니다. 올바른 경우에 개체를 지정하지 않으면 개체를 찾을 수 없음을 나타내는 오류 메시지가 표시될 수 있습니다.

  • Oracle에는 SQL Server와 약간 다른 SQL 언어가 있습니다. 행 필터는 Oracle 규격 구문으로 작성해야 합니다.

큰 개체에 대한 고려 사항

LOB(큰 개체) 데이터는 아티클 로그 테이블에 저장되지 않으며 LOB 데이터의 업데이트 내용은 게시된 테이블에서 언제든지 검색할 수 있습니다. 업데이트는 LOB에 영향을 주는 작업이 복제된 테이블에서 복제 트리거를 발생시킨 경우에만 트랜잭션 게시물에서 복제됩니다. LOB가 포함된 행을 삽입하거나 삭제하면 Oracle 트리거가 발생합니다. 그러나 LOB 열에 대한 업데이트는 트리거를 발생시키지 않습니다. 동일한 행의 LOB가 아닌 열도 동일한 Oracle 트랜잭션에서 업데이트되는 경우에만 LOB 열에 대한 업데이트가 즉시 복제됩니다. 그렇지 않은 경우 동일한 행의 LOB가 아닌 열에 대한 다음 업데이트가 발생하면 구독자에서 LOB 열이 새로 고쳐집니다. 이 동작이 애플리케이션에 허용되는지 확인합니다.

트랜잭션 게시물에서 LOB 열에 대한 업데이트를 복제하려면 애플리케이션을 작성할 때 다음 전략 중 하나를 고려합니다.

  • 행을 업데이트하는 대신 트랜잭션 내에서 행을 삭제하고 다시 삽입합니다. 행을 다시 삽입할 때 새 LOB를 지정합니다. 두 실행 트리거를 모두 삭제하고 삽입하기 때문에 행이 복제됩니다.

  • 행 업데이트에 LOB 열 외에 비-LOB 열을 포함시키거나 행의 비-LOB 열을 동일한 Oracle 트랜잭션의 일부로 업데이트합니다. 두 경우 모두 비-LOB 열을 업데이트하면 트리거가 발생됩니다.

LOB에 대해 자세한 정보는 Oracle 게시자에 대한 데이터 형식 매핑을 참조 하세요.

고유 인덱스 및 제약 조건

스냅샷과 트랜잭션 복제에서 고유 인덱스 및 UNIQUE 제약 조건(PRIMARY KEY 제약 조건 포함)에 포함된 열이 특정 제한 사항을 따라야 합니다. 이러한 제한을 준수하지 않으면 제약 조건 또는 인덱스가 복제되지 않습니다.

  • SQL Server의 인덱스에 허용되는 최대 열 수는 16개입니다.

  • 고유 제약 조건에 포함된 모든 열에는 지원되는 데이터 형식이 있어야 합니다. 데이터 형식에 관해 자세한 정보는 Oracle 게시자에 대한 데이터 형식 매핑을 참조 하세요.

  • 고유 제약 조건에 포함된 모든 열을 게시해야 합니다(필터링할 수 없음).

  • UNIQUE 제약 조건이나 고유 인덱스에 포함된 열은 Null이 아니어야 합니다.

또한 다음 문제를 고려해야 합니다.

  • Oracle 및 SQL Server는 NULL을 다르게 처리합니다. Oracle은 NULL을 허용하고 고유한 제약 조건 또는 인덱스에 포함된 열에 대해 NULL 값이 있는 여러 행을 허용합니다. SQL Server는 동일한 열에 대해 NULL 값이 있는 단일 행만 허용하여 고유성을 적용합니다. 게시된 테이블에 인덱스 또는 제약 조건에 포함된 열에 대해 NULL 값이 있는 여러 행이 포함된 경우 구독자에서 제약 조건 위반이 발생하기 때문에 NULL을 허용하는 고유 제약 조건 또는 인덱스를 게시할 수 없습니다.

  • SQL Server에서는 고유성을 테스트할 때 필드의 후행 공백을 무시하지만 Oracle에서는 무시하지 않습니다.

SQL Server 트랜잭션 복제와 마찬가지로 Oracle 트랜잭션 게시의 테이블에는 기본 키가 필요합니다. 기본 키는 위에서 지정한 규칙에 따라 고유해야 합니다. 기본 키가 이전 글머리 기호에 설명된 규칙을 준수하지 않는 경우 트랜잭션 복제를 위해 테이블을 게시할 수 없습니다.

Oracle 게시와 표준 트랜잭션 복제의 차이점

  • Oracle 게시자는 SQL Server 배포자 또는 동일한 배포자를 사용하는 SQL Server 게시자 또는 게시물을 받는 구독자와 그 누구와도 이름이 같으면 안 됩니다. 동일한 배포자에서 서비스하는 게시물에는 각각 고유한 이름이 있어야 합니다.

  • Oracle 게시물에 게시된 테이블은 복제된 데이터를 받을 수 없습니다. 따라서 Oracle 게시는 즉시 업데이트 또는 지연 업데이트 구독이 있는 게시물을 지원하지 않습니다. 또는 게시 테이블이 피어 투 피어 및 양방향 복제와 같은 구독 테이블 역할을 하는 토폴로지입니다.

  • Oracle 데이터베이스의 외래 키 관계에 대한 기본 키는 구독자에 복제되지 않습니다. 그러나 변경 내용이 전달되면 데이터에서 관계가 유지됩니다.

  • 표준 트랜잭션 게시는 최대 1000개의 열로 구성된 테이블을 지원합니다. Oracle 트랜잭션 게시는 열을 995개 지원합니다(복제는 게시된 각 테이블에 열을 5개 추가함).

  • COLLATE 절은 기본 키와 UNIQUE 제약 조건에 중요한 대/소문자 비교를 사용할 수 있도록 CREATE TABLE 문에 추가됩니다. 이 동작은 sp_addarticle(Transact-SQL)@schema_option 매개 변수로 지정된 스키마 옵션 0x1000 사용하여 제어됩니다.

  • 저장 프로시저를 사용하여 Oracle 게시자를 구성하거나 유지 관리하는 경우 명시적 트랜잭션 내에 프로시저를 배치하지 마세요. 이 기능은 Oracle 게시자에 연결하는 데 사용된 연결된 서버에서는 지원되지 않습니다.

  • 마법사를 사용하여 Oracle 게시물에 끌어오기 구독을 만드는 경우 SQL Server 2005(9.x) 이상 버전과 함께 제공되는 새 구독 마법사를 사용해야 합니다. 그러나 이전 버전의 SQL Server에서는 저장 프로시저 및 SQL-DMO 인터페이스를 사용하여 Oracle 게시물에 대한 끌어오기 구독을 설정할 수 있습니다.

  • 저장 프로시저를 사용하여 구독자에 변경 내용을 전파하는 경우(기본값) MCALL 구문이 지원되지만 게시가 Oracle 게시자일 때는 동작이 다릅니다. 일반적으로 MCALL은 게시자에서 업데이트된 열을 보여 주는 비트맵을 제공합니다. Oracle 게시에서의 비트맵은 항상 모든 열이 업데이트되었음을 보여 줍니다. 저장된 프로시저 사용에 대한 자세한 정보는 트랜잭션 문서에 대한 변경 내용을 전파하는 방법 지정을 참조하세요.

트랜잭션 복제 기능 지원

  • Oracle 게시는 SQL Server 게시물에서 지원하는 스키마 옵션을 모두 다 지원하지는 않습니다. 스키마 옵션에 대한 자세한 정보는 sp_addarticle(Transact-SQL)을 참조하세요.

  • Oracle 게시물 구독자는 즉시 업데이트 또는 대기 중인 업데이트 구독을 사용하거나 피어 투 피어 또는 양방향 토폴로지의 노드가 될 수 없습니다.

  • Oracle 게시물 구독자는 백업에서 자동으로 초기화할 수 없습니다.

  • SQL Server에서는 이진 유효성 검사와 행 개수 유효성 검사를 지원합니다. Oracle 게시자에서는 행 개수 유효성 검사를 지원합니다. 자세한 내용은 복제된 데이터의 유효성 검사를 참조하세요.

  • SQL Server에서는 네이티브 bcp 모드 스냅샷과 문자 모드 스냅샷을 제공합니다. Oracle 게시자는 문자 모드 스냅샷을 지원합니다.

  • 게시된 Oracle 테이블에 대한 스키마 변경은 지원되지 않습니다. 스키마를 변경하려면 먼저 게시물을 삭제하고 변경한 다음 게시 및 구독을 다시 만듭니다.

    참고 항목

    게시된 테이블에서 활동이 발생하지 않을 때 스키마가 변경되고 게시 및 구독의 후속 삭제 및 다시 생성이 수행되는 경우 구독에 대한 '복제 지원만' 옵션을 지정할 수 있습니다. 이렇게 하면 각 구독자에 스냅샷을 복사하지 않고도 동기화할 수 있습니다. 자세한 정보는 스냅샷 없이 트랜잭션 구독 초기화를 참조하세요.

복제 보안 모델

Oracle 게시의 보안 모델은 표준 트랜잭션 복제의 보안 모델과 동일합니다. 단 다음과 같은 경우는 예외입니다.

복제 보안에 관해 자세한 정보는 복제 보안 설정 보기 및 수정을 참조하세요.