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

Oracle Database Flashback Technologies مجموعه ای منحصر به فرد و غنی از راه حل های بازیابی اطلاعات است.

در اثر بروز اشتباه ممکن است چند دقیقه طول بکشد تا به پایگاه داده آسیب برسد، اما چند ساعت طول بکشد تا آن را بازیابی کنیم. با فلش بک، تصحیح یک خطا تقریباً به همان میزانی که برای ایجاد آن زمان لازم است، زمان می برد. علاوه بر این، زمان لازم برای بازیابی از این خطا به اندازه پایگاه داده بستگی ندارد و این قابلیت منحصر به فرد برای پایگاه داده اوراکل است.

فلش بک از بازیابی در تمام سطوح از جمله ردیف، تراکنش، جدول و کل پایگاه داده پشتیبانی می کند. فلش بک مجموعه ای از ویژگی های رو به رشدی را برای مشاهده و بازگردانی داده ها به جلو و عقب در زمان ارائه می دهد.

Flashback Database

دراین روش با استفاده از flashback logs  کل دیتابیس را به یک زمان خاص بازیابی می کند.مراحل انجام کار به صورت زیر می باشد:

  1. اطمینان از تنظیم پارامتر  db_recovery_file_dest 
  • sqlplus ‘/ as sysdba’
  • SQL> alter system set db_recovery_file_dest=’+<FRA Diskgroup>’ SCOPE=spfile;
  • اطمینان از تنظیم پارامتر  db_recovery_file_dest_size  
  • SQL> alter system set db_recovery_file_dest_size=100G SCOPE=spfile;
  • Stop and start دیتابیس
  • sqlplus ‘/ as sysdba’
  • SQL> shutdown immediate;
  • SQL> startup mount;
  • If flashback to any previous point in time is required, then turn flashback on using the following command
  • SQL> alter database flashback on;
  • SQL> alter database open;
  • SQL> alter system set db_flashback_retention_target=2880;
  • تنظیم پارامتر db_recovery_file_dest  برای بازیابی فایل های flashback.
  • تنظیم پارامتر db_recovery_file_dest_size   به اندازه موردنیاز انجام می پذیرد.
  • تنظیم پارامتر  db_flashback_retention_target  به اندازه مناسب برحسب دقیقه تا قابلیت فلش بک حفظ شود.

هر زمان که پایگاه داده در وضعیتی قرار دارد که ممکن است نیاز به فلش مجدد داشته باشد، یک نقطه بازیابی (restore point) ایجاد می کنیم:

SQL> create restore point <restore point name> [GUARANTEE FLASHBACK DATABASE];

  • sqlplus ‘/ as sysdba’
  • SQL> shutdown immediate;
  • SQL> startup mount;
  • SQL> flashback database to restore point <restore point name>;
  • SQL> alter database open resetlogs;

اگر دیتابیس ما به صورت RAC چند نود باشد دستورات به صورت زیر می شوند:

  • One one of the nodes run, srvctl stop database -d <database name> -o immediate
  • sqlplus ‘/ as sysdba’
  • SQL> startup mount;
  • SQL> flashback database to restore point <restore point name>;
  • SQL> alter database open resetlogs;
  • SQL> shutdown immediate;
  • SQL> quit
  • srvctl start database -d <database name>
  • Run crs_stat -t to confirm that the database is backup okay.

نظارت بر Flashback Logging

پس از فعال کردن Flashback Logging ، اوراکل شروع به ثبت تغییرات از لاگ های تولید شده می کند. این را می توان از جدول v$flashback_database_log  پیدا کرد. توجه داشته باشید که این اندازه فقط گزارش‌های فلش بک است و فضای مورد استفاده توسط  archive logs وRMAN backups را شامل نمی‌شود.

  • sqlplus ‘/ as sysdba’
  • SQL> select estimated_flashback_size/1024/1024/1024 “EST_FLASHBACK_SIZE(GB)” from v$flashback_database_log;
  • SQL> quit

پیداکردن اولین Flashback Point

برای پیدا کردنEarliest Flashback Point می توانیم از ویو  V$flashback_database_log جهت فلش بک دیتابیس خود بر اساس اندازه FRA و flashback log موجود اقدام فرمائیم.

  • sqlplus ‘/ as sysdba’
  • SQL> alter session set nls_date_format=’dd/mm/yy hh24:mi:ss’;
  • SQL> select oldest_flashback_scn,oldest_flashback_time from v$flashback_database_log;
  • SQL> quit

Flashback Table

به راحتی جداول را در یک نقطه در زمان خاص بازیابی می کند.

FLASHBACK TABLE <table name> TO BEFORE DROP;

Flashback Drop

برای بازیابی  یک جدول که به صورت تصادفی و یا به اشتباه  dropشده است.در این حالت جدول به همراه تمام indexes, constraints, and triggers هایش از داخل Recycle Bin بازیابی می شود.

Flashback Versions Query

در این روش تمام اتفاق ها وتغییراتی که دریک بازه زمانی برروی یک row  انجام شده را بازیابی می کند.

Flashback Transaction

در این روش به عنوان شرط لازم هم به  undo ها احتیاج است و هم به  Archive log ها .در در این حالت باید هر چندتا عملیات در غالب transaction  انجام گردیده، برگردانده شود.

اما شرط کافی برای این موضوع این است که dependency های مختلف چک شود.

 Flashback Transaction Query

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

معایب و مزایای Flashback Database

مزایا:

از نظر سرعت عمل نسبت به ریکاوری سنتی خیلی بهتر و سریعتر است چون مرحله  restore حذف می شود و مرحله recover کردن خیلی کوتاهتر می شود.

معایب:

در این حالت حتما دیتابیس در حالت  mount باشد و کسی با دیتابیس کارنکند و بعدش حتما  open resetlogs شود و در شرایط عادی هیچ گارانتی برای نگهداری  flashback log ها در FRA ندارد.

خلاصه

می توان گفت که درهنگام بروز مشکلات مختلف می توان از یک و یا چند روشی که در بالا برای  flashback بیان شد استفاده کرد.مثلا در زمانی که Transaction ای به اشتباه زده شده باشد می توان از  undo ها استفاده کرد و Flashback Transaction کرد ویا اگر کسی به اشتباه جدولی را drop کرده باشد ، با استفاده از recycle bin ودستور flashback  آن را برگرداند و یا در مواقعی user ای به اشتباه  drop شده باشد از Flashback Database استفاده کرد.

نتیجه گیری

Oracle Flashback زمان بازیابی را از ساعت به دقیقه کاهش می دهد و نیاز به بازیابی پشتیبان‌گیری و جلو بردن تغییرات به زمان خطا یا خرابی، از بین می‌برد. در عوض با استفاده از Flashback Database می‌توان یک دیتابیس Oracle را بدون بازیابی فایل‌های داده، به نقطه‌ی پیشینی از زمان (قبل از بروز مشکل) برگرداند.