일or놀이/MS-SQL

분할된 뷰를 만들기 위한 조건

TIGERJUNE 2006. 9. 5. 11:35

SQL Server 2000의 Developer 및 Enterprise Edition에서만 분할된 뷰에서 INSERT, UPDATE 및 DELETE 작업을 할 수 있습니다. 분할된 뷰를 수정하려면 명령문이 다음 조건에 맞아야 합니다.

  • 원본 구성원 테이블에 이러한 열에 대한 DEFAULT 제약 조건이 있거나 NULL을 허용해도 INSERT 문은 뷰의 모든 열에 대해 값을 제공해야 합니다. DEFAULT 정의를 갖는 구성원 테이블 열에 대해서 명령문은 DEFAULT 키워드를 명시적으로 사용할 수 없습니다.
  • 분할 열에 삽입되는 값은 반드시 원본이 되는 제약 조건 중 적어도 하나를 만족시켜야 합니다. 그렇지 않은 경우에는 제약 조건을 위반하게 되어 INSERT 작업이 실패합니다.
  • UPDATE 문은 열이 해당 구성원 테이블에 DEFAULT 값이 정의되어 있더라도 SET 절의 값으로 DEFAULT 키워드를 지정할 수 없습니다.
  • 구성원 테이블에 text, ntext 또는 image 열이 있으면 PRIMARY KEY 열을 UPDATE 문을 통해 수정할 수 없습니다.
  • 구성원 테이블 중 하나 이상에 IDENTITY 열이 있는 뷰의 열은 INSERT 또는 UPDATE 문을 사용하여 업데이트할 수 없습니다.
  • 구성원 테이블 중 하나에 timestamp 열이 포함되어 있으면 INSERT 또는 UPDATE 문을 사용하여 뷰를 업데이트할 수 없습니다.
  • 명령문에 구성원 테이블 또는 같은 뷰와 자체 조인이 있으면 분할된 뷰에 대해 INSERT, UPDATE 및 DELETE 작업을 수행할 수 없습니다.

    참고   분할된 뷰를 업데이트하려면 사용자에게 구성원 테이블에 대해 INSERT, UPDATE 및 DELETE 사용 권한이 있어야 합니다.

분산 분할된 뷰에 대한 추가 조건

분산 분할된 뷰(하나 이상의 구성원 테이블이 원격일 때)의 경우 다음 추가 조건이 적용됩니다.

  • 업데이트에 의해 영향을 받는 모든 노드에 걸쳐 원자성을 확인하기 위해 분산 트랜잭션이 시작됩니다.
  • 작업할 INSERT, UPDATE 또는 DELETE 문에 관해 XACT_ABORT SET 옵션이 반드시 ON 상태여야 합니다.
  • 분할된 뷰에서 참조되는 원격 테이블에 있는 모든 smallmoneysmalldatetime 열은 각각 moneydatetime으로 매핑됩니다. 따라서 로컬 테이블의 해당 열(선택 목록의 동일한 순서 위치)은 moneydatetime이어야 합니다.
  • 분할된 뷰에 있는 모든 연결된 서버는 루프백 연결된 서버(동일한 SQL Server를 지정하는 연결된 서버)가 될 수 없습니다.

업데이트할 수 있는 분할된 뷰 및 원격 테이블과 관련된 INSERT, UPDATE 및 DELETE 작업에 대해서는 SET ROWCOUNT 옵션의 설정이 무시됩니다.

구성원 테이블 및 분할된 뷰 정의가 지정된 경우 Microsoft SQL Server 2000은 구성원 테이블에서 데이터를 액세스하기 위해 쿼리를 효율적으로 사용하는 인텔리전트 계획을 수립합니다. 쿼리 프로세서는 CHECK 제약 조건 정의와 함께 구성원 테이블에 걸쳐 키 값의 배포를 매핑합니다. 사용자가 쿼리를 실행하면 쿼리 프로세서가 WHERE 절에서 지정된 값에 대한 매핑과 비교한 다음 구성원 서버 간에 데이터 전송량이 최소화되도록 실행 계획을 수립합니다. 따라서 일부 구성원 테이블이 원격 서버에 있더라도 SQL Server 2000은 분산 쿼리를 확인하여 전송해야 하는 분산 데이터의 양을 최소화할 수 있습니다. SQL Server 2000이 분할된 뷰에 있는 쿼리를 해결하는 방법에 관한 자세한 내용은 분산 분할된 뷰 확인을 참조하십시오.