ওরাকল ডাটাবেজ অ্যাডমিনিস্ট্রেশন
ওরাকল ডাটাবেজ ব্যবস্থাপনায় ডাটাবেজের মাধ্যমে দখল করা স্টোরেজের সুষম ব্যবহার অত্যন্ত গুরুত্বপূর্ণ একটি কাজ। ডিবিএ এ কাজটি যত্নের সাথে করতে হয়। আজকের এ আলোচনায় আমাদের প্রয়াস থাকবে স্টোরেজ ব্যবস্থাপনার খুঁটিনাটি বিভিন্ন দিক পাঠকের সামনে তুলে ধরা।
ওরাকল ডাটাবেজের ৩টি উপাদান- কন্ট্রোল ফাইল, ডাটা ফাইল ও লক ফাইল রয়েছে, যা বিগত আলোচনায় উল্লেখ করা হয়েছিল। অবশ্যই পাঠকের মনে এই প্রশ্ন আসা অবান্তর নয় যে, এ সব ফাইল কিভাবে হার্ডড্রাইভে স্থান করে নেয়। মূলত ওরাকল ডাটাবেজ টেবিলস্পেস, ডাটাফাইল, সেগমেন্ট, এক্সটেন্ট এবং ডাটা ব্লকে বিভক্ত।
হার্ডড্রাইভে ইউজার কর্তৃক সরবরাহ করা ডাটা ডাটা ব্লকে স্থান করে নেয়। বিগত আলোচনায় লক ফাইল ও কন্ট্রোল ফাইল ডাটা ব্লকে কিভাবে স্থান করে নেয় তার বিশদ বর্ণনা দেয়া হয়েছিল। এবার দেখা যাক, অন্য ডাটাবেজ অবজেক্টগুলো কি এবং তা কিভাবে ম্যানেজ করা হয়ে থাকে।
সেগমেন্টের প্রকারভেদ :
সেগমেন্ট ডাটাবেজে স্থান দখলকারী একটি অবজেক্ট, যা ডাটা ফাইলে নিজেদের স্থান করে নেয়। এখানে সেগমেন্টের বিভিন্ন প্রকার এবং তাদের নিয়ে নানা প্রশ্নের সমাধান দেয়া হয়েছে।
টেবিল :
ডাটাবেজের সবচেয়ে কমন সংরক্ষণ পদ্ধতি হলো টেবিল। টেবিল সেগমেন্ট টেবিলে অথবা ডাটা কোনোরূপ ক্লাস্টার অথাব পার্টিশন না করেই সংরক্ষন করে। মূলত কোনো প্রকার অর্ডার মেইনটেন্ট না করেই টেবিল সেগমেন্টে ডাটা সংরক্ষণ করা হয়ে থাকে। একটি টেবিলের সব ডাটা অবশ্যই একটি একক টেবিল স্পেসে স্টোর করতে হবে। টেবিলের রো-এর ওপর একজন ডিবিএ খুব কমই নিয়ন্ত্রণ থাকে।
টেবিল পার্টিশন :
যখন কোনো টেবিলে একই সময় অনেক ইউজারের ব্যবহার বেড়ে যায়, তখন ডাটার প্রাপ্যতা একটি বড় সমস্যা হয়ে দেখা দেয়। এ সময়ে একটি একক টেবিলে ডাটা সংরক্ষণ না করে একে বিভিন্ন পার্টিশনে বিভক্ত করে ভিন্ন ভিন্ন টেবিল স্পেসে রাখে। একে বলে টেবিল পার্টিশন। যখন কোনো টেবিলকে পার্টিশন করা হয়, তখন প্রতিটি পার্টিশনকে আলাদা আলাদাভাবে একটি একক সেগমেন্ট হিসেবে ধরা হয়।
ক্লাস্টার :
টেবিলের মতোই ক্লাস্টার একটি ডাটা টাইপ সেগমেন্ট। কি কলাম ভ্যালুর ওপরে ভিত্তি করে ক্লাস্টারের রোগুলো স্টোর হয়ে থাকে। একটি ক্লাস্টারের অধীন একধিক টেবিল থাকতে পারে। এই টেবিলগুলো একই সেগমেন্টের আওতায় থাকে এবং একই স্টোরেজ চারিত্রিক বৈশিষ্ট্যতা শেয়ার করে। ইনডেক্স বা হেসিং অ্যালগরিদম দিয়ে ক্লাস্টার টেবিলের রো-এর অভ্যন্তরে ডাটা নিবিষ্ট বা এর অভ্যন্তর থেকে উদ্ধার করা হয়।
ইনডেক্স :
কোনো ইনডেক্সে সব এন্ট্রি একটি একক ইনডেক্স সেগমেন্টের আওতায় থাকে। যদি কোনো টেবিলের ৩টি পৃথক ইনডেক্স থাকে তবে অবশ্যই এরা ৩টি পৃথক ইনডেক্স সিগমেন্টের অধীনে থাকবে। এই সেগমেন্টের মূল উদ্দেশ্য হলো বিশেষ কি (Key) সমৃদ্ধ কোনো টেবিলে রো-এর লোকেশন নির্ণয় করা।
ইনডেক্স অর্গানাইজ টেবিল :
এখানে কি (Key) ভ্যালুর ওপরে ভিত্তি করে ডাটা সংরক্ষণ হয়ে থাকে। এর জন্য আলাদা করে লুকআপ টেবিলের প্রয়োজন হয় না। কারণ সব ডাটাই ইনডেক্স ট্রি থেকে সংগ্রহ হয়ে থাকে।
ইনডেক্স পার্টিশন :
একটি ইনডেক্সকে বিভিন্ন অংশে পার্টিশন করে তাদের বিভিন্ন টেবিল স্পেসের আওতায় রাখা হয়। এই ক্ষেত্রে প্রতিটি পার্টিশন আলাদা আলাদা সেগমেন্টের আওতায় এবং আলাদা টেবিল স্পেসের অধীনে থাকে। ইনডেক্স আইও কমানোই এই বিশেষ ইনডেক্সের প্রাথমিক কাজ।
আন্ডু সেগমেন্ট :
যখন ডাটাবেজে ডাটার কোনো পরিবর্তন ঘটে, তখন পরিবর্তন পূর্ববর্তী ডাটা ওরাকল যে সেগমেন্টে সংরক্ষণ করে তাকে বলা হয় আন্ডু সেগমেন্ট ।
টেম্পোরারি সেগমেন্ট :
যখন কোন ইউজার CREATE INDEX, SELECT DISTINCT, SELECT GROUP BY কমান্ড দেয়, তখন ওরাকল সার্ভার চেষ্টা করে মূল মেমরিতেই সর্ট অপারেশন সম্পন্ন করতে। যখন এই সর্ট অপারেশন সম্পন্ন করার জন্য আরো স্থানের প্রয়োজন হয়। তখন ইন্টারমিডিয়েট ফলাফল ডিস্কে সংরক্ষণ করার প্রয়োজনীয়তা দেখা দেন। এসব ইন্টারমিডিয়েট ফলাফল সংরক্ষণের জন্য টেম্পোরারি সেগমেন্টের প্রয়োজন হয়।
এলওবি সেগমেন্ট :
অনেক সময় দেখা যায়, কোনো টেবিলের কলামে লার্জ অবজেক্ট, যেমন : টেক্সট, ডকুমেন্ট, ছবি, ভিডিও ইত্যাদি রাখতে হয়। যদি কলাম এরূপ বড় হয় তখন ওরাকল সার্ভার একটি পৃথক সেগমেন্ট তৈরি করে এবং ওইসব ডাটা সংরক্ষণ করে থাকে। এইরূপ ডাটা রিট্রাইভ করার জন্য পয়েন্টার বা লোকেটার ব্যবহার করা হয় ।
নেসটেড টেবিল :
কোনো কোনো টেবিলের কলাম ইউজার ডিফাইন টেবিলকে ধারণ করে। এই ক্ষেত্রে কলামের অভ্যন্তরে অবস্থিত টেবিলকে বলা হয় নেসটেড টেবিল এবং এই টেবিল একটি পৃথক সেগমেন্টের আওতাধীন থাকে।
বুটস্টেম্প সেগমেন্ট :
এর আরেক নাম ক্যাশ সেগমেন্ট। ডাটাবেজ তৈরির সময় sql.bsq স্ক্রিপ্ট যখন রান করে তখন এই সেগমেন্টের সৃষ্টি হয়। যখন কোনো ডাটাবেজ ইনস্টেন্স দিয়ে ওপেন হয় তখন এই সেগমেন্ট ডাটা ডিকশনারি ক্যাশ উন্মুক্ত থেকে সহায়তা করে।
এক্সটেন্ট অ্যালোকেশন এবং ডিঅ্যালোকেশন :
একটি টেবিল স্পেসের অন্তর্গত ক্ষুদ্রতম অংশ হচ্ছে এক্সটেন্ট। একটি এক্সটেন্ট অ্যালোকেট হয় যখন সেগমেন্ট ক্রিয়েট, এক্সটেন্ড, অলটার্ড হয় আর ডিঅ্যালোকেট হয় যখন সেগমেন্ট ড্রপ, অলটার্ড এবং ট্রাংকেট হয়।
এক্সটেন্ট ব্যবহারের প্রক্রিয়া :
যখন কোনো টেবিলস্পেস তৈরি করা হয় তখন ওই টেবিল স্পেসের ডাটা ফাইলের একটি অংশ এর হেডার হিসেবে ব্যবহার হয়, যা মূলত এর প্রথম ব্লককেই হয়ে থাকে। যখন কোনো সেগমেন্ট তৈরি করা হয় তখন টেবিল স্পেসের খালি অংশে এক্সটেন্ডের জন্য বরাদ্দ হয়। পরস্পর কাছাকাছি অবস্থিত স্পেসকে যখন সেগমেন্ট ব্যবহার করে তখন তাকে বলা হয় ইউজড এক্সটেন্ট। যখন কোনো সেগমেন্ট ওই স্পেস ছেড়ে দেবে তখন ওই খালি এক্সটেন্ট জমা হবে ফ্রি এক্সটেন্ট পুলে, যা পরে সেগমেন্টের ব্যবহারের জন্য বরাদ্দ দেয়া হবে।
ডাটাবেজ ব্লক :
সবচেয়ে ছোট আই/ও(I/O) ইউনিট, যা এক বা একাধিক ওএস (অপারেটিং সিস্টেম) ব্লকের সমন্বয়ে গঠিত। টেবিল স্পেস তৈরির সময় একে সেট করতে হয়। DB_BLOCK_SIZE দিয়ে ডিফল্ট ব্লক সাইজ নির্ধারণ করা হয়।
ডাটাবেজ ব্লকের উপাদান :
এর উপাদান ৩টি। হেডার, ফ্রিস্পেস ও ডাটা।
ব্লক হেডার :
ব্লক হেডার ডাটাব্লক অ্যাড্রেস, টেবিল ডিরেক্টরি এবং ট্রানজেকশন স্লটের তথ্য সংরক্ষণ করে। এটা উপর থেকে নিচে সম্প্রসারিত হয়।
ডাটা স্পেস :
রো ডাটা নিচ থেকে উপরে ইনসার্ট হয়ে থাকে।
ফ্রি স্পেস :
ফ্রি স্পেস একটি ব্লকের মাঝামাঝি স্থানে অবস্থান করে যাতে হেডার এবং ডাটা স্পেস প্রয়োজনমতো সম্প্রসারিত থেকে পারে।
ব্লক স্পেস ইউটিলাইজেশন প্যারামিটার :
ব্লক স্পেস ইউটিলাইজেশন প্যারামিটার আমরা ডাটা ও ইনডেক্স সেগমেন্টের স্পেস ব্যবহার নিয়ন্ত্রণের কাজে লাগাতে পারি। যেসব প্যারামিটার আমরা ব্যবহার করতে পারি তা হলো INITRANS, MAXTRANS,PCTFREE,PCTUSED
কনকারেন্সি নিয়ন্ত্রণ প্যারামিটার : INITRANS, MAXTRANS কনকারেন্ট নিয়ন্ত্রণকারী প্যারামিটার। এই দুই প্রকারের প্যারামিটার সর্বোচ্চ এবং সর্বনিম্ন সংখ্যক ট্রানজিকশন স্লট নির্ণয়ে সহায়তা করে। কোন ব্লকে নির্দিষ্ট সময়ে কতবার পরিবর্তন হবে তার তথ্য ট্রাকজিকশন স্লট সংরক্ষণ করে। একটি ট্রানজিকশন শুধু একটি ট্রানজিকশন স্লটই করবে। এমনকি যদি সে বহু রো বা ইনডেক্স এন্ট্রির পরিবর্তন সাধন করে তবেও।
ইনিট্রান্স (INITRANS) :
সর্বনিম্ন কতবার ট্রানজিকশন সংঘটিত হবে তা এই প্যারামিটার দিয়ে নিয়ন্ত্রণ করা হয়। ডাটা সেগমেন্টের জন্য এর ডিফল্ট ভ্যালু-১ এবং ইনডেক্সের জন্য-২। উদাহরণস্বরূপ বলা যায়, যদি INITRANS ৩ সেট করা হয় তবে একই সময়ে তিনটি ট্রানজেকশন ডাটা ব্লকের পরিবর্তন সাধন করতে পারবে। যদি প্রয়োজন হয় তাহলে অতিরিক্ত স্লট ফ্রি স্পেস থেকে অ্যালোকেট করবে। যাতে আরও ট্রাকজিকশন সংঘটিত হতে পারে।
ম্যাক্সট্রান্স (MAXTRANS) :
এই প্যারামিটারের মাধ্যমে সর্বোচ্চ কতবার কনকারেন্ট ট্রাকজিকশন সংঘটিত হয়ে ডাটা অথবা ইনডেক্স ব্লকে পরিবর্তন সাধন করতে পারবে তা নির্দিষ্ট করা যায়। এর ডিফল্ট ভ্যালু ২৫৫। যখন একে সেট করা হয় তখন এর ভ্যালু ট্রানজিকশন স্লটের স্পেস ব্যবহারে বিধিনিষেধ আরোপ করে যা রো এবং ইনডেক্স ডাটাকে ব্লকে পর্যাপ্ত স্পেসের নিশ্চয়তা দেয়।
পিসিটিফ্রি (PCTFREE) :
এই প্যারামিটারের মাধ্যমে ডাটা ব্লকের কত শতাংশ জায়গা আপডেট সংক্রান্ত কাজে খালি রাখতে হবে তার উল্লেখ করা হয়। মূলত ডাটা সেগমেন্টের ওপরে এই প্যারামিটার কাজ করে। পিসিটিফ্রি প্যারামিটারের ডিফল্ট ভ্যালু- ১০।
পিসিটিইউজড (PCTUSED) :
এই প্যারামিটার প্রতিনিধিত্ব করে সর্বনিম্ন কত শতাংশ ব্যবহার হওয়া স্পেস ওরাকল সার্ভার একটি নির্দিষ্ট ডাটা ব্লকের জন্য বরাদ্দ রাখবে। এর ডিফল্ট ভ্যালু-৪০।
ডাটা ব্লকের ব্যবস্থাপনা :
দুইটি পদ্ধতিতে ডাটা ব্লকের সুষ্ঠু ব্যবস্থাপনা সম্ভব। ০১. স্বয়ংক্রিয় সেগমেন্ট স্পেস ব্যবস্থাপনা, ০২. অস্বয়ংক্রিয় ব্যবস্থাপনা। আমাদের বর্তমান আলোচনা স্বয়ংক্রিয় সেগমেন্ট স্পেস ব্যবস্থাপনা নিয়ে। স্বয়ংক্রিয় সেগমেন্ট স্পেস ব্যবস্থাপনা ওরাকল 9i এর একটি বিশেষ ফিচার, যা আগের ওরাকল ভার্সনগুলোতে বিদ্যমান ছিল না।
স্বয়ংক্রিয় সেগমেন্ট স্পেস ব্যবস্থাপনা :
ডাটাবেজ সেগমেন্টের অভ্যন্তরে ফ্রি স্পেস এই ব্যবস্থাপনার মাধ্যমে করা হয়। এই পদ্ধতিতে ফ্রি অথবা ইউজড এক বিশেষ প্রক্রিয়ায় রাখা হয়। যাকে বলা হয় বিটম্যাপ। বিটম্যাপ সেগমেন্ট একটি বিশেষ প্রজাতির ম্যাপ ধারন করে, যা বিট (০,১) দিয়ে তৈরি। এই বিটম্যাপই প্রতিটি ব্লকে স্ট্যাটাস নির্দেশ করে। এই ম্যাপ পৃথক সেটের বিটম্যাপ ব্লক ধারণ করে। যখন কোনো নতুন রো ডাটা ব্লকে ইনসার্ট হয় তখন সার্ভার ম্যাপ দেখে নির্ধারণ করে কোথায় এই মুহুূর্তে ফ্রি স্পেস আছে। যখন কোনো নতুন ইনসার্ট সংঘটিত হয় তখন এই ম্যাপে তার প্রতিফলন ঘটে।
স্বয়ংক্রিয় সেগমেন্ট স্পেস ব্যবস্থাপনা কনফিগারেশন : শুধু টেবিল স্পেস লেবেলে একে অ্যানাবেল করা যায়।
CREATE TABLESPACE data02
DATAFILE ‘/u01/oradata/data02.dbf’ SIZE 5M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K
SEGMENT SPACE MANAGEMENT AUTO;
ব্লক স্পেসের ব্যবহার :
একটি উদাহরণের মাধ্যমে আমরা দেখব কিভাবে ব্লক স্পেসের ব্যবহার হয়ে থাকে। ধরা যাক, পিসিটিফ্রি = ২০ এবং পিসিটিইউজড = ৪০ নিচের স্টেপগুলোতে দেখানো হলো কিভাবে ইনসার্ট এবং আপডেট সংঘটিত হয়।
স্টেপ-১ :
ব্লকে রো ততক্ষণ পর্যন্ত ইনসার্ট হবে যতক্ষণ না ফ্রি স্পেস ২০%-এর কম বা সমান না হয়। ব্লকে তখন রো ইনসার্ট হবে না যখন ৮০% ব্লক স্পেস রো দিয়ে পূর্ণ হয়ে যাবে।
স্টেপ-২ :
অবশিষ্ট ২০% ব্যবহার হবে যখন রো-এর সাইজ বাড়ে। যেমন একটি কলাম নাল (NULL), তাকে কোন ভ্যালু দিয়ে আপডেট করতে হবে তখন আপডেট অপারেশনের জন্য ৮০% স্পেসের বাইরের অংশ ব্যবহার করবে।
স্টেপ-৩ :
যদি কোনো রোকে ডিলিট করা হয় (ব্লক থেকে) তাহলে ব্লক ইউটিলাইজেশন ৮০%-এর নিচে নেমে যাবে। কিন্তু ততক্ষণ পর্যন্ত না কোনো ইনসার্ট অপারেশন সংঘটিত হবে যতক্ষণ না পিসিটিইউজ ভ্যালুর (৪০) নিচে না নেমে যাবে।
স্টেপ-৪ :
যখন ব্লকের ব্যবহার পিসিটিইউজের নিচে নেমে যাবে তখন ব্লক ইনসার্ট অপারেশনের উপযোগী হবে।
নিম্নলিখিত ভিউগুলো থেকে আমরা স্টোরেজ সংক্রান্ত তথ্য জানতে পারি।
DBA_TABLESPACES,DBA_DATA_FILES,DBA_SEGMENTS,DBA_EXTENTS,
DBA_FREE_SPACE
নিম্নলিখিত কোয়ারিগুলো দিয়ে আমরা একটি নির্দিষ্ট সেগমেন্টে কতগুলো এক্সটেন্ট এবং ব্লক বরাদ্দ হলো তা জানতে পারব।
SQL> SELECT segment_name,tablespace_name,extents,blocks
2 FROM dba_segments
3 WHERE owner = ‘HR’;
SEGMENT_NAME TABLESPACE EXTENTS BLOCKS
--------------------------------------------------
REGIONS SAMPLE 1 8
LOCATIONS SAMPLE 1 8
DEPARTMENTS SAMPLE 1 8
JOBS SAMPLE 1 8
EMPLOYEES SAMPLE 1 8
JOB_HISTORY SAMPLE 1 8
5 rows selected.
০ টি মন্তব্য