मुझे अपने डेटाबेस में सभी विभाजित तालिकाओं की सूची कैसे मिलेगी?


जवाबों:


21

यह क्वेरी आपको वह देनी चाहिए जो आप चाहते हैं:

select distinct t.name
from sys.partitions p
inner join sys.tables t
on p.object_id = t.object_id
where p.partition_number <> 1

sys.partitionsकैटलॉग दृश्य टेबल और सबसे अनुक्रमित के लिए सभी विभाजनों की एक सूची देता है। बस sys.tablesटेबल पाने के लिए जोइन करें।

सभी तालिकाओं में कम से कम एक विभाजन होता है, इसलिए यदि आप विशेष रूप से विभाजित तालिकाओं की तलाश कर रहे हैं, तो आपको इस क्वेरी को बंद sys.partitions.partition_number <> 1(गैर-विभाजित तालिकाओं के लिए, partition_numberहमेशा 1 के बराबर है) फ़िल्टर करना होगा ।


इसने 50K ऑब्जेक्ट्स लौटाए और इसके बारे में कुछ भी मुझे सही नहीं लगा। हम sql 2005 से 2008 R2 के लिए एक Peoplesoft Finance db अपग्रेड के बीच में हैं और ऐसा लगता है कि लोगों के टूल का नया संस्करण पार्टीशन टेबल का समर्थन नहीं करता है। क्या किसी अन्य तालिका की पहचान करने का कोई तरीका है?
आरके कुप्पला

1
@yogirk तो क्षमा करें, वहाँ टाइपो। मेरा संपादन देखें। इसके बजाय partition_idअपने कहां खंड में आप की जरूरत partition_number। मैं क्षमाप्रार्थी हूं।
थॉमस स्ट्रिंगर

संपादन के लिए धन्यवाद और मुझे खुशी है कि निपटने के लिए कुछ टेबल हैं, जैसे मुझे उम्मीद थी :)
RK Kuppala

@yogirk उसके साथ मज़े करो!
थॉमस स्ट्रिंगर

4
यहां एक त्रुटि है - तालिका अभी भी विभाजित की जा सकती है (पीएफ और पीएस का उपयोग करके) लेकिन एकल विभाजन है। तो उन तालिकाओं के लिए क्वेरी गलत परिणाम देती है
ओलेग डॉक

29

मिथिंक एक बेहतर क्वेरी निम्नानुसार है:

select object_schema_name(i.object_id) as [schema],
    object_name(i.object_id) as [object],
    i.name as [index],
    s.name as [partition_scheme]
    from sys.indexes i
    join sys.partition_schemes s on i.data_space_id = s.data_space_id

यह विभाजन योजना की पहचान करने के लिए 'उचित' जगह को देखता है: sys.partition_schemesइसमें सही कार्डिनैलिटी (कोई ज़रूरत नहीं है distinct), यह केवल विभाजित ऑब्जेक्ट (फ़िल्टरिंग whereक्लॉज़ की कोई आवश्यकता नहीं ) दिखाता है , यह स्कीमा नाम और विभाजन योजना नाम को प्रोजेक्ट करता है। यह भी ध्यान दें कि यह प्रश्न मूल प्रश्न पर एक दोष को उजागर करता है: यह तालिकाएँ नहीं हैं जो विभाजित हैं, लेकिन अनुक्रमित (और इसमें सूचकांक 0 और 1, उर्फ ​​हीप और क्लस्टर इंडेक्स शामिल हैं)। एक तालिका में कई अनुक्रमणिका हो सकती हैं, कुछ में विभाजन नहीं है।


3
यह 1 के बजाय सही उत्तर है - खाते में लेने पर अगर फाइलग्राफ के बजाय टेबल पर विभाजन योजना है
ओलेग डॉक

3

खैर, फिर कैसे 2 के संयोजन के बारे में:

select 
    object_schema_name(i.object_id) as [schema],
    object_name(i.object_id) as [object_name],
    t.name as [table_name],
    i.name as [index_name],
    s.name as [partition_scheme]
from sys.indexes i
    join sys.partition_schemes s on i.data_space_id = s.data_space_id
    join sys.tables t on i.object_id = t.object_id    
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.