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

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

۴ مطلب با موضوع «FlashBack» ثبت شده است

ORA-39885: flashback/PITR of a pluggable database before its creation is not allowed

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

flashback pluggable database PDB1 to timestamp TO_TIMESTAMP('2018-11-06 10:25:00','YYYY-MM-DD HH24:MI:SS');

ORA-39885: flashback/PITR of a pluggable database before its creation is not allowed

 

بعد از آن برای همان زمان ، در دیتابیس اصلی SCN مربوطه را پیدا و دستور flashback را مجددا با دستور SCN اجرا کردیم:

select timestamp_to_scn(TO_TIMESTAMP('2019-02-01 18:45:00','YYYY-MM-DD HH24:MI:SS')) as scn

 from dual;

flashback pluggable database PDB1 to timestamp SCN 211427454;

 

بعد از اجرای دستور بالا مجددا خطای زیر را دریافت شد:

(3):Recovery of pluggable database PDB1 aborted due to pluggable database open resetlog marker.

(3):To continue recovery, restore all data files for this PDB to checkpoint SCN lower than 211427382, or timestamp before 02/01/2019 18:45:01, and restart recovery

Errors with log +FRA/IUMSPRD1/ARCHIVELOG/2019_02_02/thread_1_seq_3450.674.999172645

MRP0: Background Media Recovery terminated with error 39874

2019-02-02T12:42:32.802424+00:00

Errors in file /u01/app/oracle/diag/rdbms/iumsprd1/iumsprd/trace/iumsprd_pr00_100007.trc:

ORA-39874: Pluggable Database PDB1 recovery halted

ORA-39873: Restore all data files to a checkpoint SCN lower than 211427382.

 

برای حل خطای بالا ( همانطور که در خطا گفته شده است ) ، PDB را به SCN قبل از زمان تعیین شده flashback کردیم و مشکل حل شد.

select timestamp_to_scn(TO_TIMESTAMP('2019-02-01 18:40:00','YYYY-MM-DD HH24:MI:SS')) as scn

 from dual;

flashback pluggable database PDB1 to timestamp SCN 211418400;

غیر فعال شدن 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


خطای ORA-38754 هنگام flashback database

در دیتابیس 12c ، اگر هنگام flashback  در یک PDB به یک restore point که قبلا ایجاد شده است به error زیر برخورد کردید :

ERROR at line 1:

ORA-38754: FLASHBACK DATABASE not started; required redo log is not available

ORA-38762: redo logs needed for SCN 1251365490 to SCN 1251403027

ORA-38761: redo log sequence 905 in thread 1, incarnation 1 could not be accessed

 

به این دلیل است که log archiveهایی که برای ریکاور کردن احتیاج دارد در مسیر FRA پیدا نمیکند. برای حل این مشکل باید ابتدا اگر بکاپی از آرشیوها دارید restore نمایید و مجددا flashback  را انجام دهید.

rman target /

RMAN> restore archivelog from sequence 904 ;

SQL> alter pluggable database PDB1 close immediate;

SQL> flashback pluggable database PDB1 to restore point PDB1_20180214;

SQL> alter pluggable database PDB1 open resetlogs;