SQL Server 2005 트랜잭션 게시에 이상한 문제가 발생했습니다. 문제는 다음과 같습니다. 게시에 create index 문이 포함 된 저장 프로 시저라는 기사가 포함되어 있으면 저장 프로 시저의 스키마를 구독자에게 복제하려고 할 때 오류가 발생합니다. 인덱스 작성 문이 가을 주석 경우에도 때문에 SQL Server 2005 트랜잭션 복제가 인덱스가 포함 된 저장 프로 시저를 게시하지 못한다 Create
동작
은 여전히 예외를 제공, 매우 이상한이며,이 모두 제거 된 경우에만 작동합니다.명령이 시도 :
여기에 반환되고있는 정확한 오류입니다 GRANT가 [DBO]에서 실행 [usp_Test] TO [CompanyDatabase_access]
(트랜잭션 시퀀스 번호 :. 0x00000170000008B9000500000000, 명령 ID : 5)
오류 메시지 : 존재하지 않기 때문에 'usp_Test'개체를 찾을 수 없습니다. 또는 권한이 없습니다. (원본 : MSSQLServer, 오류 번호 : 15151) : 존재하지 않는 또는 권한이 없으므로 http://help/15151 객체 'usp_Test', 를 찾을 수 없습니다 지원을받을 수 있습니다. (출처 : 에서 MSSQLServer, 오류 번호 : 15151) 지원을받을 수 : http://help/15151
내가 가입자에 검사 할 때 예상대로, 저장 프로 시저가 생성되지 않았기 때문에 오류가 정확 ...하지만 그였다 게시 목적은 ...
또한 구독자에서 수동으로 저장 프로 시저를 만들 수 있지만 스냅 샷을 생성 할 때 은 기존 저장 프로 시저을 삭제 한 다음 여전히이 오류 메시지를 반환합니다.
그리고이 문제를 만드는 샘플 출판물은 다음과 같습니다.
저장 프로 시저 :
USE [CompanyDatabase]
GO
CREATE PROCEDURE [dbo].[usp_Test]
AS
CREATE TABLE #TempTable(ID INT)
CREATE NONCLUSTERED INDEX [IX_TempTable] ON [dbo].[#TempTable](ID)
SELECT 'Test'
GO
GRANT EXECUTE ON [dbo].[usp_Test] TO [CompanyDatabase_access]
GO
간행물 스크립트 :
-- Adding the transactional publication
use [CompanyDatabase]
exec sp_addpublication
@publication = N'Replication Test',
@description = N'Publication of database ''CompanyDatabase''.',
@sync_method = N'concurrent',
@retention = 0,
@allow_push = N'true',
@allow_pull = N'true',
@allow_anonymous = N'false',
@enabled_for_internet = N'false',
@snapshot_in_defaultfolder = N'true',
@compress_snapshot = N'false',
@ftp_port = 21,
@ftp_login = N'anonymous',
@allow_subscription_copy = N'false',
@add_to_active_directory = N'false',
@repl_freq = N'continuous',
@status = N'active', @independent_agent = N'true',
@immediate_sync = N'false',
@allow_sync_tran = N'false',
@autogen_sync_procs = N'false',
@allow_queued_tran = N'false',
@allow_dts = N'false',
@replicate_ddl = 1,
@allow_initialize_from_backup = N'false',
@enabled_for_p2p = N'false',
@enabled_for_het_sub = N'false'
GO
-- Adding the transactional articles
use [CompanyDatabase]
exec sp_addarticle
@publication = N'Replication Test',
@article = N'usp_Test',
@source_owner = N'dbo',
@source_object = N'usp_Test',
@type = N'proc schema only',
@description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x0000000048000001,
@destination_table = N'usp_Test',
@destination_owner = N'dbo',
@status = 16
GO
-- Adding the transactional subscriptions
use [CompanyDatabase]
exec sp_addsubscription
@publication = N'Replication Test',
@subscriber = N'OtherDatabaseServer',
@destination_db = N'CompanyDatabase',
@subscription_type = N'Pull',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0
GO
구독 스크립트 :
/****** Begin: Script to be run at Subscriber ******/
use [CompanyDatabase]
exec sp_addpullsubscription
@publisher = N'DatabaseServer',
@publication = N'Replication Test',
@publisher_db = N'CompanyDatabase',
@independent_agent = N'True',
@subscription_type = N'pull',
@description = N'',
@update_mode = N'read only',
@immediate_sync = 0
exec sp_addpullsubscription_agent
@publisher = N'DatabaseServer',
@publisher_db = N'CompanyDatabase',
@publication = N'Replication Test',
@distributor = N'DatabaseServer',
@distributor_security_mode = 1,
@distributor_login = N'',
@distributor_password = N'',
@enabled_for_syncmgr = N'False',
@frequency_type = 64,
@frequency_interval = 0,
@frequency_relative_interval = 0,
@frequency_recurrence_factor = 0,
@frequency_subday = 0,
@frequency_subday_interval = 0,
@active_start_time_of_day = 0,
@active_end_time_of_day = 235959,
@active_start_date = 0,
@active_end_date = 0,
@alt_snapshot_folder = N'',
@working_directory = N'',
@use_ftp = N'False',
@job_login = null,
@job_password = null,
@publication_type = 0
GO
/****** End: Script to be run at Subscriber ******/
다시, 이상한 일이 게시 여전히를 포함하는 것입니다 create index 문이 주석 처리 된 경우와 동일한 오류가 발생하지만 제거 된 경우 작동합니다. 오 게져.
지금은 게시판에서 이러한 create index 문을 포함하는 모든 저장 프로 시저를 제거했지만 구독자에게 복제하여 프로 시저에 대한 DDL 업데이트가 자동으로 반영되도록하고 싶습니다. 가입자.
- 편집 - 스냅 샷 디렉토리에 상대가
, usp_Test의는 .sch 파일은 내가 이전에 저장 프로 시저 게시 된 동일한 코드 블록을 포함 ... 오류에 따라 반환, 그것은 것 같아 스냅 샷 에이전트는 CREATE PROCEDURE 명령에 create index가 포함되어 있으면 실행하지 않기로 결정하지만 계속 진행하고 오류를 발생시키는 GRANT EXECUTE 명령을 실행하려고 시도합니다.
또한, SQL 서버의 내 정확한 버전은 다음과 같습니다
마이크로 소프트 SQL 서버 2005 - 9.00.5254.00 (2005 + SP4 누적 업데이트 1)
- END 편집 -
제 질문은 왜 이런 일입니까? 저의 간행물이나 구독 구성에 문제가 있습니까? 다른 누구도 이와 같은 경험을 했습니까? 이 문제를 해결하기 위해 어디서부터 시작해야합니까?
- UPDATE -
내가 TechNet의 힐러리 코터 이야기 봤는데 ... 아직도 행운. 프로 시저에 대한 GRANT EXECUTE 권한을 제거하면 CREATE INDEX와 함 2 성공적으로 작성됩니다. 따라서 GRANT EXECUTE 또는 CREATE INDEX와 함께 작동하지만 둘 다 사용할 수는 없습니다. 힐러리는 내 도메인에 스팸 어플라이언스가 그 키워드가 둘 다 포함되어있을 때 스냅 샷이 올바르게 전송되는 것을 막는 일부 유형의 스팸 어플라이언스 일지 모르지만, 수동으로 .sch 파일을 구독자에게 복사하고 예상되는 URL이 포함되어 있는지 확인합니다. 명령, 나는 여전히 같은 문제가 있습니다.
좋은 생각 ... .sch 파일을 체크인하고 결과로 질문을 업데이트했습니다. –
나는 당신이 보는 행동을 설명 할 수 없다. sp_addarticle의 @schema_option 매개 변수에 0x01이 설정되어 있습니다. 앞으로 구독자에서 수동으로 proc을 만들고 @pre_creation_cmd를 'none'으로 설정하여 스냅 숏을 실행할 때 proc을 삭제하지 않도록하는 것이 좋습니다. 그게 너를 가야 해. –