一看就會一做就廢系列:說說 RECOVER DATABASE(上)


這里是:一看就會,一做就廢系列

數據庫演示版本為 19.3 (12.2.0.3

該系列涉及恢復過程中使用的 5 個語句:

1. recover database

2. recover database until cancel

3. recover database using backup controlfile

4. recover database until cancel using backup controlfile

5. recover database using backup controlfile until cancel

繼續之前,你得知道什么叫還原什么叫恢復 ?以及備份與恢復的基礎 點我查看己亥清爽系列

恢復級別一共三個:recover database > recover tablespace > recover datafile 本系列目的是為了演示上面 5 條命令的區別與聯系,所以不探討恢復級別以及數據庫狀態對應所使用的恢復級別問題。最高級別 database 已經包含了 tablespace 和 datafile 兩個級別。

版權聲明:博客園 AskScuti 版權所有,未經允許,禁止轉載!

 目錄

1. 概念解釋

2. 情況說明

3. 實驗過程

  3.1 備份 CDB

  3.2 PDB1 創建測試數據

  3.3 刪除 PDB1 所有數據文件

  3.4 還原 PDB1 所有數據文件

  3.5 恢復 PDB1 所有數據文件

  3.6 開啟 PDB1 進行數據驗證

 

1. 概念解釋

  首先你得知道,recover database 這個命令是用作對所有數據文件進行恢復的,而且是完全恢復

  有個細節注意下,這個命令分為兩種,一種用在 SQL 命令行一種用在 RMAN

  SQL > recover database 僅對所有數據文件進行完全恢復,前提是控制文件為當前最新狀態不可以是還原過來的老版本或是手工重建,否則 SQL 命令行執行將返回錯誤

  RMAN > recover database 對所有數據文件和控制文件進行完全恢復

  本例中僅演示對數據文件的完全恢復,此命令對控制文件的恢復將在下篇討論。

  一句話:recover database 就是對所有數據進行完全恢復操作(控制文件、歸檔日志、聯機日志完好無損的情況下

 

2. 情況說明

  當前系統中,控制文件、歸檔日志、聯機日志都完好無損,刪除數據文件,進行還原,使用 recover database 進行完全恢復。

 

3. 實驗過程

3.1 備份 CDB

備份整個 CDB(CDB$ROOT / PDB1 / PDB$SEED)

RMAN> backup database format '/u02/backup/%s_%d_%U.full' tag 'full_backup';
RMAN> backup database format '/u02/backup/%s_%d_%U.full' tag 'full_backup';

Starting backup at 08-JUN-19
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/u01/app/oracle/oradata/CDB1/system01.dbf
input datafile file number=00003 name=/u01/app/oracle/oradata/CDB1/sysaux01.dbf
input datafile file number=00004 name=/u01/app/oracle/oradata/CDB1/undotbs01.dbf
input datafile file number=00007 name=/u01/app/oracle/oradata/CDB1/users01.dbf
channel ORA_DISK_1: starting piece 1 at 08-JUN-19
channel ORA_DISK_1: finished piece 1 at 08-JUN-19
piece handle=/u02/backup/8_CDB1_08u3ji4n_1_1.full tag=FULL_BACKUP comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:55
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00010 name=/u01/app/oracle/oradata/CDB1/pdb1/sysaux01.dbf
input datafile file number=00009 name=/u01/app/oracle/oradata/CDB1/pdb1/system01.dbf
input datafile file number=00011 name=/u01/app/oracle/oradata/CDB1/pdb1/undotbs01.dbf
input datafile file number=00012 name=/u01/app/oracle/oradata/CDB1/pdb1/users01.dbf
input datafile file number=00013 name=/u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf
channel ORA_DISK_1: starting piece 1 at 08-JUN-19
channel ORA_DISK_1: finished piece 1 at 08-JUN-19
piece handle=/u02/backup/9_CDB1_09u3ji6f_1_1.full tag=FULL_BACKUP comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00006 name=/u01/app/oracle/oradata/CDB1/pdbseed/sysaux01.dbf
input datafile file number=00005 name=/u01/app/oracle/oradata/CDB1/pdbseed/system01.dbf
input datafile file number=00008 name=/u01/app/oracle/oradata/CDB1/pdbseed/undotbs01.dbf
channel ORA_DISK_1: starting piece 1 at 08-JUN-19
channel ORA_DISK_1: finished piece 1 at 08-JUN-19
piece handle=/u02/backup/10_CDB1_0au3ji78_1_1.full tag=FULL_BACKUP comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
Finished backup at 08-JUN-19

Starting Control File and SPFILE Autobackup at 08-JUN-19
piece handle=/u02/backup/c-983951798-20190608-02.CTL comment=NONE
Finished Control File and SPFILE Autobackup at 08-JUN-19
process

3.2 PDB1 創建測試數據

連接 PDB1 查看當前數據文件

[oracle@henry ~]$ sqlplus sys/oracle@pdb1 as sysdba
SQL> select name from v$datafile;
[oracle@henry ~]$ sqlplus sys/oracle@pdb1 as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jun 8 16:48:51 2019
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> select name from v$datafile;

NAME
------------------------------------------------
/u01/app/oracle/oradata/CDB1/pdb1/system01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/sysaux01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/undotbs01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/users01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf

創建測試表 recover_db,插入數據 1,2,3 並 commit 提交

SQL> create table recover_db(id number) tablespace henry;

Table created.

SQL> insert into recover_db values(1);

1 row created.

SQL> insert into recover_db values(2);

1 row created.

SQL> insert into recover_db values(3);

1 row created.

SQL> commit;

Commit complete.

3.3 刪除 PDB1 所有數據文件

SQL> !rm -rf /u01/app/oracle/oradata/CDB1/pdb1/*

繼續插入數據 4,5,6 不提交,執行觸發完全檢查點,刷緩存數據,報錯(請思考:物理文件刪除,是否還可以繼續插入數據?為什么)

SQL> insert into recover_db values(4);

1 row created.

SQL> insert into recover_db values(5);

1 row created.

SQL> insert into recover_db values(6);

1 row created.

SQL> alter system checkpoint;

System altered.

SQL> /
alter system checkpoint
*
ERROR at line 1:
ORA-03135: connection lost contact
Process ID: 30992
Session ID: 273 Serial number: 51273

因為對表的所有操作都是在內存里面,此時和物理數據文件無關,所以可以繼續。

觸發檢查點的目的是為了將緩存數據刷入磁盤,而這時就和數據文件有關系了,第一次觸發完全檢查點刷數據,沒反應過來,第二次刷報錯,因為緩存數據要寫入磁盤,可是對應的磁盤文件被刪除,因此報錯。

請留意:插入 4,5,6 三條數據后的操作,是否有提交?完全恢復是否可以恢復出 4,5,6 ?

切換 CDB 查看 PDB1 狀態,並嘗試啟動(這里為什么 PDB1 是 MOUNT ?)

SQL> conn / as sysdba
Connected.
SQL> show pdbs

    CON_ID CON_NAME      OPEN MODE  RESTRICTED
---------- ------------- ---------- ----------
     2   PDB$SEED       READ ONLY  NO
     3   PDB1           MOUNTED
SQL
> alter pluggable database pdb1 open; alter pluggable database pdb1 open * ERROR at line 1: ORA-01157: cannot identify/lock data file 13 - see DBWR trace file ORA-01110: data file 13: '/u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf'

因為多租戶體系中,參數文件控制文件都處於 CDB 級別,因此,只要 CDB 是開啟的,下面所有 PDB 最低級別都是 MOUNT(哪怕這個庫已經出了問題,停止了,依然顯示MOUNT)

3.4 還原 PDB1 所有數據文件

還原數據文件

你可以連接 PDB1 還原自己

[oracle@henry ~]$ rman target sys/oracle@pdb1

Recovery Manager: Release 19.0.0.0.0 - Production on Sat Jun 8 17:13:26 2019
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

connected to target database: CDB1:PDB1 (DBID=2947650716, not open)

RMAN> restore database from tag='FULL_BACKUP';

Starting restore at 08-JUN-19
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=11 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00009 to /u01/app/oracle/oradata/CDB1/pdb1/system01.dbf
channel ORA_DISK_1: restoring datafile 00010 to /u01/app/oracle/oradata/CDB1/pdb1/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00011 to /u01/app/oracle/oradata/CDB1/pdb1/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00012 to /u01/app/oracle/oradata/CDB1/pdb1/users01.dbf
channel ORA_DISK_1: restoring datafile 00013 to /u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf
channel ORA_DISK_1: reading from backup piece /u02/backup/9_CDB1_09u3ji6f_1_1.full
channel ORA_DISK_1: piece handle=/u02/backup/9_CDB1_09u3ji6f_1_1.full tag=FULL_BACKUP
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:36
Finished restore at 08-JUN-19

還可以連接 CDB ,還原 PDB1

RMAN> restore pluggable database pdb1 from tag='FULL_BACKUP';

Starting restore at 08-JUN-19
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00009 to /u01/app/oracle/oradata/CDB1/pdb1/system01.dbf
channel ORA_DISK_1: restoring datafile 00010 to /u01/app/oracle/oradata/CDB1/pdb1/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00011 to /u01/app/oracle/oradata/CDB1/pdb1/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00012 to /u01/app/oracle/oradata/CDB1/pdb1/users01.dbf
channel ORA_DISK_1: restoring datafile 00013 to /u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf
channel ORA_DISK_1: reading from backup piece /u02/backup/9_CDB1_09u3ji6f_1_1.full
channel ORA_DISK_1: piece handle=/u02/backup/9_CDB1_09u3ji6f_1_1.full tag=FULL_BACKUP
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:35
Finished restore at 08-JUN-19

3.5 恢復 PDB1 所有數據文件

恢復數據文件

你可以連接 PDB1 恢復自己

RMAN> recover database;

Starting recover at 08-JUN-19
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 08-JUN-1

還可以連接 CDB ,恢復 PDB1

RMAN> recover pluggable database pdb1;

Starting recover at 08-JUN-19
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 08-JUN-19

3.6 開啟 PDB1 進行數據驗證

打開數據庫

你可以連接 PDB1 打開自己

RMAN> alter database open;

Statement processed

還可以連接 CDB ,打開 PDB1

RMAN> alter pluggable database pdb1 open;

Statement processed

驗證數據

請問,完全恢復之后,recover_db 表中有幾條數據為什么?

SQL> select * from recover_db;

    ID
----------
     1
     2
     3

因為插入 4,5,6 沒有提交,事務沒有結束,因此不具有持久性。完全恢復是恢復到宕機前最后一次 commit 的狀態


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM