ESC را فشار دهید تا بسته شود

زمیوس آموزش، یادگیری و سرگرمی

پکیج DBMS_SPACE در Oracle: راهنمای کامل مدیریت فضای دیتابیس

مدیریت فضای ذخیره‌سازی در دیتابیس اوراکل همیشه یکی از دغدغه‌های اصلی مدیران پایگاه داده (DBA) و توسعه‌دهندگان حرفه‌ای بوده.

اگر بخوای بفهمی که دقیقاً چقدر از فضای جداول یا ایندکس‌هایت استفاده شده، یا بدونی که کدوم بخش از دیتا بی‌استفاده افتاده، باید سراغ یکی از قدرتمندترین ابزارهای اوراکل بری: پکیج DBMS_SPACE.

تو این مقاله آموزش Oracle در بخش آموزش پکیج های اوراکلی (Oracle Packages) قراره به زبون ساده و کاربردی، همه چیز درباره DBMS_SPACE رو یاد بگیری — از کاربردهاش گرفته تا مثال‌های واقعی از SQL و PL/SQL برای استفاده بهتر ازش.

در دنیای امروز که امنیت داده‌ها بیش از هر زمان دیگری اهمیت دارد، اوراکل قابلیتی به نام Row-Level Security را از طریق پکیج قدرتمند DBMS_RLS ارائه کرده است بنابراین پیشنهاد می شود نوشته زیر را مطالعه کنید:

در این نوشته شما می خوانید

DBMS_SPACE دقیقاً چیه و به چه دردی می‌خوره؟

پکیج DBMS_SPACE یکی از پکیج‌های داخلی Oracle هست که برای بررسی، مانیتور و تحلیل فضای مصرف‌شده در دیتابیس استفاده میشه. این پکیج بهت نشون میده که:

  • چند بلاک به آبجکت تخصیص داده شده
  • چقدر از اون بلاک‌ها واقعاً استفاده شده
  • چه مقدار از فضای دیتابیس هنوز خالی یا بی‌استفاده باقی مونده
  • روند رشد جداول یا ایندکس‌ها در طول زمان چطوری بوده

چه زمانی باید از DBMS_SPACE استفاده کنیم؟

  • موقعی که دیتابیس کند شده و شک داری به Fragmentation
  • وقتی که می‌خوای برای آینده ظرفیت‌سازی کنی
  • یا حتی وقتی فضای Tablespace کم میاد و دنبال مقصرش می‌گردی!

پیش‌نیاز استفاده از DBMS_SPACE

برای اینکه بتونی این پکیج رو بدون مشکل اجرا کنی، یادت باشه مجوز اجراش رو به یوزرت بدی:

				
					GRANT EXECUTE ON DBMS_SPACE TO your_user;

				
			

معرفی کامل پروسیجرها و توابع مهم DBMS_SPACE

۱. بررسی فضای استفاده‌نشده با UNUSED_SPACE

📌 چه کار می‌کنه؟

میگه چه مقدار از فضای تخصیص‌یافته توی جدول یا ایندکس، هنوز استفاده نشده.

✅ مثال کاربردی:

				
					DECLARE
  unused_bytes NUMBER;
BEGIN
  DBMS_SPACE.UNUSED_SPACE(
    segment_owner => 'HR',
    segment_name  => 'EMPLOYEES',
    segment_type  => 'TABLE',
    unused_blocks => ...,
    total_blocks  => ...,
    total_bytes   => ...,
    unused_bytes  => unused_bytes,
    ...
  );

  DBMS_OUTPUT.PUT_LINE('Unused Bytes: ' || unused_bytes);
END;

				
			

۲. آنالیز فضای مصرفی بلاک‌ها با SPACE_USAGE

📌 کاربرد:

نشون میده بلاک‌های داده (Data Blocks) در چه وضعیتی هستن: خالی، پر، نیمه‌پر و…

رده‌بندی توضیح
fs1 بلاک‌هایی با ≤ ۲۵% استفاده
fs2 بلاک‌هایی با ۲۶% تا ۵۰% استفاده
fs3 بلاک‌هایی با ۵۱% تا ۷۵% استفاده
fs4 بلاک‌هایی با ۷۶% تا ۱۰۰% استفاده
full بلاک‌هایی کاملاً پر

✅ کد نمونه:

				
					DBMS_SPACE.SPACE_USAGE(
    segment_owner => 'HR',
    segment_name  => 'EMPLOYEES',
    segment_type  => 'TABLE',
    fs1_blocks => ..., fs2_blocks => ..., fs3_blocks => ...,
    fs4_blocks => ..., full_blocks => ...
);

				
			

۳. بررسی سگمنت‌های وابسته با OBJECT_DEPENDENT_SEGMENTS

مثلاً جدولت چند تا پارتیشن یا ایندکس داره؟ این رویه همه سگمنت‌های مرتبط با یک object رو میاره.

۴. تحلیل رشد داده با OBJECT_GROWTH_TREND

اگه می‌خوای بدونی یک جدول توی یک هفته یا ماه گذشته چقدر رشد کرده، این رویه اطلاعاتش رو از AWR می‌گیره و دقیقاً بهت میگه.

۵. تخمین فضای مصرف‌شده با OBJECT_SPACE_USAGE

می‌خوای بدونی جدول یا ایندکست دقیقاً چقدر فضا گرفته؟ اینجا معلوم میشه که چقدرش واقعاً پر شده و چقدرش فقط تخصیص داده شده ولی هنوز استفاده نشده.

درباره فضای LOBها در DBMS_SPACE

فایل‌های LOB (مثل عکس، PDF، و…) معمولاً کلی فضا می‌گیرن.

پکیج DBMS_SPACE بهت کمک می‌کنه حتی مصرف فضای LOBSEGMENTها و LOBINDEXها رو هم بررسی کنی.

نکات حرفه‌ای برای استفاده بهتر از پکیج DBMS_SPACE

  • SPACE_USAGE فقط روی Tablespaceهایی که ASSM (مدیریت خودکار فضا) دارن کار می‌کنه.
  • بهتره حین استفاده از DBMS_OUTPUT.PUT_LINE، اول دستور SET SERVEROUTPUT ON رو بزنی.
  • برای مشاهده ترند رشد آبجکت‌ها، باید AWR فعال باشه.

سوالات متداول درباره پکیج DBMS_SPACE در Oracle

DBMS_SPACE یک پکیج سیستمی در Oracle Database است که برای تحلیل و مدیریت فضای ذخیره‌سازی در جداول، ایندکس‌ها، و دیگر سگمنت‌ها به کار می‌رود.

این پکیج به DBAها و توسعه‌دهندگان اجازه می‌دهد میزان فضای استفاده‌شده و بلااستفاده را بررسی کرده و از Fragmentation یا هدررفت منابع جلوگیری کنند.

ابزارهای مهمی مانند UNUSED_SPACE و SPACE_USAGE از این پکیج قابل دسترسی هستند.

با استفاده از رویه‌ی SPACE_USAGE در پکیج DBMS_SPACE می‌توان میزان فضای پرشده و خالی بلاک‌های یک جدول را به‌دست آورد.

این اطلاعات شامل بلاک‌های استفاده‌شده در بازه‌های ۰ تا ۲۵٪، ۲۵ تا ۵۰٪ و … است.

فقط باید مطمئن شوید که جدول روی Tablespace با ASSM (Automatic Segment Space Management) قرار دارد.

  • UNUSED_SPACE: فضای تخصیص‌یافته ولی استفاده‌نشده (غیرقابل استفاده توسط اوراکل) را نمایش می‌دهد.
  • SPACE_USAGE: فضای مصرف‌شده را به صورت دقیق‌تری دسته‌بندی می‌کند و نشان می‌دهد چه بلاک‌هایی تا چه میزان پر شده‌اند.

هردو برای بررسی مصرف واقعی فضا مفید هستند، اما SPACE_USAGE دقیق‌تر و برای تحلیل عملکرد بهتر است.

بله، با استفاده از رویه‌ی OBJECT_GROWTH_TREND در پکیج DBMS_SPACE می‌توان روند رشد جداول یا ایندکس‌ها را در طول زمان بررسی کرد.

این رویه از اطلاعات AWR استفاده می‌کند و نشان می‌دهد که چطور یک آبجکت خاص در بازه‌ی زمانی مشخص، فضا مصرف کرده است.

جمع‌بندی: چرا DBMS_SPACE واقعاً مهمه؟

پکیج DBMS_SPACE بهت یک دید دقیق و حرفه‌ای از نحوه استفاده از فضای دیتابیس میده. با این ابزار:

✅ فضاهای هدررفته رو شناسایی می‌کنی
✅ از رشد کنترل‌نشده جداول جلوگیری می‌کنی
✅ عملکرد دیتابیس رو بالا نگه می‌داری
✅ از بروز مشکلات کمبود فضای Tablespace جلوگیری می‌کنی

📥 اگر سوالی داری در مورد پکیج DBMS_SPACE در Oracle داری، در بخش کامنت‌ها بپرس.

سؤالی درباره این مقاله داری؟

اگر نکته‌ای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفت‌وگوی واقعی 💬

برو به صفحه پرسش و پاسخ

میثم راد

من یه برنامه نویسم که حسابی با دیتابیس اوراکل رفیقم! از اونایی ام که تا چیزی رو کامل نفهمم،ول کن نیستم، یادگرفتن برام مثل بازیه، و نوشتن اینجا کمک می کنه تا چیزایی که یاد گرفتم رو با بقیه به شریک بشم، با هم پیشرفت کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *