اوراکل 21c – بازگرداندن دیتابیس به هر زمانی در گذشته

اوراکل در نسخه 19c اجازه نمی دهد که یک pdb را به زمانی از یک ORPHAN incarnation برگردانیم:

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Apr 21 08:28:57 2022
Version 19.3.0.0.0
SQL>  SELECT con_id, status, pdb_incarnation# inc#, begin_resetlogs_scn, end_resetlogs_scn FROM v$pdb_incarnation ORDER BY 3;
    CON_ID STATUS        INC# BEGIN_RESETLOGS_SCN END_RESETLOGS_SCN
---------- ------- ---------- ------------------- -----------------
         3 PARENT           0             1920977           1920977
         3 ORPHAN           1             1963437           1963437
         3 CURRENT          2             1964176           1964176
SQL>  alter pluggable database pdb1401 close;
Pluggable database altered.
SQL> flashback pluggable database to scn 1962565;
ORA-39889: Specified System Change Number (SCN) or timestamp is in the middle of a previous PDB RESETLOGS operation.
SQL> flashback pluggable database PDB1401  to scn 1963437;
ORA-39889: Specified System Change Number (SCN) or timestamp is in the middle of a previous PDB RESETLOGS operation.
[oracle@stb ~]$ rman target sys/sys@192.168.1.20:1521/pdb1401
RMAN> reset pluggable database pdb1401  to incarnation 1;
'RMAN-07536: command not allowed when connected to a Pluggable Database'

اما در نسخه 21c این قابلیت به وجود آمد تا بتوان یک PDB را به هر زمانی در گذشته برگرداند(البته گذشته نزدیک). در ادامه با سناریوی زیر و با ایجاد یک ORPHAN incarnation بیشتر با این فیچر را آشنا خواهیم شد.

alter session set container=pdb1401;
SQL> create table usef.mtbl (id number,des varchar2(100));
Table created.
SQL> insert into  usef.mtbl values (1,'flashback_0');
1 row created.
SQL> commit;
Commit complete.
SQL> SELECT CURRENT_SCN from V$DATABASE;
CURRENT_SCN
-----------
2665904
SQL> create restore point flashback_0;
SQL> SELECT con_id, status, pdb_incarnation# inc#, begin_resetlogs_scn, end_resetlogs_scn FROM v$pdb_incarnation ORDER BY 3;
    CON_ID STATUS        INC# BEGIN_RESETLOGS_SCN END_RESETLOGS_SCN
---------- ------- ---------- ------------------- -----------------
         3 PARENT           0                   1                 1
         3 CURRENT          0             2601843           2601843

تا اینجای سناریو، عبارت flashback_0 را در جدول mtbl(ستون des) درج کرده ایم در این قسمت با اجرای دستور زیر عبارت flashback_0 را به flashback_1 تغییر می دهیم:

SQL> update usef.mtbl set des='flashback_1';
1 row updated.
SQL> commit;
Commit complete.
SQL> SELECT CURRENT_SCN from V$DATABASE;
CURRENT_SCN
-----------
2665948
SQL> create restore point flashback_1;
Restore point created.
اولین flashback

قصد داریم تغییر انجام شده(تغییر از عبارت flashback_0 به flashback_1) را از طریق flashback کردن pdb برگردانیم(البته در این حالت روشهای بهتری چون flashback کردن جدول هم در دسترس هستند):

SQL> alter pluggable database pdb1401 close;
Pluggable database altered.
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 PDB1401                           MOUNTED
SQL> flashback pluggable database to restore point flashback_0;
Flashback complete.
SQL> alter pluggable database pdb1401 open resetlogs;
Pluggable database altered.
SQL> select des from usef.mtbl;
DES
-------------------
flashback_0

همانطور که می بینید، جدول mtbl بعد از انجام عملیات flashback، عبارت flashback_0 را در خود دارد و PDB هم وارد incarnation جدید شده است:

SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 PDB1401                           READ WRITE NO
SQL> SELECT CURRENT_SCN from V$DATABASE;
CURRENT_SCN
-----------
2666758
SQL> SELECT con_id, status, pdb_incarnation# inc#, begin_resetlogs_scn, end_resetlogs_scn FROM v$pdb_incarnation ORDER BY 3;
         3 PARENT           0             2601843           2601843
         3 CURRENT          1             2666493           2666493

برای پیش بردن سناریو، نیاز داریم تا یک ORPHAN incarnation ایجاد کنیم بنابرین باید flashback دیگری را اجرا کنیم. قبل از انجام flashback جدید، عبارت flashback_2 را در ستون des ثبت می کنیم.

SQL> update usef.mtbl set des='flashback_2';
1 row updated.
SQL> commit;
Commit complete.
SQL>  SELECT CURRENT_SCN from V$DATABASE;
CURRENT_SCN
-----------
2666829
SQL> create restore point flashback_2;
Restore point created.
دومین flashback

PDB را به incarnation اول بر می گردانیم(restore point flashback_0):

SQL> alter pluggable database pdb1401 close;
Pluggable database altered.
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 PDB1401                           MOUNTED
SQL> flashback pluggable database to restore point flashback_0;
Flashback complete.
SQL> alter pluggable database pdb1401 open resetlogs;
Pluggable database altered.
SQL> select des from usef.mtbl;
DES
------------------------
flashback_0

flashback به درستی انجام شد و pdb وارد incarnation جدید شد. همچنین incarnation قبلی که در آن عبارت flashback_2 را در جدول mtbl ثبت کرده بودیم، وضعیتش به ORPHAN تغییر کرده است:

SQL> SELECT con_id, status, pdb_incarnation# inc#, begin_resetlogs_scn, end_resetlogs_scn FROM v$pdb_incarnation ORDER BY 3;
    CON_ID STATUS        INC# BEGIN_RESETLOGS_SCN END_RESETLOGS_SCN
---------- ------- ---------- ------------------- -----------------
         3 PARENT           0             2601843           2601843
         3 ORPHAN           1             2666493           2666493
         3 CURRENT          2             2667898           2667898
سومین flashback

قصد داریم pdb1401 را به ORPHAN incarnation ایجاد شده برگردانیم جایی که عبارت flashback_2 را در جدول mtbl ثبت کرده بودیم و همینطور restore pointای با نام flashback_1 را ساخته بودیم. این کار در نسخه 19c امکان پذیر نبود اما اوراکل نسخه 21c این قابلیت را به ما می دهد:

SQL> alter pluggable database pdb1401 close;
Pluggable database altered.
SQL> show pdbs
    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         3 PDB1401                           MOUNTED
SQL> flashback pluggable database to restore point flashback_1;
Flashback complete.
SQL> alter pluggable database pdb1401 open resetlogs;
Pluggable database altered.
SQL> select des from usef.mtbl;
DES
--------------------------------------------------------------------------------
flashback_1
SQL>  SELECT con_id, status, pdb_incarnation# inc#, begin_resetlogs_scn, end_resetlogs_scn FROM v$pdb_incarnation ORDER BY 3;
    CON_ID STATUS        INC# BEGIN_RESETLOGS_SCN END_RESETLOGS_SCN
---------- ------- ---------- ------------------- -----------------
         3 PARENT           0             2601843           2601843
         3 ORPHAN           1             2666493           2666493
         3 ORPHAN           2             2667898           2667898
         3 CURRENT          3             2669267           2669267

 

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

Comments (2)

  1. سلام و عرض ادب
    جناب مهندس مطالب منتسب به شما مثل همیشه عالی و کاربردی اند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *