您好,登錄后才能下訂單哦!
Oracle數據庫備份主要分為兩類:邏輯和物理備份。每種備份類型都有其自身的優缺點。在之前的版本中,利用現有物理備份來恢復表或分區是不可行的。為了恢復特定對象,邏輯備份是必需的。
在Oracle12c 版本中,你可以在發生drop或truncate的情況下從RMAN備份將一個特定的表或分區恢復到某個時間點或SCN。
RMAN的表級和表分區級恢復應用場景:
1、您需要將非常少量的表恢復到特定的時間點。在這種情況下,TSPITR 不是最有效的解決方案,因為它將表空間中的所有對象都移動到指定的時間點。
2、您需要恢復已被邏輯損壞或已被刪除和清除的表。
3、Flashback Table 不可用,如undo 數據已經被覆蓋。
4、恢復在DDL操作修改表結構之后丟失的數據。使用Flashback表是不可能的,因為在需要的時間點和當前時間之間的表上運行一個DDL。閃回表不能通過諸 如截斷表操作之類的結構更改來倒表。
RMAN的表級和表分區級恢復限制:
①:SYS用戶表或分區無法恢復
②:存儲于SYSAUX和SYSTEM表空間下的表和分區無法恢復
③:當REMAP選項用來恢復的表包含NOT NULL約束時,恢復此表是不可行的
④:在備庫上的表和分區表不能恢復
RMAN的表級和表分區級恢復前提:
1、The target database must be in read-write mode.
2、The target database must be in ARCHIVELOG mode.
3、You must have RMAN backups of the tables or table partitions as they existed at the point in time to which you want recover these objects.
4、To recover single table partitions, the COMPATIBLE initialization parameter for target database must be set to 11.1.0 or higher.
恢復方法:
1、SCN
2、Time
3、Sequence number
RMAN從備份中自動處理恢復表或者表分區時的步驟:
1.確定哪些備份包含需要恢復的表或表分區,根據指定的時間來進行恢復。
2.確定目標主機上是否有足夠的空間來創建將在表或分區恢復過程中使用的輔助實例。 如果需要的空間不足,那么RMAN會報錯并退出恢復操作。
3.創建一個輔助數據庫并恢復指定的表或表分區,并根據指定的時間來恢復指定的表或表分區到輔助數據庫中。 可以指定用于存儲已恢復表或表分區的元數 據的導出轉儲文件的名稱和位置。
4.創建一個數據泵導出轉儲文件,其中包含已恢復的表或表分區。可以指定用于存儲已恢復表或表分區的元數據的導出轉儲文件的名稱和位置。
5.(可選操作)將上一步生產的數據泵文件導入到目標實例中。您可以選擇不導入包含已恢復的表或表分區到目標數據庫的導出轉儲文件。如果您不導入導 出轉儲文件作為恢復過程的一部分,那么您必須在稍后使用 impdp 手工導入。
6.(可選操作)在目標數據庫中rename 恢復表或表分區。
準備測試環境:Oracle12.2
[oracle@localhost ~]$ sqlplus '/as sysdba' SQL*Plus: Release 12.2.0.1.0 Production on Mon Jul 24 12:39:29 2017 Copyright (c) 1982, 2016, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL>
一、恢復PDB中的表
①:在pdb中創建測試表:
[oracle@localhost ~]$ sqlplus admin/admin@192.168.2.100/testpdb SQL*Plus: Release 12.2.0.1.0 Production on Fri Jul 21 16:28:24 2017 Copyright (c) 1982, 2016, Oracle. All rights reserved. Last Successful login time: Fri Jul 21 2017 16:27:50 +08:00 Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> alter session set nls_date_format='yyyy-mm-dd hh34:mi:ss'; Session altered. SQL> select sysdate from dual; ---查看當前時間 SYSDATE ------------------- 2017-07-21 16:29:06 SQL> create table emp as select * from dba_objects; ----創建測試表emp Table created. SQL> select sysdate from dual; ---查看當前時間 SYSDATE ------------------- 2017-07-21 16:29:23 SQL>
②:備份全庫
[oracle@localhost ~]$ rman target / Recovery Manager: Release 12.2.0.1.0 - Production on Fri Jul 21 16:30:05 2017 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1476406003) RMAN> backup database format='/home/oracle/bak/fulldb_%d_%U'; ----該備份會備份CDB及所有的pdb Starting backup at 21-JUL-17 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=59 device type=DISK 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=/opt/oracle/oradata/orcl/system01.dbf input datafile file number=00003 name=/opt/oracle/oradata/orcl/sysaux01.dbf input datafile file number=00013 name=/opt/oracle/oradata/orcl/system02.dbf input datafile file number=00014 name=/opt/oracle/oradata/orcl/sysaux02.dbf input datafile file number=00004 name=/opt/oracle/oradata/orcl/undotbs01.dbf 。。。。。。。。省略
③:登錄pdb中,刪除測試表
[oracle@localhost ~]$ sqlplus admin/admin@192.168.2.100/testpdb SQL*Plus: Release 12.2.0.1.0 Production on Fri Jul 21 16:35:15 2017 Copyright (c) 1982, 2016, Oracle. All rights reserved. Last Successful login time: Fri Jul 21 2017 16:28:24 +08:00 Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> alter session set nls_date_format='yyyy-mm-dd hh34:mi:ss'; SQL> select sysdate from dual; ----查看當前時間 SYSDATE ------------------- 2017-07-21 16:35:56 SQL> create table test_emp as select * from dba_objects; ---再創建一個測試表test_emp SQL> select current_scn from v$database; ---查看當前數據庫的SCN號,一會用于恢復使用 CURRENT_SCN ----------- 1664487 SQL> commit; SQL> select sysdate from dual; SYSDATE ------------------- 2017-07-21 16:37:04 SQL> drop table emp; ----刪除第一個剛才備份的測試表emp Table dropped. SQL> select sysdate from dual; SYSDATE ------------------- 2017-07-21 16:38:31 SQL> drop table test_emp; ----再刪除剛剛創建的測試表test_emp(注意該表沒有備份) SQL> select current_scn from v$database; ----刪除表后,再查看當前數據庫的SCN CURRENT_SCN ----------- 1665210 SQL> select current_scn from v$database; CURRENT_SCN ----------- 1665213 SQL> -----注意:上面的操作我們可以看出 我們一共創建了兩張表,一張表emp備份了,另外一張test_emp 是備份后創建的,我們都刪除了,接下來進行恢復
④:rman恢復pdb中的表
[oracle@localhost ~]$ rman target / Recovery Manager: Release 12.2.0.1.0 - Production on Fri Jul 21 17:32:24 2017 Copyriht (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1476406003) RMAN> recover table admin.test_emp OF PLUGGABLE DATABASE testpdb until scn 1664487 auxiliary destination '/opt/oracle/test'; ---因為是備份pdb中的表,所以要指定pdb auxiliary instance file /opt/oracle/test/ORCL/539E6DBB875552F2E055000000000001/datafile/o1_mf_temp_dq3l21wf_.tmp deleted auxiliary instance file /opt/oracle/test/ORCL/datafile/o1_mf_temp_dq3l1tmp_.tmp deleted auxiliary instance file /opt/oracle/test/KSFR_PITR_TESTPDB_ORCL/onlinelog/o1_mf_3_dq3l4kg0_.log deleted auxiliary instance file /opt/oracle/test/KSFR_PITR_TESTPDB_ORCL/onlinelog/o1_mf_2_dq3l47rl_.log deleted auxiliary instance file /opt/oracle/test/KSFR_PITR_TESTPDB_ORCL/onlinelog/o1_mf_1_dq3l47nn_.log deleted auxiliary instance file /opt/oracle/test/KSFR_PITR_TESTPDB_ORCL/539E6DBB875552F2E055000000000001/datafile/o1_mf_test_dq3l3xdf_.dbf deleted auxiliary instance file /opt/oracle/test/ORCL/539E6DBB875552F2E055000000000001/datafile/o1_mf_sysaux_dq3l0sf7_.dbf deleted auxiliary instance file /opt/oracle/test/ORCL/datafile/o1_mf_sysaux_dq3kyd0s_.dbf deleted auxiliary instance file /opt/oracle/test/ORCL/datafile/o1_mf_sysaux_dq3kyd0g_.dbf deleted auxiliary instance file /opt/oracle/test/ORCL/539E6DBB875552F2E055000000000001/datafile/o1_mf_undotbs1_dq3l0sg1_.dbf deleted auxiliary instance file /opt/oracle/test/ORCL/datafile/o1_mf_undotbs1_dq3kyd0x_.dbf deleted auxiliary instance file /opt/oracle/test/ORCL/539E6DBB875552F2E055000000000001/datafile/o1_mf_system_dq3l0sfc_.dbf deleted auxiliary instance file /opt/oracle/test/ORCL/datafile/o1_mf_system_dq3kyd0m_.dbf deleted auxiliary instance file /opt/oracle/test/ORCL/datafile/o1_mf_system_dq3kyd05_.dbf deleted auxiliary instance file /opt/oracle/test/ORCL/controlfile/o1_mf_dq3ky1cb_.ctl deleted auxiliary instance file tspitr_ksFr_40802.dmp deleted Finished recover at 21-JUL-17 -----日志部分省略,這就算恢復完成了, ----補充 RMAN> recover table admin.test_emp OF PLUGGABLE DATABASE testpdb until scn 1664487 auxiliary destination '/opt/oracle/test' remap table admin.test_emp:test_empbak; ---將恢復的表重命名
⑤:驗證是否恢復完成:
SQL> select count(*) from emp; COUNT(*) ---------- 72633 SQL> select count(*) from test_emp; COUNT(*) ---------- 72634
---從上面的查詢情況可以得知,恢復是完整的,沒有問題;但是,大家肯定有個疑問,那就是為什么我沒有進行備份的表怎么還恢復成功了,有疑問的可以去看看官方文檔,多了解下恢復的原理。
二、Oracle12C(無pdb級的表恢復)
---在安裝的過程中沒有選擇PDB的特性,把Oracle12C和之前的版本一樣使用安裝的方式:
恢復的流程是和上面PDB級恢復一樣的,只是在恢復的命令上有差別,如:
RMAN> recover table admin.emp until scn 1665210 remap table admin.emp:emp_bak auxiliary destination '/hoem/oracle/bak';
注意:
①:分區表的恢復方法也是同樣的
②:即使表emp做了DDL操作修改了表結構,也可以用這種方法進行恢復的;
Oracle12Crman恢復表的詳細內容請查看官方文檔:
http://docs.oracle.com/database/121/BRADV/rcmresind.htm#BRADV686
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。