আমি কীভাবে আমার ডাটাবেসে বিভাজনযুক্ত সমস্ত সারণীর তালিকা পেতে পারি?


উত্তর:


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 অবজেক্টগুলি ফিরিয়ে এনেছে এবং এটি সম্পর্কে আমার কাছে ঠিক মনে হয় না। আমরা একটি পিপলসফ্ট ফিনান্স ডিবি আপগ্রেডের মাঝখানে রয়েছি বর্গ 2005 থেকে 2008 আর 2 পর্যন্ত এবং লোকাল সরঞ্জামগুলির নতুন সংস্করণটি বিভাজনযুক্ত টেবিলগুলিকে সমর্থন করে না বলে মনে হয়। ভাগ করা টেবিলগুলি সনাক্ত করার জন্য অন্য কোনও উপায় আছে?
আর কে কুপাল

1
@ যোগির্ক তাই দুঃখিত, সেখানে টাইপ করুন। আমার সম্পাদনা দেখুন। partition_idআপনার যেখানে প্রয়োজন তার ক্লুজের পরিবর্তে partition_number। আমার ক্ষমা।
থমাস স্ট্রিংগার

সম্পাদনার জন্য ধন্যবাদ এবং আমি আনন্দিত যে মোকাবেলা করার জন্য কয়েকটি টেবিল রয়েছে, যেমনটি আমি প্রত্যাশা করেছি :)
আর কে কুপাল

@ যোগির্ক এর সাথে মজা করুন!
থমাস স্ট্রিংগার

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
এটি প্রথম উত্তরটির পরিবর্তে সঠিক উত্তর - টেবিলটি ফাইলগ্রুপের পরিবর্তে বিভাজন স্কিম চালু থাকলে তা বিবেচনায় নেওয়া
ওলেগ ডক

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    
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.