RMAN恢复某张表的方法

一、Oracle 11g有备份的情况下,恢复某张表

环境模拟:删除 test 用户下 t1 表中的数据。

1.查看表的相关信息

ACCEPT SCHEMA PROMPT 'Table Owner: '
ACCEPT TABNAME PROMPT 'Table Name: '

set verify off
set feedback off
set lines 100
set pages 999
with temp as  (
select tablespace_name from dba_tables where owner=UPPER('&SCHEMA') and table_name=UPPER('&TABNAME') union all
select tablespace_name from dba_TAB_PARTITIONS where TABLE_OWNER=UPPER('&SCHEMA') and table_name=UPPER('&TABNAME') union all
select tablespace_name from dba_indexes where owner=UPPER('&SCHEMA') and table_name=UPPER('&TABNAME') union all
select tablespace_name from dba_lobs where owner=UPPER('&SCHEMA') and table_name=UPPER('&TABNAME'))
select distinct tablespace_name "tbs info " from temp union all
select ' ' as "tbs info" from dual union all
select 'file_id   |   file_name          |     tablespace' as "tbs info" from dual union all
select '------------------------------------------------------------' as "tbs info" from dual union all
select ''||file_id||'   '||file_name||'   '||tablespace_name||''  "tbs_info " from dba_data_files where
tablespace_name in (select distinct tablespace_name "tbs info " from temp);

prompt            
prompt          
prompt '2.table size'
SELECT
 (SELECT SUM(S.BYTES/1024/1024) 
  FROM DBA_SEGMENTS S
  WHERE S.OWNER = UPPER('&SCHEMA') AND
       (S.SEGMENT_NAME = UPPER('&TABNAME'))) +
 (SELECT nvl(SUM(S.BYTES/1024/1024),0)                                                                                           
  FROM DBA_SEGMENTS S, DBA_LOBS L
  WHERE S.OWNER = UPPER('&SCHEMA') AND
       (L.SEGMENT_NAME = S.SEGMENT_NAME AND L.TABLE_NAME = UPPER('&TABNAME') AND L.OWNER = UPPER('&SCHEMA'))) +
 (SELECT  nvl(SUM(S.BYTES/1024/1024),0)                                                                                       
  FROM DBA_SEGMENTS S, DBA_INDEXES I
  WHERE S.OWNER = UPPER('&SCHEMA') AND
       (I.INDEX_NAME = S.SEGMENT_NAME AND I.TABLE_NAME = UPPER('&TABNAME') AND INDEX_TYPE = 'LOB' AND I.OWNER = UPPER('&SCHEMA')))
  "TOTAL TABLE SIZE(MB)"
FROM DUAL;

prompt
prompt
prompt '3.table info'
col object_name for a20
col object_type for a20
col status for a10
col created for a15
select object_name,object_type,status,created from dba_objects where owner=UPPER('&SCHEMA') and object_name=UPPER('&TABNAME');

prompt
prompt
prompt '4.columns info'
col column_name for a20
col data_type for a20
select column_name,data_type from dba_tab_columns where owner=UPPER('&SCHEMA') and table_name=UPPER('&TABNAME');

2.恢复相关的表空间

2.1.恢复参数文件,编辑修改

RMAN> restore spfile to pfile '/CS_ORCL/pfile.txt' from '/CS_ORCL/orcl_1n03p1v4_1_1';

2.2.创建所需路径,恢复控制文件

mkdir -p /oradata/orcl
restore controlfile from '/CS_ORCL/orcl_1n03p1v4_1_1';

2.3.启动到mount,恢复表空间

alter database mount;
catalog start with '/CS_ORCL/';

run {
allocate channel d1 type disk;
allocate channel d2 type disk;
set newname for datafile 1 to '/CS_ORCL/system01.dbf';
set newname for datafile 2 to '/CS_ORCL/sysaux01.dbf';
set newname for datafile 3 to '/CS_ORCL/undotbs01.dbf';
set newname for datafile 4 to '/CS_ORCL/users01.dbf';
set newname for datafile 7 to '/CS_ORCL/test_c.dbf';
restore tablespace SYSTEM,SYSAUX,USERS,UNDOTBS1,TEST_C;
switch datafile all;
release channel d1;
release channel d2;
}

3.需要使用 recover database skip tablespace 的方式跳过不必要的表空间进行恢复,并打开数据库

SQL> select name from v$tablespace where name not in ('SYSTEM','SYSAUX','USERS','UNDOTBS1','TEST_C');

RMAN> recover database skip tablespace P1,TEST_B,AUDIT_TBS,P2,BIG1,BIG2,TEST,FQCS1,FQCS2,TEMP;

SQL> alter database open resetlogs;

4.导出t1表

expdp sys/1 directory=dir2 dumpfile=t1.dmp tables=test.t1 logfile=e1.log

5.导入到正式环境

impdp sys/1 directory=dir dumpfile=t1.dmp table_exists_action=append logfile=i1.log

至此表恢复工作完成。

二、Oracle 12c有备份的情况下,恢复某张表

环境模拟:删除 orclpdb 中 test 用户下 t2 表中的数据。

恢复表的限制:
(1)SYS用户表或分区无法恢复。
(2)存储于SYSAUX和SYSTEM表空间下的表和分区无法恢复。
(3)当REMAP选项用来恢复的表包含NOT NULL约束时,恢复此表是不可行的。
(4)在备库上的表和分区表不能恢复。

恢复表的方法:
(2)SCN
(3)时间戳
(4)Sequence number(日志序列号)

1.恢复被删除的表

recover table TEST.T2 of pluggable database orclpdb until time "to_date('2021-07-15 17:33:00','yyyy-mm-dd hh24:mi:ss')" auxiliary destination '/u01/recover_table' datapump destination '/home/oracle/impdp' dump file 'test.t2.dmp' notableimport;

2.导入表

[oracle@12c impdp]$ ll
-rw-r----- 1 oracle oinstall 188416 Jul 16 10:25 test.t2.dmp

创建导入目录,并授权:
create directory impdp as '/home/oracle/expdp/';
grant read,write on directory impdp to test;
impdp test/admin@orclpdb directory=impdp dumpfile=test.t2.dmp table_exists_action=append logfile=t2.log

3.recover用法补充

--将恢复的表重命名
recover table TEST.T2 of pluggable database orclpdb until scn 1664487 auxiliary destination '/u01/recover_table' remap table TEST.T2:TEST.T2BAK;

recover 详细语法使用请点此查看✔✔✔🐇

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值