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


উত্তর:


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.