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 데이터베이스의 대문자인 경우 SQL Server 배포자를 통해 게시할 때 대문자로 Oracle 개체의 이름을 제공해야 합니다. 올바른 경우에 개체를 지정하지 않으면 개체를 찾을 수 없음을 나타내는 오류 메시지가 표시될 수 있습니다.

  • 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 게시의 보안 모델은 표준 트랜잭션 복제의 보안 모델과 동일합니다. 단 다음과 같은 경우는 예외입니다.

  • 스냅샷 에이전트 및 로그 판독기 에이전트가 배포자에서 게시자에 연결할 계정은 다음 방법 중 하나를 통해 지정됩니다.

    • @security_mode sp_adddistpublisher(Transact-SQL)매개 변수입니다(Oracle 인증에 대한 @login 값도 지정하고 @password Oracle 인증을 사용하는 경우).

    • SQL Server 배포자에서 Oracle 게시자를 구성할 때 사용하는 SQL Server Management Studio의 서버에 연결 대화 상자

    표준 트랜잭션 복제에서 계정은 sp_addpublication_snapshot(Transact-SQL) 및 sp_addlogreader_agent(Transact-SQL)로 지정됩니다.

  • 스냅샷 에이전트 및 로그 판독기 에이전트가 연결을 만드는 계정은 sp_changedistpublisher(Transact-SQL) 또는 속성 시트를 통해 변경할 수 없지만 암호를 변경할 수 있습니다.

  • sp_adddistpublisher(Transact-SQL)의 매개 변수에 대해 @security_mode 값 1(Windows 통합 인증)을 지정하는 경우:

복제 보안에 대한 자세한 내용은 복제 보안 설정 보기 및 수정을 참조 하세요.

참고 항목

Oracle 게시자에 대한 관리 고려 사항
Oracle 게시자 구성
Oracle 게시 개요