منبع اصلی نوشتار زیر در این لینک قرار دارد

Recycle bin در اوراکل

Recycle bin در واقع یک Data Dictionary Table از اشیای پاک شده می باشد. هنگامی که شی از یک Locally Managed Tablespace یا LMTS پاک می شود، (البته به جز System Tablespace)، پایگاه داده فورا آنرا پاک نمی کند، بلکه فضای اختصاص داده شده به آنرا باز پس می گیرد، در عوض، آن شی و تمامی اشیا وابسته به آن را در Recycle bin نگه می دارد. این همانند پاک کردن یک فایل/دایرکتوری/فولدر (اشیا سیستم عامل) و قرار دادن آنها در Recycle bin در سیستم عامل ویندوز و Trash در سیستم عامل های لینوکسی و یونیکسی (مانند لینوکس، مکینتاش و سولاریس و …) می باشد، که بجای اینکه فورا از فضای تحت کنترل سیستم عامل پاک کند، آنرا در Recycle bin یا Trash نگه می دارد و امکان بازیابی (Restore) وجود دارد. این روند دقیقا برای Recycle bin در اوراکل نیز اتفاق می افتد و شما می توانید یک شی به همراه داده های آن و تمامی اشیا وابسته به آنرا بازیابی کنید.

توجه داشته باشید که این ویژگی برای System Tablespace قابل استفاده نیست و اشیا پاک شده از این Tablespace فورا از سیستم پاک می شوند.

ویژگی های FLASHBACK DROP و FLASHBACK TABLE اشیا را پس از پاک کردن از پایگاه داده، در Recycle bin قرار می دهند. این نیاز به ویژگی point-in-time recovery را از میان بر می دارد. Recycle bin بطور پیش فرض از اوراکل 10g به بعد فعال بوده و شما می توانید با هر یک از دستور های (تغییر مقدار پارامتر RECYCLEBIN) زیر آنرا فعال و یا غیر فعال کنید.

  • با استفاده از دستور زیر وضیعیت فعلی (فعال/غیر فعال بودن) Recycle bin را پیدا کنید.on به معنی روشن بودن (یا فعال بودن) این ویژگی است و off یعنی غیر فعال بودن آن است.

SHOW PARAMETERS RECYCLEBIN

NAME                                 TYPE        VALUE
———————————— ———– ——-
recyclebin                           string      on

  • با استفاده از دستور های زیر آنرا در صورتی که فعال نیست، می توانید فعال کنید

; ALTER SYSTEM SET RECYCLEBIN=ON SCOPE=BOTH

; ALTER SESSION SET RECYCLEBIN=ON SCOPE=BOTH

  • با استفاده از دستور های زیر آنرا در صورتی که فعال است، می توانید غیر فعال کنید

; ALTER SYSTEM SET RECYCLEBIN=OFF SCOPE=BOTH

 ; ALTER SESSION SET RECYCLEBIN=ON SCOPE=BOTH

تفاوت SESSION و SYSTEM در دستور های بالا در این است که، SESSION تغییرات در تا زمان معتبر بودن یک جلسه کاری ( یک جلسه توسط Login کردن کاربر به سیستم ایجاد می شود و با خروج کاربر از بین می رود)، نگه می دارد و پس از بین رفتن جلسه، تغییرات اعمال شده هم خنثی می شوند ولی SYSTEM بصورت دائمی است. از این لینک می توانید اطلاعات کامل تری کسب کنید.

فرض کنید با استفاده از دستور زیر یک جدول ایجاد می کنیم

; CREATE TABLE emp_dept_90 AS SELECT * FROM employees WHERE department_id=90

; SELECT COUNT(*) FROM emp_dept_90

COUNT(*)
———-
3

سپس با دستور زیر آن جدول (و کلیه ی محتوای آنرا پاک می کنیم)

; DROP TABLE emp_dept_90

با Query بر رروی جدول recyclebin از Data Dictionary می توانیم اطلاعاتی از اشیا پاک شده به همراه داده های آنها را ببینید.

COL original_name FORMAT A14

; SELECT object_name, original_name, droptime FROM recyclebin

در Recycle Bin نام شی تغییر می کند ولی بصورت فیزیکی از پایگاه داده پاک نمی شود. همچنین فضای مورد استفاده آن شی نیز باز پس گرفته می شود. نامی که به شی داده می شود دارای فرمت BIN$unique_id$version است که در آن :

  • unique_id : یک شناسه منحصر به فرد 26 کاراکتری استف که نامی منحصر به فرد به شی پاک شده در تمامی پایگاه داده می دهد.
  • version :شماره نسخه اختصاص داده شده به پایگاه داده است. تنها یک پایگاه داده داریم پس 0 به آن اختصاص داده شده است.

همچنین با استفاده از دستور زیر نیز می توانید خروجی مشابه زیر دریافت کنید

SHOW RECYCLEBIN

در خروجی بالا ORIGINAL NAME و RECYCLEBIN NAME هر دو به همراه نوع شی و تاریخ و زمان پاک شدن آن مشخص شده اند. اگر Recycle Bin پر شده باشد، با استفاده از دستور های زیر می توانید آنرا خالی کنید

PURGE RECYCLEBIN

OR

PURGE TABLE table_name

دستور اول تمامی محتوای Recycle Bin را پاک می کند و دومین دستور تنها یک جدول خاص را پاک می کند.



برچسب ها : , , ,