عنوان:

‫استفاده از Flashback Table در Oracle


نویسنده: فرهاد فرهمندخواه
تاریخ: ۱۳۹۱/۰۸/۲۶ ۲۳:۹
آدرس: www.dntips.ir
Oracle امکان جالبی دارد، به نام Flashback Table، که به کمک آن می‌توان یک جدول Drop شده را برگرداند. برای استفاده از قابلیت Flashback در دیتابیس Oracle، می‌بایست قابلیت Recyclebin در Oracle را فعال نمود. با فعال نمودن Recyclebin در Oracle ، جداول حذف شده بصورت منطقی حذف می‌گردند، تا در صورت نیاز بوسیله دستور Flashback Table، جداول مورد نظر برگردانده شود.
قبل از استفاده از دستور Flashback Table، ابتدا Recyclebin را فعال می‌نماییم:
ALTER SYSTEM SET recyclebin = ON;
در Script بالا، Recyclebin در سطح سیستم فعال شده است،اگر شما مایل باشید می‌توانید،Recyclebin را در سطح Session فعال نمایید.
ALTER SESSION SET recyclebin = ON;
برای غیر فعال نمودن Recyclebin نیز بصورت زیر عمل می‌نماییم:
ALTER SYSTEM SET recyclebin = OFF;
یا
ALTER SESSION SET recyclebin = OFF;
حال با فرض اینکه Recyclebin را فعال نموده ایم، با یک مثال نحوه عملکرد Flashback Table را نمایش می‌دهیم:
ابتدا یک جدول ایجاد نمایید، مطابق Script زیر:
Create Table Test
(ID int,
FirstName varchar(255),
LastName Varchar(255))
مقادیری را درون جدول فوق درج نمایید، سپس بوسیله دستور زیر جدول فوق را حذف نمایید:
Drop table Test
در ادامه برای برگرداندن جدول فوق می‌توانیم از دستور Falshback Table مطابق Script زیر عمل نماییم:
FLASHBACK TABLE Test TO BEFORE DROP;
برای مشاهده محتویات Recyclebin نیز می‌توانید از Script‌های زیر استفاده نمایید:
Select * From  recyclebin;
یا

SELECT * FROM USER_RECYCLEBIN;
این قابلیت چندی پیش در محیط اجرایی مشتری به کمکم آمد، بطوریکه من تقریبا اطلاعات 8 میلیون نفر را در یک جدول درج نموده بودم و پس از اعمال Migration ، آن را حذف کردم، صبح روز بعد متوجه شدم،که عملیات انجام شده اشتباه بوده و من می‌بایست دوباره جداول اصلی را بازسازی می‌کردم،از طرفی امکان Restore نمودن یا درج دوباره 8 میلیون رکورد به دیتابیس وجود نداشت، چون زمان زیادی می‌برد، و از طرفی هم نمی‌بایست بار زیادی روی دیتابیس می‌گذاشتم، در این زمان بود که دستور Flashback Table ، دیتابیس Oracle به کمکم آمد و در کوتاهترین زمان مشکل بوجود آمده را برطرف کردم.
البته من چنین امکانی را در SQL Server ندیدم، خوشنود می‌شوم، اگر کسی تجربه ای مشابه در SQL Server داشت، به اشتراک بگذارد.
موفق باشید.


نظرات

  • وحید نصیری در ۱۳۹۱/۰۸/۲۷ ۰:۳۱
    امکان شبیه سازی اینکار در SQL Server هست:
    Creating a recycle bin for SQL Server 2005\2008 

  • مهمان در ۱۳۹۱/۰۸/۲۷ ۱۵:۱۹
    با سلام
    قابلیتی که اشاره کردید در SQL Server وجود ندارد (در SQL Server می‌توان آن را با Point In Time Restore هم انجام داد) به نظر می‌رسد که با استفاده از این حالت جدول شما حذف منطقی شده و از دسترسی عادی کاربران  خارج می‌گردد (این خوب و هم بد)
    خوبی آن در این است که هر موقع خواستید می‌توانید اطلاعات آن را برگردانید
    بدی آن هم در این است که فضای مربوط به این جدول هنگام حذف از دیسک آزاد نخواهد شد
    • مهمان در ۱۳۹۱/۰۸/۲۷ ۱۹:۱۴
      سلام
      گفته شما، درست است،حذف بصورت منطقی صورت می‌گیرد،چنانچه به Tablespace ، آن Instance (منظور دیتابیس) مراجعه شود، پس از حذف جدول، از فضای آن کاسته نمی‌شود.
      البته باید بگویم،استفاده از Recyclebin بطور دائم، صحیح نمی‌باشد،معمولا در موارد خاص از آن استفاده می‌گردد، بطور مثال در زمان Migration و مواردی مشابه...
      • سمین در ۱۳۹۱/۰۸/۲۸ ۱۳:۲
        برای خالی کردن این فضا از سه حالت دستوری زیر می‌شه استفاده کرد:
        Table
         برای آزاد کردن فضای مربوط اشیاء حذف شده برای کاربر جاری: 
        PURGE TABLE Table_Name;
          برای آزاد کردن فضای مربوط  کل اشیاء حذف شده برای کاربر جاری: 
         PURGE RECYCLEBIN;
        DBA_RecycleBin
        برای آزاد کردن فضای مربوط به کل اشیاء حذف شده :
        PURGE DBA_RECYCLEBIN;
        از این حالت  فقط زمانی که بادسترسی SYSDBA  وارد سیستم شده باشیم می‌توانیم استفده نماییم.

        TableSpace
          برای آزاد کردن فضای مربوط به کل اشیاء حذف شده یک TableSpace:

        purge Tablespace Tablespace_name;
          
        یه میان بر هم برای اینکه بعد از حذف یک شیء به داخل RECYCLEBIN نره استفاده ازاین دستور:
        DROP TABLE Table_Name PURGE;