با وجود اقدامات پیشگیرانه ایی که برای جلوگیری از بروز مشکل در دیتابیس ها انجام می پذیرد باز هم بنا به خطاهای انسانی و یا خود سیستم ، به ناچار نیاز به بازیابی اطلاعات از دست رفته و یا برگشت به زمانی قبل از بروز مشکل احتیاج داریم.
Oracle Database Flashback Technologies مجموعه ای منحصر به فرد و غنی از راه حل های بازیابی اطلاعات است.
در اثر بروز اشتباه ممکن است چند دقیقه طول بکشد تا به پایگاه داده آسیب برسد، اما چند ساعت طول بکشد تا آن را بازیابی کنیم. با فلش بک، تصحیح یک خطا تقریباً به همان میزانی که برای ایجاد آن زمان لازم است، زمان می برد. علاوه بر این، زمان لازم برای بازیابی از این خطا به اندازه پایگاه داده بستگی ندارد و این قابلیت منحصر به فرد برای پایگاه داده اوراکل است.
فلش بک از بازیابی در تمام سطوح از جمله ردیف، تراکنش، جدول و کل پایگاه داده پشتیبانی می کند. فلش بک مجموعه ای از ویژگی های رو به رشدی را برای مشاهده و بازگردانی داده ها به جلو و عقب در زمان ارائه می دهد.
Flashback Database
دراین روش با استفاده از flashback logs کل دیتابیس را به یک زمان خاص بازیابی می کند.مراحل انجام کار به صورت زیر می باشد:
- اطمینان از تنظیم پارامتر 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 را بدون بازیابی فایلهای داده، به نقطهی پیشینی از زمان (قبل از بروز مشکل) برگرداند.