7

मुझे SQL सर्वर 2005 लेनदेन संबंधी प्रकाशन के साथ एक विचित्र समस्या का अनुभव हुआ है। मुद्दा यह है: यदि प्रकाशन में एक आलेख होता है जो एक संग्रहीत प्रक्रिया है जिसमें एक बनावट अनुक्रमणिका विवरण होता है, तो संग्रहित प्रक्रिया की स्कीमा को किसी ग्राहक को दोहराने का प्रयास करते समय एक त्रुटि फेंक दी जाती है।एसक्यूएल सर्वर 2005 लेनदेन संबंधी प्रतिकृति एक इंडेक्स युक्त संग्रहीत प्रक्रिया प्रकाशित करने में विफल रहता है

व्यवहार, क्योंकि बनाने सूचकांक बयान बाहर टिप्पणी की है, भले ही, बहुत अजीब है यह अभी भी अपवाद देता है, और यह केवल अगर यह पूरी तरह हटा दिया जाता है काम करेंगे।

कमान का प्रयास किया:: 0x00000170000008B9000500000000,:

यहाँ सटीक त्रुटि है कि लौटाए जाने है करने के लिए [CompanyDatabase_access]

(लेन-देन क्रम संख्या GRANT [dbo] पर निष्पादित [usp_Test]। कमांड आईडी: 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 ******/ 

फिर, अजीब बात यह है कि प्रकाशन अभी भी शामिल होंगे है एक ही त्रुटि अगर निर्माण सूचकांक कथन टिप्पणी की गई है, लेकिन अगर यह हटा दिया गया है तो यह काम करेगा ogether।

अभी के लिए, मैंने अभी तक सभी संग्रहित प्रक्रियाओं को हटा दिया है जिनमें इन्हें प्रकाशन से इंडेक्स स्टेटमेंट बनाते हैं, लेकिन मैं उन्हें ग्राहकों को दोहराना चाहता हूं ताकि प्रक्रियाओं के लिए कोई भी डीडीएल अपडेट स्वचालित रूप से दिखाई दे ग्राहकों।

- संपादित करें -

स्नैपशॉट निर्देशिका में देख रहे हैं, usp_Test के लिए .sch फ़ाइल ठीक उसी कोड ब्लॉक मैं पहले से संग्रहीत प्रक्रिया के लिए तैनात होता है ... त्रुटि के आधार पर लौट आए, यह की तरह लगता है स्नैपशॉट एजेंट क्रिएट प्रोसेस कमांड को चलाने का फैसला नहीं करता है यदि इसमें कोई अनुक्रमणिका इंडेक्स है, लेकिन फिर जारी रहता है और GRANT EXECUTE कमांड चलाने की कोशिश करता है, जो त्रुटि का कारण बनता है।

इसके अलावा, एसक्यूएल सर्वर की मेरी सही संस्करण है:

Microsoft SQL सर्वर 2005 - 9.00.5254.00 (2005 + SP4 संचयी अद्यतन 1)

- अंत संपादित करें -

मेरा सवाल है, यह क्यों हो रहा है? क्या मेरे प्रकाशन या सदस्यता की कॉन्फ़िगरेशन में कोई समस्या है? जैसा कि किसी और ने ऐसा कुछ अनुभव किया? मैं इस मुद्दे की समस्या निवारण में कहां से शुरू करूं?

- अद्यतन -

मैं TechNet पर हिलेरी कोटर से बात कर रहा है ... और फिर भी प्रयास विफल। अगर मैं प्रक्रिया पर अनुदान पूर्व अनुमति को हटा देता हूं, तो यह CREATE INDEX के साथ सफलतापूर्वक बनाता है। तो यह अनुदान EXECUTE या इंडेक्स बनाएं, लेकिन दोनों के साथ काम करेगा। हिलेरी ने सुझाव दिया कि यह मेरे डोमेन में कुछ प्रकार का स्पैम उपकरण हो सकता है जो स्नैपशॉट को उन दोनों कीवर्ड में सही ढंग से स्थानांतरित करने से रोक रहा था, लेकिन यदि मैं मैन्युअल रूप से .sch फ़ाइल को ग्राहक को कॉपी करता हूं और सत्यापित करता हूं कि इसमें अपेक्षित है आदेश, मुझे अभी भी एक ही समस्या मिलती है।

उत्तर

1

निम्नलिखित कोड के साथ: बदलते वाक्य रचना थोड़ा मुद्दे के बिना बनाने के लिए संग्रहीत प्रक्रिया का कारण बनता है

CREATE NONCLUSTERED INDEX [IX_TempTable] ON [dbo].[#TempTable](ID) 

लेकिन,:

ALTER TABLE dbo.#TempTable ADD CONSTRAINT IX_TempTable UNIQUE NONCLUSTERED (ID) 

स्नैपशॉट में संग्रहीत प्रक्रिया लागू किया जा करने में विफल रहा होगा मैं इसे समझा नहीं सकता, और इस गड़बड़ी पर सचमुच घंटों खर्च करने के बाद, मैं सिर्फ एक स्पष्टीकरण की तलाश करना बंद कर रहा हूं और इस कामकाज के लिए बसने के लिए तैयार हूं।

2

हम्म ... मुझ पर कुछ भी कूद नहीं रहा है। जिज्ञासा से बाहर, स्नैपशॉट .sch फ़ाइल में क्या है? यही वह है जो ग्राहक पर स्नैपशॉट एजेंट द्वारा चलाया जाता है।

+0

अच्छा विचार ... मैंने .sch फ़ाइल में चेक किया, और परिणामों के साथ प्रश्न अपडेट किया। –

+0

मैं जो व्यवहार देख रहा हूं उसे समझा नहीं सकता हूं। Sp_addarticle में @schema_option पैरामीटर में आपके पास 0x01 सेट है। मैं सुझाव दूंगा कि आगे बढ़ने के लिए कि आप ग्राहक पर मैन्युअल रूप से proc बनाते हैं और @pre_creation_cmd को 'none' पर सेट करते हैं ताकि जब आप स्नैपशॉट चलाते हैं तो यह proc ड्रॉप नहीं करता है। आपको जाना चाहिए। –

संबंधित मुद्दे