यदि आपको SQL सर्वर में त्रुटि संदेश 7707 मिलता है, तो इसका कारण यह है कि आप एक विभाजन योजना बनाने का प्रयास कर रहे हैं जो विभाजन फ़ंक्शन से मेल खाने के लिए पर्याप्त फ़ाइल समूह निर्दिष्ट नहीं करता है।
सौभाग्य से, इसे ठीक करना आसान है।
त्रुटि का उदाहरण
त्रुटि कुछ इस तरह दिखती है:
Msg 7707, Level 16, State 1, Line 1 The associated partition function 'CatsPartitionFunction' generates more partitions than there are file groups mentioned in the scheme 'CatsPartitionScheme'.
ऐसा क्यों हुआ?
मेरे मामले में, मैंने विभाजन योजना बनाते समय तीन फ़ाइल समूह निर्दिष्ट किए, लेकिन विभाजन फ़ंक्शन वास्तव में चार उत्पन्न करता है।
यहाँ वह कोड है जिसका उपयोग मैंने पार्टीशन फंक्शन और पार्टीशन स्कीम बनाने के लिए किया था।
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO
CREATE PARTITION SCHEME CatsPartitionScheme
AS PARTITION CatsPartitionFunction
TO (CatsFg1, CatsFg2, CatsFg3);
GO
मेरे विभाजन समारोह में तीन सीमा मान हैं, जिसके परिणामस्वरूप चार विभाजन होते हैं। मेरी विभाजन योजना केवल तीन फ़ाइल समूहों को निर्दिष्ट करती है (चार होने चाहिए)।
यह एक आसान गलती है, क्योंकि जब आप विभाजन फ़ंक्शन बनाते हैं, तो आपके द्वारा निर्दिष्ट सीमा मानों की संख्या वास्तव में परिणामी विभाजनों की संख्या से एक कम होती है। दूसरे शब्दों में, बनाए गए विभाजनों की संख्या सीमा मानों की संख्या के बराबर होगी + 1.
यदि आप पूरी तरह से गेंद पर नहीं हैं, तो आप अनजाने में सीमा मानों के साथ फ़ाइल समूहों की संख्या का मिलान कर सकते हैं, यह भूलकर कि आपको एक और फ़ाइल समूह निर्दिष्ट करने की आवश्यकता है।
त्रुटि ठीक करें
तो इस त्रुटि को ठीक करने के लिए, मुझे बस इतना करना है कि विभाजन योजना बनाते समय एक और फ़ाइल समूह निर्दिष्ट करें।
मेरा कोड इस तरह दिखना चाहिए:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO
CREATE PARTITION SCHEME CatsPartitionScheme
AS PARTITION CatsPartitionFunction
TO (CatsFg1, CatsFg2, CatsFg3, CatsFg4);
GO
इस मामले में, मैंने बस CatsFg4
. जोड़ा है फ़ाइल समूह की सूची में। यह स्पष्ट रूप से मानता है कि निर्दिष्ट फ़ाइल समूह मौजूद है।
यह भी ध्यान दें कि आपको एक नया फ़ाइल समूह बनाने की आवश्यकता नहीं है। आप फ़ाइल समूह साझा कर सकते हैं (अर्थात एक फ़ाइल समूह में कई विभाजन मैप किए गए हैं)।
इसलिए, मैं यह कर सकता था:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO
CREATE PARTITION SCHEME CatsPartitionScheme
AS PARTITION CatsPartitionFunction
TO (CatsFg1, CatsFg2, CatsFg3, CatsFg3);
GO
ध्यान दें कि अंतिम दो फ़ाइल समूह समान हैं (CatsFg3
)।
लेकिन आपको वहां रुकने की जरूरत नहीं है। एक और तरीका है सब फ़ाइल समूह में मैप किए गए विभाजन।
इस मामले में हम ALL
. का उपयोग कर सकते हैं तर्क, और केवल एक फ़ाइल समूह निर्दिष्ट करें:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (1, 100, 10000);
GO
CREATE PARTITION SCHEME CatsPartitionScheme
AS PARTITION CatsPartitionFunction
ALL TO (CatsFg1);
GO