2

인덱싱 된 뷰에 대한 트랜잭션 복제를 수행하고 있습니다. NOEXPAND 힌트를 사용하여 인덱싱 된 뷰를 참조하는 다른 복제 스키마 바인딩 뷰가 있습니다. 나는 인덱스 뷰은 sp_addarticle을 호출 한 후 NOEXPANDing보기 위해은 sp_addarticle를 호출해도, 나는 오류를 받고 있어요 : SQL Server는 인덱스에 작성하기 전에 대상 서버에서 NOEXPANDing보기를 만들려고인덱싱 된 뷰에 대한 SQL Server 트랜잭션 복제

Hint 'noexpand' on object '...' is invalid. 

때문에 인덱스 첨부 뷰

NOEXPANDing보기를 시작하기 전에 SQL Server가 인덱스 된 뷰 인덱스 복제를 완료하도록 할 수 있습니까?

답변

1

배포자 데이터베이스를 살펴보고 전후 복제를위한 스크립트를 찾을 수 있습니다. 이것들은 곧장 SQL 스크립트이므로 SQL 스크립트를 수정하고 원하는 것을 넣을 수 있습니다.

즉, pre-repl 스크립트를 수정하여 오류를 피하고 post-repl 스크립트를 수정하여 색인 생성 후 noexpanding보기를 추가 할 수 있음을 의미합니다.

+1

그건 본질적으로 내가하고있는 일이다. (이것은 모두 프로그래밍 방식이다.) 문제가되는 NOEXPAND를 제거하고 스냅 샷을 찍은 다음 스냅 샷이 끝날 때까지 기다린 다음 ALTER VIEW를 실행하여 NOEXPAND를 되돌리고 SQL 복제를 처리하게한다. 복제 DDL 변경 ...하지만 엉덩이에 통증이 ... 그리고 나는 더 간단하게 뭔가를 선호 할 것입니다. – Jeff

+1

게시를 수정하여 스크립트를 자동화 할 수 있습니다. 미리 repl 및 post-repl 스크립트를 추가하고 거기에서 스크립트를 실제로 수정할 수 있습니다. 구독자에서 색인 생성을보다 잘 제어 할 수 있도록하기 위해 과거와 비슷한 작업을 수행했습니다. –

0

나는 쉬운 방법을 찾았다 고 생각합니다.

GUI를 사용하여 복제에 색인 된보기를 추가하면 스키마 정의 전체에 복사됩니다. NOEXPAND 힌트가 포함되어 있으면 이러한보기에 액세스하려는 모든 저장된 Procs에 오류가 있음을 의미합니다.

이제 전/후 스크립트를 뒤죽박죽으로 사용할 수 있지만 MSDN의이 기사를 사용하는 것이 더 간단 할 것 같습니다. Indexed Views - Replications - NoExpand Hint

는 당신은 sp_addarticle에 대한 스크립트를 변경하여 인덱스를 복제하고 0x00000000080000510x0000000008000001에서 @schema_option을 대체 할 수 있습니다. 다음 예에서는 클러스터 된 인덱스와 클러스터되지 않은 인덱스를 모두 구독자에서 생성 할 수 있습니다.

이렇게하면 인덱스를 자동으로 가져오고 스크립팅도 줄어 듭니다.