हमेशा उपलब्धता समूह पर, हमेशा उपयोगकर्ता को केवल उदाहरण पढ़ने के लिए पुनर्निर्देशित करें


9

हमारे पास प्राइमरी और रीड-इनेबल्ड सेकंडरी के साथ ऑलवेज ऑन उपलब्धता ग्रुप है। हमारे पास कार्यान्वयन टीम के लिए एक उपयोगकर्ता है जो डेटाबेस का उपयोग उस डेटा की शुद्धता की जांच करने के लिए करता है जिसे वे डेटाबेस में रखना चाहते हैं।

उपयोगकर्ताओं को केवल डेटाबेस से पढ़ने के अधिकार हैं, लेकिन जब वे एजी लिसनर के माध्यम से (एसएसएमएस के माध्यम से) कनेक्ट होते हैं तो वे हमेशा सक्रिय नोड से जुड़ते हैं।

मैंने उन्हें सीधे केवल उदाहरण तक पढ़ने के लिए पहुंचाने की कोशिश की है, लेकिन वे अपने तरीके से फंस गए हैं और एक या दो दिन बाद वे फिर से सक्रिय नोड पर वापस आ गए हैं।

क्या SQL सर्वर के लिए यह कहने का कोई तरीका है कि यह उपयोगकर्ता हमेशा इरादे से जा रहा है और उन्हें वहां पुनर्निर्देशित कर रहा है?

नोट: मैंने अतिरिक्त कनेक्शन मापदंडों में 'ApplicationIntent = ReadOnly' की स्थापना की कोशिश की है, लेकिन यह द्वितीयक नोड पर पुनर्निर्देशित नहीं होता है, और आदर्श समाधान नहीं है क्योंकि वे अनिवार्य रूप से इसे नए शुरुआत के लिए सेट करना भूल जाएंगे।

एसक्यूएल सर्वर 2012 एंटरप्राइज, उपलब्धता समूह 1 प्राथमिक, तुल्यकालिक प्रतिबद्ध के साथ 1 पठनीय माध्यमिक।

मैं किसी उपयोगकर्ता से किसी लिंक किए गए सर्वर से या किसी अन्य सर्वर से जुड़ने का इरादा नहीं कर रहा हूं। उपयोगकर्ता SSMS (कोई अन्य एप्लिकेशन) के माध्यम से सीधे डेटाबेस से जुड़ते हैं और मैं चाहूंगा कि एजी लिसनर (या वहां आसपास कुछ) उस उपयोगकर्ता को एक माध्यमिक नोड तक निर्देशित करने में सक्षम हो, यदि कोई उपलब्ध है (क्योंकि यह केवल वहां पहुंच पढ़ चुका है) इसका कोई मतलब नहीं है कि प्राथमिक पहुँच) उपयोगकर्ता के पास कुछ भी करने के लिए नहीं है, क्योंकि वे मशीनों के चारों ओर घूमते हैं और आवेदन के इरादे को जोड़ना भूल जाएंगे। इसके अलावा मैं यह भी जोड़ता हूं कि अतिरिक्त कनेक्शन पैरामीटर हमेशा आपको माध्यमिक नोड तक निर्देशित नहीं करता है।


नीचे दी गई टिप्पणियों के अलावा, आपको उस डेटाबेस में डेटाबेस निर्दिष्ट करने की आवश्यकता है जिसमें आप जुड़ रहे हैं।
swasheck

जवाबों:


4

मेरे पास आपके पूरे सवाल का जवाब नहीं है (हालाँकि मैंने आज एक ऐसे ही सवाल का जवाब दिया था https://dba.stackexchange.com/a/137844/36812 ) लेकिन आपने बताया कि ApplicationIntent = ReadOnly का उपयोग करने से काम नहीं चलता ठीक से।

क्या आपने केवल राउटिंग यूआरएल पढ़ा है? क्योंकि यह बॉक्स से बाहर नहीं किया गया है और यदि आप ऐसा नहीं करते हैं तो ये सेटिंग्स और वह झंडा काम नहीं करेगा। मुझे लगता है कि अगर आपको वह काम मिल गया तो आप अपनी आवश्यकताओं का पुनर्मूल्यांकन शुरू कर सकते हैं।

MSDN https://msdn.microsoft.com/en-us/library/hh710054.aspx पर निर्देश और सबसे आसानी से PowerShell में किया गया।

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"

Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica

1

Ste, आप जो चाहते हैं वह एक बिंदु है और समाधान या एक सेटिंग पर क्लिक करें। दुर्भाग्य से, इनमें से कोई भी वर्तमान में "बंद शेल्फ" रूप में मौजूद नहीं है। यह वास्तविक रूप से अच्छा होगा यदि Microsoft इसे एक पंजीकृत सर्वर के लिए कनेक्शन सेटिंग्स में शामिल करता है ताकि इसे बचाया जा सके, लेकिन अफसोस कि वे नहीं करते हैं।

यह आपको दो विकल्पों में से एक के साथ छोड़ देता है:

  • कुछ अपने आप को लिखें
  • उपयोगकर्ता व्यवहार बदलें

मैं एसएनएसी - एसक्यूएल नेटिव एक्सेस क्लाइंट के लिए एक माइक्रोसॉफ्ट डाउनलोड भर में भाग गया, कुछ ऐसी चीज की तलाश में जो आपकी आवश्यकता को पूरा कर सके। यह आपको रीड-ओनली सेकेंडरी तक सीधे पहुंचने के लिए उपयोगकर्ताओं को बटन देने के लिए एक छोटा सा कोड लिखने की अनुमति देगा। https://blogs.msdn.microsoft.com/alwaysonpro/2013/08/02/connect-to-sql-server-using-application-intent-read-only/

अन्य संभावना उपयोगकर्ताओं को SSMS के माध्यम से कनेक्ट करते समय कनेक्शन पैरामीटर संवाद को भरने के लिए मजबूर करना है। इस व्यवहार को बाध्य करने के लिए, आपको प्राथमिक और द्वितीयक सर्वर पर लॉगिन को संशोधित करना होगा, प्राथमिक से कनेक्ट करने से इनकार करना और सेकेंडरी से कनेक्ट करने की अनुमति देना होगा। आप सर्वर की स्थिति की जाँच करने और तदनुसार लॉगिन सेट करने के लिए SQL एजेंट नौकरी का उपयोग कर सकते हैं।

बेशक, मैंने बाद में करने का प्रयास नहीं किया, लेकिन सिद्धांत रूप में यह काम करना चाहिए।


-2

ऐसा लगता है कि यह अब SQL Server 2019 में एक विशेषता है।

से माध्यमिक प्राथमिक प्रतिकृति को पढ़ने / लिखने कनेक्शन पुनर्निर्देशन (हमेशा पर उपलब्धता समूह) आधिकारिक दस्तावेज में:

एसक्यूएल सर्वर 2019 पूर्वावलोकन CTP 2.0 हमेशा प्राथमिक पर उपलब्धता समूहों के लिए रीडायरेक्शन को पढ़ने / लिखने के लिए प्राथमिक से माध्यमिक का परिचय देता है। रीडिंग / राइटिंग कनेक्शन रीडायरेक्शन किसी भी ऑपरेटिंग सिस्टम प्लेटफॉर्म पर उपलब्ध है। यह क्लाइंट अनुप्रयोग कनेक्शन को कनेक्शन स्ट्रिंग में निर्दिष्ट लक्ष्य सर्वर की परवाह किए बिना प्राथमिक प्रतिकृति को निर्देशित करने की अनुमति देता है।

उदाहरण के लिए, कनेक्शन स्ट्रिंग एक द्वितीयक प्रतिकृति को लक्षित कर सकता है। उपलब्धता समूह (एजी) प्रतिकृति और कनेक्शन स्ट्रिंग में सेटिंग्स के कॉन्फ़िगरेशन के आधार पर, कनेक्शन स्वचालित रूप से प्राथमिक प्रतिकृति पर पुनर्निर्देशित किया जा सकता है।


मुझे यकीन नहीं है कि मैं देख सकता हूं कि यह नई सुविधा यहां कैसे प्रासंगिक है। ओपी का परिदृश्य उस सुविधा से भिन्न प्रतीत होता है जिसका यह उद्देश्य है। ओपी एक माध्यमिक (रीड-ओनली) नोड के लिए रीड-ओनली कनेक्शनों को रीडायरेक्ट करना चाहता है, जबकि इस नई सुविधा के लिए दस्तावेज़ीकरण कहता है कि यह रीडायरेक्ट / राइट टू प्राइमरी नोड के रीडायरेक्टिंग के लिए है। क्या आप इस बारे में विस्तार से बता सकते हैं कि प्रश्न में समस्या को हल करने के लिए नई कार्यक्षमता का उपयोग कैसे किया जा सकता है?
एंड्री एम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.