2008-12-04 11 views
6

हटाएं क्या किसी को किसी .NET अनुप्रयोग से SQL सर्वर (2005 या 2008) डेटाबेस में तालिका रिकॉर्ड परिवर्तनों की निगरानी करने का कोई तरीका पता है? इसे एक समय में कई ग्राहकों का समर्थन करने में सक्षम होना चाहिए। प्रत्येक क्लाइंट शुरू होने पर "सब्सक्राइब" करेगा, और जब यह निकलता है तो "सदस्यता समाप्त करें"। एकाधिक उपयोगकर्ता सिस्टम को एक बार में एक्सेस कर सकते हैं और मैं अन्य उपयोगकर्ताओं के क्लाइंट पर उनके परिवर्तनों को प्रतिबिंबित करना चाहता हूं। फिर जब ग्राहक परिवर्तन ईवेंट को संभालता है, तो वह उस रिकॉर्ड का प्रतिनिधित्व करने वाली स्थानीय ऑब्जेक्ट को अपडेट कर सकता है। संशोधित किए गए एक्सेस अपडेट रिकॉर्ड्स के समान प्रकार की तरह प्रत्येक संदर्भ में इसे प्रतिबिंबित किया जाता है।.NET SQL सर्वर डेटाबेस मॉनिटरिंग - सम्मिलित करें, अपडेट करें,

मुझे पता है कि माइक्रोसॉफ्ट के पास SQL ​​सर्वर के साथ इंटरैक्ट करने के लिए माइक्रोसॉफ्ट है। SQL सर्वर सर्वर। लेकिन मुझे यकीन नहीं है कि कौन सी अवधारणा उस पर लागू होती है जो मैं करना चाहता हूं (या जो मैं करना चाहता हूं उसे लागू करने के लिए क्या हो सकता है)। जो लोग ध्वनि की तरह लग सकते हैं वे प्रबंधन या प्रतिकृति एक हैं।

किसी की पूछताछ में, "आपको कभी-कभी नई जानकारी देखने के लिए टेबल की आवश्यकता क्यों नहीं है?" मेरे पास बड़ी संख्या में टेबल हैं जिन्हें मैं मॉनीटर करना चाहता हूं और यह बट में दर्द होगा। इसके अलावा अगर मैं कुछ और अधिक सुरुचिपूर्ण की तलाश में हूं।

मैं सुझाव के लिए खुले हूँ ...

उत्तर

0

मैं व्यक्तिगत रूप से उपयोग नहीं किया है, लेकिन यह अधिसूचना सेवा की तरह लगता है एक नज़र

More Here...

+0

एफवाईआई: एसक्यूएल अधिसूचना सेवाओं को SQL 2008 में बहिष्कृत किया गया है, 2008 से रिलीज़ में उपलब्ध नहीं होगा। उद्धरण: http://blogs.technet.com/andrew/archive/2008/10/21/sql-server- 2008-अधिसूचना-सेवाएं.aspx – Cheeso

0

इस परिदृश्य में आम तौर पर नहीं है लायक है पैमाने बहुत अच्छी तरह से ... आप एसक्यूएल अधिसूचना सेवाओं में देख सकते हैं, लेकिन यह एक ही समस्या है।

एक सिस्टम में, मैं ट्रिगर्स के द्वारा ऐसा करता हूं जो तालिका, परिवर्तन-प्रकार और पंक्ति-आईडी समेत एक (एकल) डेल्टा तालिका में परिवर्तनों का एक संक्षिप्त सारांश लिखता है। प्रत्येक ग्राहक "जहां मैंने पढ़ा है" रखता है, और बस आईडी के साथ सभी डेल्टा रिकॉर्ड्स के लिए पूछता है> यह संख्या। समस्या यह है कि आपको किसी भी व्यक्तिगत क्लाइंट को इतिहास बदलने के बिना टेबल को साफ़ करने के लिए कुछ चालाक सामान करने की आवश्यकता है ... यानी लॉगऑफ ट्रैक करें, मान लीजिए कि वे किसी दिए गए समय से पहले मर चुके हैं, और लॉग इन करते समय लॉग इन करें।

निश्चित रूप से करने योग्य, लेकिन बहुत सारे काम।

+0

आप जो वर्णन करते हैं - एक अलग तालिका में परिवर्तनों का एक संक्षिप्त सारांश लिखें - एसक्यूएल 2008 की चेंज ट्रैकिंग सुविधा क्या है। फिर ग्राहक सभी परिवर्तनों का ऑडिट प्राप्त करने के लिए केवल परिवर्तन तालिका से पूछ सकते हैं। – Cheeso

2

SQL सर्वर 2008 में, आपके पास चेंज ट्रैकिंग है जिसे आप ट्रैक, अद्यतन या हटाते समय ट्रैक कर सकते हैं। यह ट्रैक करेगा कि घटना हुई है, जो रिकॉर्ड करता था और वैकल्पिक रूप से कौन से कॉलम बदल दिए गए थे, लेकिन मूल्य (पहले और बाद में) नहीं। यह आमतौर पर ज्ञात परिवर्तित डेटा के साथ थोक प्रक्रियाओं को करने के लिए प्रयोग किया जाता है।

परिवर्तन ट्रैकिंग में आप परिवर्तनों को पकड़ने के लिए प्रतिधारण अवधि निर्धारित करते हैं, आमतौर पर एक अवधि जो ट्रैक की गई तालिकाओं की किसी भी प्रसंस्करण को अवधारण अवधि के भीतर सुनिश्चित करती है।

वैकल्पिक रूप से आपके पास (फिर से, SQL 2008 में) डेटा कैप्चर बदलें जो अधिक बारीक है और वास्तविक परिवर्तन रिकॉर्ड करता है। हालांकि, यह केवल एक उद्यम सुविधा है।

आप आसानी से परिवर्तन पर नज़र रखने या परिवर्तन डेटा कैप्चर प्रश्नों को चलाने के लिए एक .NET अनुप्रयोग बना सकते हैं।

यहाँ दोनों

Change Tracking

Change Data Capture

अधिकांश भाग के लिए पर अधिक जानकारी के लिए एक लिंक है, ट्रैकिंग बदलें शायद सबसे अच्छा विकल्प होने जा रहा है - साथ ही इसकी के सभी संस्करणों में काम करता है एसक्यूएल सर्वर 2008.

यदि आप इसे 2005 या उससे नीचे में प्राप्त करना चाहते हैं, तो आप मूल रूप से प्रत्येक तालिका के लिए टेबल बना सकते हैं जिसे आप ट्रैक करना चाहते हैं और इसमें मान डालने के लिए एक ट्रिगर है सम्मिलित करने, अद्यतन करने, हटाने पर ट्रैकिंग तालिका। फिर इसे साफ़ करने की प्रक्रिया है। यह मूल रूप से आपके लिए चेंज ट्रैकिंग क्या करता है।

+0

हम्म ... हम इस बिंदु पर केवल 2005 का उपयोग कर रहे हैं। मैं शायद 2008 में धक्का और उन्नयन कर सकता हूं, लेकिन हमारे क्यूए विभाग शिकायत कर सकता है। प्रतिबिंबित प्रकार तालिका का आपका सुझाव, काम कर सकता है।अधिकांश भाग के लिए ट्रिगर्स और ऑडिट टेबल का उपयोग करके हमारी सभी टेबलों का ऑडिट किया जाता है। उनमें से प्रत्येक परिवर्तन लॉग इन हो जाता है। – CuppM

+0

लेकिन ऑडिट टेबल का उपयोग करने के लिए पृष्ठभूमि थ्रेड की आवश्यकता होगी जो लगातार उन तालिकाओं को चुनाव करे। मैंने एमएसडीएन फॉर्मों में एक ही प्रश्न पोस्ट किया (http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=4209397&SiteID=17)। किसी ने सिस्टम का सुझाव दिया। डेटा। SQL। SQLNotificationRequest। उस पर कोई विचार? – CuppM

+0

एफवाईआई: SQL अधिसूचना सेवाएं, जो SQLNotificationRequest द्वारा आवश्यक है, को SQL 2008 में बहिष्कृत किया गया है, 2008 से रिलीज़ में उपलब्ध नहीं होगा। Cite: http://blogs.technet.com/andrew/archive/2008/10/21 /sql-server-2008-notification-services.aspx उस पर आधारित मैं आपको अन्य विकल्पों को देखने की सलाह दूंगा। – Cheeso

0

मुझे लगता है कि मैंने इस सवाल को गलत तरीके से पढ़ा है।

ऐसा लगता है कि यह लॉकिंग नियंत्रण के साथ एक मानक बहु उपयोगकर्ता अनुप्रयोग है। तब उपयोगकर्ता लॉग सर्वर (सब्सक्राइब) पर डेटा तक पहुंचता है। उपयोगकर्ता लॉग ऑफ (सदस्यता छोड़ें)।

या यह एक डिस्कनेक्ट किया गया एप्लिकेशन है जहां आप परिवर्तनों को सिंक करना चाहते हैं?

डिस्कनेक्ट किए गए एप्लिकेशन के लिए आप SQL सर्वर के लिए syncservices का उपयोग कर सकते हैं।

इसके अलावा, केवल LINQ से इकाइयों का उपयोग करें और जब आप ऑब्जेक्ट परिवर्तनों को सहेजते हैं तो आप संघर्षों को संभाल सकते हैं। LINQ द्वारा उत्पादित प्रश्नों को निष्पादित करने के लिए आप प्रत्येक तालिका में TIMESTAMP कॉलम जोड़ सकते हैं लेकिन इसकी आवश्यकता नहीं है।

+0

यह एक "मानक बहु उपयोगकर्ता अनुप्रयोग" है। मैं LINQ का उपयोग नहीं कर रहा हूं। हम कोडस्मिथ में कस्टम लुढ़का हुआ टेम्पलेट्स (नेटटीयर से प्रभावित) का उपयोग कर रहे हैं, इसलिए हम डेटा एक्सेस क्लासेस और लाइब्रेरीज़ बना सकते हैं जो पूर्ण नेट फ्रेमवर्क और कॉम्पैक्ट फ्रेमवर्क दोनों पर चलते हैं। – CuppM

7

SQL तालिका में परिवर्तनों के लिए निगरानी करने या SQL 2005+ में रिकॉर्ड करने के लिए आप SQLDependency क्लास का उपयोग कर सकते हैं।

यह एएसपी.नेट या मध्यम श्रेणी की सेवा में उपयोग के लिए लक्षित है जहां एक सर्वर डेटाबेस के खिलाफ सक्रिय सदस्यता प्रबंधित कर रहा है - कई सैकड़ों ग्राहक सब्सक्रिप्शन प्रबंधित नहीं करते हैं। जिन ग्राहकों का आप उल्लेख कर रहे हैं, उनके अधिकतम संख्या के आधार पर आप कैश पूलिंग सेवा बनाना चाहते हैं जो आपके क्लाइंट के लिए SQL के विरुद्ध अधिसूचना सदस्यता प्रबंधित कर सकता है।

इसके अंदर SqlNotificationRequest का उपयोग करता है जो सेवा ब्रोकर का उपयोग करता है, अधिसूचना सेवाओं नहीं। इस प्रकार, इस, एसक्यूएल 2008 को आगे जाने आदि काम करना चाहिए

MSDN for SqlDependency

void Initialization() 
{ 
    // Create a dependency connection. 
    SqlDependency.Start(connectionString, queueName); 
} 

void SomeMethod() 
{ 
    // Assume connection is an open SqlConnection. 

    // Create a new SqlCommand object. 
    SqlCommand command=new SqlCommand(
    "SELECT ShipperID, CompanyName, Phone FROM dbo.Shippers", 
    connection); 

    // Create a dependency and associate it with the SqlCommand. 
    SqlDependency dependency=new SqlDependency(command); 
    // Maintain the refence in a class member. 

    // Subscribe to the SqlDependency event. 
    dependency.OnChange+=new OnChangeEventHandler(OnDependencyChange); 

    // Execute the command. 
    command.ExecuteReader(); 
    // Process the DataReader. 
} 

// Handler method 
void OnDependencyChange(object sender, 
    SqlNotificationsEventArgs e) 
{ 
    // Handle the event (for example, invalidate this cache entry). 
} 

void Termination() 
{ 
    // Release the dependency. 
    SqlDependency.Stop(connectionString, queueName); 
} 

"Using and Monitoring SQL 2005 Query Notifications" लेख है कि चरणों के माध्यम से बात करती है (उदाहरण के रूप में एक वेब एप्लिकेशन का उपयोग करके) इसे अपने कोड में स्थापित करने के लिए ऊपर सेवा ब्रोकर की सदस्यता लेने के लिए आवश्यक उचित SQL अनुमतियों के साथ-साथ।

एक ASP.NET (web caching) कक्षा वेब परिदृश्यों के लिए भी उपलब्ध है।

+0

एसक्लड पर निर्भरता का उपयोग न करें! यह आपके द्वारा ट्रैक किए गए डेटाबेस में कचरा छोड़ देता है और खुद के बाद सफाई नहीं करता है। यह उत्तर देखें: http://stackoverflow.com/questions/8511806/how-do-i-clean-sqldependency-from-sql-server-memory/28148136#28148136 – dyatchenko

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