একটি টেবিল স্পেস থেকে যৌক্তিক স্থান পুনরুদ্ধার করা


11

আমার কাছে ডেটা নামে একটি টেবিল স্পেস রয়েছে এবং এটি স্বয়ংক্রিয়ভাবে প্রসারিত হিসাবে মিথ্যা হিসাবে সেটআপ করা হয়। এই টেবিল স্পেসে দুটি ডেটাফাইল রয়েছে এবং এটি সেট আপ করা হয়েছে যাতে এটি 350 গিগাবাইট দৈহিক স্থান নেয়।

এক সপ্তাহ আগে আমি ব্যবহারকারী_সামগ্রী এবং dba_data_files অনুসন্ধান করেছি এবং লক্ষ্য করেছি যে এটিতে 20% উপলব্ধ লজিক্যাল স্পেস রয়েছে। তারপরে আমি একটি ক্লিনআপ নিয়ে এগিয়ে এসেছি এবং এই টেবিল স্পেসের টেবিলগুলি থেকে অনেক রেকর্ড সরিয়েছি। আমরা উপলভ্য স্থানের একটি বড় বৃদ্ধি প্রত্যাশা করছিলাম। দুর্ভাগ্যক্রমে আমি যখন মতামতগুলি অনুসন্ধান করেছি তখন আমি লক্ষ্য করেছি যে উপলব্ধ স্থানটি এখন 20.5%।

এটি কি ডেটা বিভাজনের কারণে হতে পারে? আমরা কি কোনওভাবে টেবিল স্পেসটি "ডিফ্র্যাগ" করতে এবং হারিয়ে যাওয়া জায়গাটি পুনরুদ্ধার করতে পারি? নাকি আমাদের টেবিল স্পেসটি আবার শুরু থেকে পুনরায় তৈরি করতে হবে?

উত্তর:


14

আপনি যখন রেকর্ডগুলি মুছবেন তখন সেগমেন্টটি স্বয়ংক্রিয়ভাবে সংক্রামিত হয় এমন কিছুই নেই, তাই স্থানটি পুনরুদ্ধার করতে আপনাকে একটি বিভাগ সঙ্কুচিত করতে হবে। এখানে নষ্ট স্থান পুনর্বিবেচনা সম্পর্কিত 11.2 প্রশাসকের গাইড থেকে উদ্ধৃত অংশ :

সময়ের সাথে সাথে, টেবিল স্পেসের মধ্যে থাকা অবজেক্টগুলিতে আপডেট এবং ডিলিটগুলি খালি জায়গার পকেট তৈরি করতে পারে যা পৃথকভাবে নতুন ডেটার জন্য পুনরায় ব্যবহারের জন্য যথেষ্ট বড় নয়। এই ধরণের ফাঁকা স্থানটিকে খণ্ডিত মুক্ত স্থান হিসাবে উল্লেখ করা হয়।

খণ্ডিত মুক্ত স্থান সহ অবজেক্টগুলির ফলে অনেকগুলি অপচয়যোগ্য স্থান তৈরি হতে পারে এবং এটি ডাটাবেসের কর্মক্ষমতাকে প্রভাবিত করতে পারে। এই স্থানটি ডিফ্র্যাগমেন্ট এবং পুনরায় দাবি জানাতে পছন্দসই উপায় হ'ল একটি অনলাইন অংশ সঙ্কুচিত করা। এই প্রক্রিয়াটি উচ্চ জলের চিহ্নের নীচে খণ্ডিত মুক্ত স্থানকে একীভূত করে এবং বিভাগটি সংযোগ করে। সংযোগের পরে, উচ্চ জলের চিহ্নটি সরানো হয়, ফলস্বরূপ উচ্চ জলের চিহ্নের উপরে নতুন মুক্ত স্থান তৈরি হয়। উঁচু জলের চিহ্নের ওপরের সেই স্থানটি পরে অবনমিত হয়। বেশিরভাগ অপারেশন চলাকালীন সেগমেন্টটি কোয়েরি এবং ডিএমএলের জন্য উপলব্ধ থাকে এবং কোনও অতিরিক্ত ডিস্কের স্থান বরাদ্দ করার প্রয়োজন হয় না।

আরও একই পৃষ্ঠায় আপনি এটি পড়তে পারেন:

অংশটি সঙ্কুচিত করা একটি অনলাইন, অন্তর্নিহিত অপারেশন। ডিএমএল ক্রিয়াকলাপ এবং কোয়েরিগুলি সেগমেন্ট সঙ্কুচিত হওয়ার ডেটা মুভমেন্ট পর্বের সময় জারি করা যেতে পারে। সংক্ষিপ্ত অপারেশন শেষে সংযোগকারী ডিএমএল ক্রিয়াকলাপগুলি অল্প সময়ের জন্য অবরুদ্ধ করা হয়, যখন স্থানটি হ্রাস করা হয়। সঙ্কুচিত অপারেশন চলাকালীন সূচিগুলি বজায় রাখা হয় এবং অপারেশন সম্পূর্ণ হওয়ার পরে ব্যবহারযোগ্য হয়। অংশটি সঙ্কুচিত হওয়ার জন্য অতিরিক্ত ডিস্কের স্থান বরাদ্দ করতে হবে না।

অংশটি সঙ্কুচিত করা উচ্চ জলের চিহ্নের উপরে এবং নীচে উভয়ই অব্যবহৃত স্থানটিকে পুনরায় দাবি করে। বিপরীতে, স্পেস ডিএলোকেশন কেবল উচ্চ জলের চিহ্নের উপরে অব্যবহৃত স্থানটিকে পুনরায় দাবি করে। সঙ্কুচিত ক্রিয়াকলাপগুলিতে, ডিফল্টরূপে, ডাটাবেস বিভাগটি সংযোগ করে, উচ্চ জলের চিহ্নকে সামঞ্জস্য করে এবং পুনঃনির্দেশিত স্থানটি ছেড়ে দেয়।

পৃষ্ঠাটিতে উদাহরণ সহ আরও অনেক তথ্য অন্তর্ভুক্ত রয়েছে।

"সেগমেন্ট স্থান এবং হাই ওয়াটার মার্ক" ধারণা থেকে অধ্যায় গাইড এছাড়াও সহায়ক হতে পারে।


9

হ্যাঁ, এটি খণ্ডিত হওয়ার কারণে হবে।

স্থানটি পুনরায় দাবি করতে, প্রথমে নীচের ক্যোয়ারী সহ টেবিল স্পেসে টেবিলের একটি তালিকা পান (পার্টিশন উপেক্ষা করে - আপনি যদি তাদের প্রশ্নটি ব্যবহার করেন তবে সম্পাদনা করুন):

select distinct table_name from dba_tables where tablespace_name = 'DATA';

তারপরে প্রতিটি টেবিলের জন্য, সারি চলাচল সক্ষম করুন:

alter table TABLEINDATAPARTITION enable row movement;

তারপরে আপনি টেবিলটি সঙ্কুচিত করতে পারেন:

alter table TABLEINDATAPARTITION shrink space;

তারপরে ডেটা ফাইলগুলি সঙ্কুচিত করুন:

alter database datafile '/path/to/my/file/data01.dbf' resize 20480M;

ডেটা ফাইলের নামগুলি DBA_DATA_FILESভিউ থেকে পাওয়া যাবে , যা আপনি ইতিমধ্যে অবগত আছেন।


দুর্দান্ত, একটি বাস্তব উত্তর। +1
লেফ রিফেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.