मुझे अपने डेटाबेस में सभी विभाजित तालिकाओं की सूची कैसे मिलेगी?
मुझे किस सिस्टम टेबल / DMV को देखना चाहिए?
मुझे अपने डेटाबेस में सभी विभाजित तालिकाओं की सूची कैसे मिलेगी?
मुझे किस सिस्टम टेबल / DMV को देखना चाहिए?
जवाबों:
यह क्वेरी आपको वह देनी चाहिए जो आप चाहते हैं:
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 के बराबर है) फ़िल्टर करना होगा ।
partition_id
अपने कहां खंड में आप की जरूरत partition_number
। मैं क्षमाप्रार्थी हूं।
मिथिंक एक बेहतर क्वेरी निम्नानुसार है:
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, उर्फ हीप और क्लस्टर इंडेक्स शामिल हैं)। एक तालिका में कई अनुक्रमणिका हो सकती हैं, कुछ में विभाजन नहीं है।
खैर, फिर कैसे 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