- データベース管理者のための主要20c新機能の学習
- データベース管理者のための主要20c新機能の学習
- パフォーマンスおよび高可用性のオプション
- フラッシュバック
- 過去のある時点へのPDBポイント・イン・タイム・リカバリまたはフラッシュバック
- 演習: 過去のある時点へのPDBのフラッシュバック
演習: 過去のある時点へのPDBのフラッシュバック
この演習では、特定の時間へのPDB PITR/フラッシュバックを実行した後、PDB時間へのPDB PITR/フラッシュバックを孤立したPDBインカーネーションで実行する方法を示します。
- 新しい演習を開始する前に、演習の環境の推奨事項を参照してください。
PDB20
のデータのフラッシュバックを開始する前に、CDBでフラッシュバックを有効にする/home/oracle/labs/M104782GC10/setup_Flashback.sh
シェル・スクリプトを実行し、PDB20
を再作成して、HRスキーマをPDB20
に作成します。$ cd /home/oracle/labs/M104782GC10 $ /home/oracle/labs/M104782GC10/setup_Flashback.sh SQL*Plus: Release 20.0.0.0.0 - Production on Mon Jan 13 11:05:13 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> ALTER DATABASE FLASHBACK on; Database altered. SQL> exit Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL*Plus: Release 20.0.0.0.0 - Production on Mon Jan 13 11:15:41 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> ALTER PLUGGABLE DATABASE pdb20 CLOSE; Pluggable database altered. SQL> ALTER SESSION SET db_create_file_dest='/home/oracle/labs'; Session altered. SQL> DROP PLUGGABLE DATABASE pdb20 INCLUDING DATAFILES; Pluggable database dropped. SQL> CREATE PLUGGABLE DATABASE pdb20 2 ADMIN USER pdb_admin IDENTIFIED BY password ROLES=(CONNECT) 3 CREATE_FILE_DEST='/home/oracle/labs'; Pluggable database created. SQL> SQL> ALTER PLUGGABLE DATABASE pdb20 OPEN; Pluggable database altered. SQL> exit Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL*Plus: Release 20.0.0.0.0 - Production on Mon Jan 13 11:05:14 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 specify password for HR as parameter 1: specify default tablespeace for HR as parameter 2: specify temporary tablespace for HR as parameter 3: specify log path as parameter 4: PL/SQL procedure successfully completed. User created. ALTER USER hr DEFAULT TABLESPACE users ... Commit complete. PL/SQL procedure successfully completed. SQL> Disconnected from Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 $
- CDBルートに接続し、CDBがオープンしていてフラッシュバックが有効になっていることを確認します。
$ sqlplus / AS SYSDBA SQL*Plus: Release 20.0.0.0.0 - Production on Fri Mar 13 07:10:40 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2020, Oracle. All rights reserved. Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> SELECT open_mode, flashback_on FROM v$database; OPEN_MODE FLASHBACK_ON -------------------- ------------------ READ WRITE YES SQL>
PDB20
のHR.EMPLOYEES
表でDDLまたはDMLコマンドを実行する前に、PDBの現在のSCNとそれに関連付けられたタイムスタンプおよびインカーネーションを表示します。SQL> CONNECT sys@PDB20 AS SYSDBA Enter password: password Connected. SQL> COL TIMESTAMP FORMAT A40 SQL> SELECT CURRENT_SCN, SCN_TO_TIMESTAMP(CURRENT_SCN) "TIMESTAMP" from V$DATABASE; CURRENT_SCN SCN_TO_TIMESTAMP(CURRENT_SCN) ----------- -------------------------------------------------------------------- 3880324 13-MAR-20 07.12.24.000000000 AM 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 ---------- ------- ---------- ------------------- ----------------- 4 PARENT 0 1 1 4 CURRENT 0 2667602 2667602 SQL>
使用可能な
ORPHAN
インカーネーションは、以前のPDBリセットログから取得されます。HR.EMPLOYEES
表内の行数が表示されます。SQL> SELECT count(*) FROM hr.employees; COUNT(*) ---------- 107 SQL>
- ユーザーが
PDB20
のHR.EMPLOYEES
表を誤って削除します。SQL> DROP TABLE hr.employees CASCADE CONSTRAINTS; Table dropped. SQL>
- 削除された表をリストアするためにPDBをフラッシュバックします。
PDB20
が閉じていることを確認します。他のPDBは、オープンで操作可能な状態でもかまいません。SQL> ALTER PLUGGABLE DATABASE CLOSE; Pluggable database altered. SQL>
- 表が削除される前の時点までデータをフラッシュバックします。指定した時点またはリストア・ポイントへのフラッシュバック操作の場合は、孤立したPDBインカーネーションを設定する必要はありません。フラッシュバック・データベース・コマンドのために、必要なSCNまたは特定の時点を決定します。この時点は、現在のCDBインカネーション内または祖先CDBインカネーション内である必要があります。
SQL> FLASHBACK PLUGGABLE DATABASE TO SCN 3880324; Flashback complete. SQL>
RESETLOGS
を指定してPDB20
をオープンします。SQL> ALTER PLUGGABLE DATABASE OPEN RESETLOGS; Pluggable database altered. SQL> SELECT count(*) FROM hr.employees; COUNT(*) ---------- 107 SQL>
PDB20
のインカーネーションを表示します。SQL> SELECT con_id, pdb_incarnation# INC#, status, incarnation_scn, end_resetlogs_scn FROM v$pdb_incarnation ORDER BY 1, 2; CON_ID INC# STATUS INCARNATION_SCN END_RESETLOGS_SCN ---------- ---------- ------- --------------- ----------------- 4 0 PARENT 2667602 2667602 4 1 CURRENT 3880344 3881083 SQL>
- 一部の従業員について、
HR.EMPLOYEES
の従業員の給与を2倍に増やします。SQL> SELECT min(salary), MAX(salary) FROM hr.employees; MIN(SALARY) MAX(SALARY) ----------- ----------- 2100 24000 SQL> UPDATE hr.employees SET salary=salary*2 WHERE employee_id<200; 100 rows updated. SQL> COMMIT; Commit complete. SQL> SELECT CURRENT_SCN, SCN_TO_TIMESTAMP(CURRENT_SCN) "TIMESTAMP" from V$DATABASE; CURRENT_SCN TIMESTAMP ----------- ---------------------------------------- 3881391 13-MAR-20 07.16.33.000000000 AM SQL>
- 2分後に、従業員206を削除します。
SQL> DELETE FROM hr.employees WHERE employee_id=206; 1 rows deleted. SQL> COMMIT; Commit complete. SQL> SELECT count(*) FROM hr.employees; COUNT(*) ---------- 106 SQL> SELECT CURRENT_SCN, SCN_TO_TIMESTAMP(CURRENT_SCN) "TIMESTAMP" from V$DATABASE; CURRENT_SCN TIMESTAMP ----------- ---------------------------------------- 3882392 13-MAR-20 07.20.27.000000000 AM SQL> SELECT con_id, pdb_incarnation# INC#, status, incarnation_scn, end_resetlogs_scn FROM v$pdb_incarnation ORDER BY 1, 2; CON_ID INC# STATUS INCARNATION_SCN END_RESETLOGS_SCN ---------- ---------- ------- --------------- ----------------- 4 0 PARENT 2667602 2667602 4 1 CURRENT 3880344 3881083 SQL>
- 表が削除される前の時点までデータをフラッシュバックすることにします。
SQL> ALTER PLUGGABLE DATABASE CLOSE; Pluggable database altered. SQL> FLASHBACK PLUGGABLE DATABASE TO SCN 3880324; Flashback complete. SQL> ALTER PLUGGABLE DATABASE OPEN RESETLOGS; Pluggable database altered. SQL> SELECT count(*) FROM hr.employees; COUNT(*) ---------- 107 SQL> SELECT min(salary), MAX(salary) FROM hr.employees; MIN(SALARY) MAX(SALARY) ----------- ----------- 2100 24000 SQL> SELECT con_id, pdb_incarnation# INC#, status, incarnation_scn, end_resetlogs_scn FROM v$pdb_incarnation ORDER BY 1, 2; 2 CON_ID INC# STATUS INCARNATION_SCN END_RESETLOGS_SCN ---------- ---------- ------- --------------- ----------------- 4 0 PARENT 2667602 2667602 4 1 ORPHAN 3880344 3881083 4 2 CURRENT 3880325 3882600 SQL>
- ユーザーが、給与の更新後で従業員206が削除される前の状態に
PDB20
をリセットするように要求します。PDB20
のこの状態は、PDB20
のインカーネーション1に属します。フラッシュバックPDB操作を実行する必要がある孤立したPDBインカネーションを設定します。このステップは、フラッシュバック操作が孤立したPDBインカーネーションのSCNまたは特定の時間へのものであるため、必要です。SQL> RESET PLUGGABLE DATABASE TO INCARNATION 1; SP2-0734: unknown command beginning "RESET PLUG..." - rest of line ignored. SQL> EXIT $
このコマンドは、RMANにのみ存在します。
$ rman TARGET sys@PDB20 target database Password: password connected to target database: CDB20:PDB20 (DBID=2289122758) RMAN> LIST INCARNATION OF PLUGGABLE DATABASE pdb20; using target database control file instead of recovery catalog List of Pluggable Database Incarnations DB Key PDB Key PDBInc Key DBInc Key PDB Name Status Inc SCN Inc Time Begin Reset SCN Begin Reset Time ------- ------- -------- --------- ------- -------- --------------- ------------------ --------------- ------------------ 2 4 2 2 PDB20 CURRENT 3880325 13-MAR-20 3882600 13-MAR-20 End Reset SCN:3882600 End Reset Time:13-MAR-20 Guid:A0B8281946B32375E053424C960A082A 2 4 1 2 PDB20 ORPHAN 3880344 13-MAR-20 3881083 13-MAR-20 End Reset SCN:3881083 End Reset Time:13-MAR-20 Guid:A0B8281946B32375E053424C960A082A 2 4 0 2 PDB20 PARENT 2667602 12-MAR-20 2667602 12-MAR-20 End Reset SCN:2667602 End Reset Time:12-MAR-20 Guid:A0B8281946B32375E053424C960A082A RMAN> RESET PLUGGABLE DATABASE pdb20 TO INCARNATION 1; RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of reset database command at 03/13/2020 07:28:33 RMAN-05625: command not allowed when connected to a pluggable database RMAN> exit Recovery Manager complete. $ $ rman TARGET / Recovery Manager: Release 20.0.0.0.0 - Production on Mon Mar 13 11:50:04 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. connected to target database: CDB20 (DBID=2732805675) RMAN> ALTER PLUGGABLE DATABASE pdb20 CLOSE; using target database control file instead of recovery catalog Statement processed RMAN> RESET PLUGGABLE DATABASE pdb20 TO INCARNATION 1; pluggable database reset to incarnation 1 RMAN> FLASHBACK PLUGGABLE DATABASE pdb20 TO SCN 3880344; Starting flashback at 13-JAN-20 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=148 device type=DISK starting media recovery media recovery failed RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of flashback command at 03/13/2020 07:31:00 ORA-39889: Specified System Change Number (SCN) or timestamp is in the middle of a previous PDB RESETLOGS operation. RMAN> exit
このエラーはどういう意味ですか。
$ oerr ora 39889 39889, 00000, "Specified System Change Number (SCN) or timestamp is in the middle of a previous PDB RESETLOGS operation." // *Cause: The specified System Change Number (SCN) or timestamp was in the // middle of a previous PDB RESETLOGS operation. More specifically, // each PDB RESETLOGS operation may create a PDB incarnation as shown // in v$pdb_incarnation. Any SCN between INCARNATION_SCN and // END_RESETLOGS_SCN or any timestamp between INCARNATION_TIME and // END_RESETLOGS_TIME as shown in v$pdb_incarnation is considered in // the middle of the PDB RESETLOGS operation. // *Action: Flashback the PDB to an SCN or timestamp that is not in the middle // of a previous PDB RESETLOGS operation. If flashback to a SCN on the // orphan PDB incarnation is required, then use // "RESET PLUGGABLE DATABASE TO INCARNATION" RMAN command to specify // the pluggable database incarnation along which flashback to the // specified SCN must be performed. Also, ensure that the feature is // enabled. $
ステップ11の最後に表示されたSCNを使用します。
$ rman TARGET / Recovery Manager: Release 20.0.0.0.0 - Production on Mon Mar 13 11:50:04 2020 Version 20.2.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. connected to target database: CDB20 (DBID=2732805675) RMAN> RESET PLUGGABLE DATABASE pdb20 TO INCARNATION 1; pluggable database reset to incarnation 1 RMAN> FLASHBACK PLUGGABLE DATABASE pdb20 TO SCN 3881391; Starting flashback at 13-MAR-20 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=19 device type=DISK starting media recovery archived log for thread 1 with sequence 9 is already on disk as file /u03/app/oracle/fast_recovery_area/CDB20_IAD3CV/archivelog/2020_04_07/o1_mf_1_9_h8s80s3f_.arc archived log for thread 1 with sequence 10 is already on disk as file /u03/app/oracle/fast_recovery_area/CDB20_IAD3CV/archivelog/2020_04_07/o1_mf_1_10_h8s80t1w_.arc archived log for thread 1 with sequence 11 is already on disk as file /u03/app/oracle/fast_recovery_area/CDB20_IAD3CV/archivelog/2020_04_07/o1_mf_1_11_h8s80y54_.arc media recovery complete, elapsed time: 00:00:25 Finished flashback at 13-MAR-20 RMAN> EXIT Recovery Manager complete. $
- PDBをオープンし、従業員の給与が更新され、従業員206もリストアされた状態でデータがリストアされていることを確認します。
$ sqlplus sys@PDB20 AS SYSDBA Enter password: password Connected to: Oracle Database 20c Enterprise Edition Release 20.0.0.0.0 - Production Version 20.2.0.0.0 SQL> ALTER PLUGGABLE DATABASE pdb20 OPEN RESETLOGS; Pluggable database altered. SQL> CONNECT system@PDB20 Enter password: password Connected. SQL> SELECT count(*) FROM hr.employees; COUNT(*) ---------- 107 SQL> SELECT min(salary), MAX(salary) FROM hr.employees; MIN(SALARY) MAX(SALARY) ----------- ----------- 4200 48000 SQL> SELECT con_id, pdb_incarnation# INC#, status, incarnation_scn, end_resetlogs_scn FROM v$pdb_incarnation ORDER BY 1, 2; CON_ID INC# STATUS INCARNATION_SCN END_RESETLOGS_SCN ---------- ---------- ------- --------------- ----------------- 4 0 PARENT 2667602 2667602 4 1 PARENT 3880344 3881083 4 2 ORPHAN 3880325 3882600 4 3 CURRENT 3881392 3884391 SQL> EXIT $