دیتابیس اوراکل

دیتابیس اوراکل
طبقه بندی موضوعی

۲ مطلب در خرداد ۱۳۹۷ ثبت شده است

غیر فعال شدن Flashback Database به صورت اتوماتیک

امروز وقتی خواستم به یک restore point که قبلا ایجاد کرده بودم flashback کنم به خطای زیر برخورد کردم :

 ORA-38729 signalled during: flashback pluggable database PDB_RDB1 to restore point RESTORE_POINT_PDB_RDB1_20180617125947

 

بعد وقتی چک کردم دیدم flashback database به صورت اتوماتیک غیرفعال شده است :

SQL> select flashback_on from v$database

FLASHBACK_ON

------------------

NO

بعد از گشتن در docها مختلف متوجه شدم که اگر اوراکل برای نوشتن flashback logها در مسیر FRA به مشکل I/O برخورد کند ، برای جلوگیری از hang کردن دیتابیس ، flashback را به صورت اتوماتیک disable میکند :

:If no guaranteed restore points are defined, then the instance remains unaffected when RVWR encounters I/O errors. Note the following cases

·      On a primary database, Oracle Database automatically disables Flashback Database while the database is open. All existing transactions and queries proceed unaffected. This behavior is expected for both single-instance and Oracle RAC databases


خطایی که موقع disable کردن flashback در alert log  نوشته شده بود به صورت زیر است :

ORA-38886: WARNING: Flashback database was disabled due to error when writing flashback database logs.

ORA-38701: Flashback database log 10 seq 12 thread 1: "/shst/fra/flashback/o1_mf_fjpbmf8r_.flb"

ORA-27072: File I/O error

 

· منابع 

https://docs.oracle.com/database/121/BRADV/flashdb.htm#BRADV601

https://jhdba.wordpress.com/2010/01/06/flashback-disabled-automatically-a-minor-rant

https://easyoradba.com/2010/05/20/ora-38701-flashback-database-log-seq-thread

 

flashback_pkg

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

این اسکریپت در حال حاضر کارهای زیر را انجام میدهد:

1- ایجاد کردن restore point برای تمامی PDBهای یک root container

set serveroutput on; 

exec userA.create_restore_point_for_all_pdb_prc;


2- ایجاد کردن restore point برای یک PDB خاص

set serveroutput on; 

exec userA.flashback_pkg.create_restore_point_for_spec_pdb_prc('PDB_NAME');


3- انجام flashback در سطح PDB

set serveroutput on;

exec userA.flashback_pkg.flashback_pdb_prc('PDB_NAME','RESTORE_POINT_NAME');


4- بدست آوردن زمان flashback retention

select userA.flashback_pkg.get_flashback_retention_prc from dual;


flashback_pkg script