اوراکل در نسخه 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
سلام و عرض ادب
جناب مهندس مطالب منتسب به شما مثل همیشه عالی و کاربردی اند.
تشکر از نظر لطفتون