تا قبل از اوراکل 23c،ء Flashback Logها الزاما باید در FRA ذخیره می شدند و در صورت عدم تنظیم FRA، امکان فعال کردن قابلیت Flashback Database وجود نداشت:
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production SQL> alter database flashback on; ORA-38706: Cannot turn on FLASHBACK DATABASE logging. ORA-38709: Recovery Area is not enabled.
در نسخه 23c دو پارامتر جدید در این زمینه معرفی شدند که می توان از طریق آنها Flashback Logها را در مسیری غیر از FRA ذخیره کرد. این پارامترها، db_flashback_log_dest_size و db_flashback_log_dest هستند. قبل از تنظیم این دو پارامتر، وضعیت پارامترهای مربوط به FRA را بررسی می کنیم:
SQL> show parameter db_recovery_file_dest NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string db_recovery_file_dest_size big integer 0
با تنظیم دو پارامتر مذکور، قابلیت Flashback Database را فعال می کنیم:
SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ NO
SQL> alter system set db_flashback_log_dest_size=800m; System altered. SQL> alter system set db_flashback_log_dest='/oracle23c/FlashbackLog'; System altered.
SQL> alter database flashback on; Database altered. SQL> select flashback_on from v$database; FLASHBACK_ON ------------------ YES
با فعال کردن این قابلیت، Flashback Logها با پسوند flb در مسیر زیر ایجاد خواهند شد:
SQL> select NAME,SPACE_LIMIT/1024/1024 as "SPACE_LIMIT_MB", SPACE_USED/1024/1024 as "SPACE_USED_MB",NUMBER_OF_FILES from V$FLASHBACK_LOG_DEST; NAME SPACE_LIMIT_MB SPACE_USED_MB NUMBER_OF_FILES ------------------------------ -------------- ------------- --------------- /oracle23c/FlashbackLog 800 200 1
[oracle@target ~]$ cd /oracle23c/FlashbackLog/FREE/flashback/ [oracle@target flashback]$ ls -l -rw-r----- 1 oracle oinstall 209723392 Jul 26 11:32 o1_mf_ld1k8lnr_.flb -rw-r----- 1 oracle oinstall 209723392 Jul 26 11:33 o1_mf_ld1k8p4m_.flb -rw-r----- 1 oracle oinstall 209723392 Jul 26 11:32 o1_mf_ld1k8xfv_.flb
نکته جالب آنکه بین اندازه Flashback Log و redo logfile ظاهرا ارتباطی وجود دارد برای مثال در تنظیمات فوق، حجم هر flashback Log تقریبا به اندازه redo logfileها برابر با 200 مگابایت می باشد.
برای بررسی بیشتر این موضوع، redo log groupهایی با سایز جدید ایجاد می کنیم:
SQL> alter database add logfile group 13 size 800m; Database altered. SQL> alter database add logfile group 14 size 800m; Database altered.
SQL> alter database drop logfile group 1; Database altered. SQL> alter database drop logfile group 2; Database altered. SQL> alter database drop logfile group 3; Database altered.
SQL> select group#,bytes from v$log; GROUP# BYTES ---------- ---------- 13 838860800 14 838860800
بعد از ایجاد logfileها با سایز جدید، قابلیت Flashback Database را فعال و غیر فعال می کنیم تا Flashback Log با سایز جدید ایجاد شوند:
SQL> alter database flashback off; Database altered. SQL> alter database flashback on; Database altered. [root@target flashback]# ls -l -rw-r----- 1 oracle oinstall 838868992 Jul 26 13:34 o1_mf_ld1lcpjx_.flb
همانطور که می بینید، flbها تقریبا با سایزی نزدیک به سایز logfileها ایجاد شده اند.
با تنظیم پارامترهای مربوط به قابلیت Flashback Database، لاگهای مربوط به restore point هم به این مسیر منتقل خواهند شد:
SQL> alter database flashback off; Database altered.
SQL> create restore point test guarantee flashback database; ORA-38784: Cannot create restore point 'TEST'. ORA-38786: Recovery area is not enabled. SQL> alter system set db_recovery_file_dest_size=10g; System altered. SQL> alter system set db_recovery_file_dest='/oracle23c/fra'; System altered.
SQL> create restore point test guarantee flashback database; Restore point created.
[oracle@target flashback]$ ls -l -rw-r----- 1 oracle oinstall 209723392 Jul 26 15:03 o1_mf_ld1x4vfk_.flb