Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

कैसे ठीक करें "संबंधित विभाजन फ़ंक्शन योजना में उल्लिखित फ़ाइल समूहों की तुलना में अधिक विभाजन उत्पन्न करता है" संदेश 7707 SQL सर्वर में

यदि आपको 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्रिस्टल रिपोर्ट बनाम माइक्रोसॉफ्ट एसक्यूएल सर्वर रिपोर्टिंग सेवाएं

  2. मापन क्वेरी प्रदर्शन:निष्पादन योजना क्वेरी लागत बनाम समय लिया गया

  3. sqlAlchemy के साथ संग्रहीत कार्यविधियाँ

  4. SQL सर्वर अनुक्रमणिका का पुनर्निर्माण और पुनर्गठन करता है

  5. एक SQL सर्वर से दूसरे में तालिका डेटा निर्यात करें