(Les16 执行数据库恢复)-表空间恢复

NOARCHIVELOG模式下丢失了数据文件     数据库处于NOARCHIVELOG模式时,如果丢失任何数据文件,执行以下步骤         1.如果实例尚未关闭,请关闭实例         2.从备份还原整个数据库,包括所有数据文件和控制文件         3.打开数据库         4.让用户重新输入自上次备份以来所做的所有更改   ARCHIVELOG模式下丢失了非关键性数据文件(SYSTEM,UNDO除外)         仅仅恢复当前数据文件不用整库恢复,不需要停机         1.数据文件离线         2.restore数据文件,介质恢复         3.recover事务         4.数据文件联机   ARCHIVELOG模式下丢失了关键性数据文件(SYSTEM,UNDO…)         数据库关键性数据文件丢失,需要停机恢复         1.实例可能会也可能不会自动关闭。如果未自动关闭,请使用SHUTDOWN ABORT关闭实例         2.装载数据库,MOUNT         3.还原并恢复缺失的数据文件,restore datafile/database          4.recover datafile/database         5.打开数据库       归档模式下恢复非关键表空间  

set linesize 300
set pagesize 600
col file_name format a50
col tablespace_name format a20
select tablespace_name,file_name from dba_data_files;
创建一个非关键表空间进行测试
create tablespace redo_data  datafile '/u01/app/oracle/oradata/xiocpt0/redo_data01.dbf' size 32M autoextend on next 32M maxsize 1024M;
SQL> create tablespace redo_data  datafile '/u01/app/oracle/oradata/xiocpt0/redo_data01.dbf' size 32M autoextend on next 32M maxsize 1024M;
Tablespace created.
SQL> set linesize 300
set pagesize 600
col file_name format a50
col tablespace_name format a20
select tablespace_name,file_name from dba_data_files;
TABLESPACE_NAME      FILE_NAME
-------------------- --------------------------------------------------
USERS                /u01/app/oracle/oradata/xiocpt0/users01.dbf
UNDOTBS1             /u01/app/oracle/oradata/xiocpt0/undotbs01.dbf
SYSAUX               /u01/app/oracle/oradata/xiocpt0/sysaux01.dbf
SYSTEM               /u01/app/oracle/oradata/xiocpt0/system01.dbf
REDO_DATA            /u01/app/oracle/oradata/xiocpt0/redo_data01.dbf
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;
对数据进行一次完全备份
RMAN> shutdown immediate
RMAN> startup mount
RMAN> run
{
allocate channel c1 device type disk format '/u01/backup/backup01_%U' ;
backup as compressed backupset database;
backup current controlfile;
alter database open;
}
RMAN> list backup;
List of Backup Sets
===================
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
7       Full    321.23M    DISK        00:00:38     22-MAY-18
BP Key: 7   Status: AVAILABLE  Compressed: YES  Tag: TAG20180522T151208
Piece Name: /u01/backup/backup01_08t3hoq8_1_1
List of Datafiles in backup set 7
File LV Type Ckp SCN    Ckp Time  Name
---- -- ---- ---------- --------- ----
1       Full 1058982    22-MAY-18 /u01/app/oracle/oradata/xiocpt0/system01.dbf
2       Full 1058982    22-MAY-18 /u01/app/oracle/oradata/xiocpt0/sysaux01.dbf
3       Full 1058982    22-MAY-18 /u01/app/oracle/oradata/xiocpt0/undotbs01.dbf
4       Full 1058982    22-MAY-18 /u01/app/oracle/oradata/xiocpt0/users01.dbf
5       Full 1058982    22-MAY-18 /u01/app/oracle/oradata/xiocpt0/redo_data01.dbf
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
8       Full    1.05M      DISK        00:00:03     22-MAY-18
BP Key: 8   Status: AVAILABLE  Compressed: YES  Tag: TAG20180522T151208
Piece Name: /u01/backup/backup01_09t3horl_1_1
SPFILE Included: Modification time: 22-MAY-18
SPFILE db_unique_name: XIOCPT0
Control File Included: Ckp SCN: 1058982      Ckp time: 22-MAY-18
BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
9       Full    9.64M      DISK        00:00:01     22-MAY-18
BP Key: 9   Status: AVAILABLE  Compressed: NO  Tag: TAG20180522T151257
Piece Name: /u01/backup/backup01_0at3horp_1_1
Control File Included: Ckp SCN: 1058982      Ckp time: 22-MAY-18
创建表并指定表空间
SQL> create table REDO_DATA(
2  id number,
3  name varchar2(20)
4  )
5  tablespace REDO_DATA;
Table created.
SQL> declare
v_count number;
begin
for i in 1..1000 loop
insert into redo_data values(i,'name0'||i);
end loop;
end;
/  2    3    4    5    6    7    8    9
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
SQL> select count(*) from REDO_DATA;
COUNT(*)
----------
1000
恢复非关键表空间
sql 'alter tablespace redo_data offline';---离线需恢复的表空间
restore tablespace redo_data;---还原表空间
recover tablespace redo_data;---恢复表空间,期间的事务进行应用
sql 'alter tablespace redo_data online';---恢复完成,将表空间在线
删除数据文件
SQL> !rm -rf /u01/app/oracle/oradata/xiocpt0/redo_data01.dbf
SQL> select count(*) from REDO_DATA;
COUNT(*)
----------
1000
SQL> commit;
Commit complete.
SQL> declare
v_count number;
begin
for i in 1..1000 loop
insert into redo_data values(i,'name0'||i);
end loop;
end;
/  2    3    4    5    6    7    8    9
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
SQL>  select count(*) from REDO_DATA;
COUNT(*)
----------
2000
SQL> !ls -l /u01/app/oracle/oradata/xiocpt0/redo_data01.dbf
ls: cannot access /u01/app/oracle/oradata/xiocpt0/redo_data01.dbf: No such file or directory
SQL> select table_name ,tablespace_name from dba_tables where table_name='REDO_DATA';
TABLE_NAME                     TABLESPACE_NAME
------------------------------ --------------------
REDO_DATA                      REDO_DATA
SQL> alter system switch logfile;
System altered.
SQL>  alter system checkpoint;
System altered.
SQL> select count(*) from REDO_DATA;
COUNT(*)
----------
2000
SQL> declare
v_count number;
begin
for i in 1..1000 loop
insert into redo_data values(i,'name0'||i);
end loop;
end;
/  2    3    4    5    6    7    8    9
PL/SQL procedure successfully completed.
SQL> declare
v_count number;
begin
for i in 1..1000 loop
insert into redo_data values(i,'name0'||i);
end loop;
end;
/  2    3    4    5    6    7    8    9
PL/SQL procedure successfully completed.
SQL> declare
v_count number;
begin
for i in 1..1000 loop
insert into redo_data values(i,'name0'||i);
end loop;
end;
/  2    3    4    5    6    7    8    9
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
SQL> !ls -l /u01/app/oracle/oradata/xiocpt0/redo_data01.dbf
ls: cannot access /u01/app/oracle/oradata/xiocpt0/redo_data01.dbf: No such file or directory
SQL> select count(*) from REDO_DATA;
select count(*) from REDO_DATA
*
ERROR at line 1:
ORA-00376: file 5 cannot be read at this time
ORA-01110: data file 5: '/u01/app/oracle/oradata/xiocpt0/redo_data01.dbf'
开始执行还原/恢复操作
RMAN> sql 'alter tablespace redo_data offline';
sql statement: alter tablespace redo_data offline
RMAN>
restore tablespace redo_data;
RMAN>
Starting restore at 22-MAY-18
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=19 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 00005 to /u01/app/oracle/oradata/xiocpt0/redo_data01.dbf
channel ORA_DISK_1: reading from backup piece /u01/backup/backup01_08t3hoq8_1_1
channel ORA_DISK_1: piece handle=/u01/backup/backup01_08t3hoq8_1_1 tag=TAG20180522T151208
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 22-MAY-18
RMAN>   recover tablespace redo_data;
Starting recover at 22-MAY-18
using channel ORA_DISK_1
starting media recovery
archived log for thread 1 with sequence 74 is already on disk as file /u01/archive/arch_976375926_1_74.arc
archived log for thread 1 with sequence 75 is already on disk as file /u01/archive/arch_976375926_1_75.arc
archived log for thread 1 with sequence 76 is already on disk as file /u01/archive/arch_976375926_1_76.arc
archived log for thread 1 with sequence 77 is already on disk as file /u01/archive/arch_976375926_1_77.arc
archived log for thread 1 with sequence 78 is already on disk as file /u01/archive/arch_976375926_1_78.arc
archived log for thread 1 with sequence 79 is already on disk as file /u01/archive/arch_976375926_1_79.arc
archived log for thread 1 with sequence 80 is already on disk as file /u01/archive/arch_976375926_1_80.arc
archived log for thread 1 with sequence 81 is already on disk as file /u01/archive/arch_976375926_1_81.arc
archived log for thread 1 with sequence 82 is already on disk as file /u01/archive/arch_976375926_1_82.arc
archived log for thread 1 with sequence 83 is already on disk as file /u01/archive/arch_976375926_1_83.arc
archived log for thread 1 with sequence 84 is already on disk as file /u01/archive/arch_976375926_1_84.arc
archived log for thread 1 with sequence 85 is already on disk as file /u01/archive/arch_976375926_1_85.arc
archived log file name=/u01/archive/arch_976375926_1_74.arc thread=1 sequence=74
archived log file name=/u01/archive/arch_976375926_1_75.arc thread=1 sequence=75
archived log file name=/u01/archive/arch_976375926_1_76.arc thread=1 sequence=76
archived log file name=/u01/archive/arch_976375926_1_77.arc thread=1 sequence=77
archived log file name=/u01/archive/arch_976375926_1_78.arc thread=1 sequence=78
archived log file name=/u01/archive/arch_976375926_1_79.arc thread=1 sequence=79
archived log file name=/u01/archive/arch_976375926_1_80.arc thread=1 sequence=80
media recovery complete, elapsed time: 00:00:00
Finished recover at 22-MAY-18
RMAN>   sql 'alter tablespace redo_data online';
sql statement: alter tablespace redo_data online
SQL>  select count(*) from REDO_DATA;
COUNT(*)
----------
5000

 

 

    归档模式下恢复关键表空间          数据库关键性数据文件丢失,需要停机恢复         1.实例可能会也可能不会自动关闭。如果未自动关闭,请使用SHUTDOWN ABORT关闭实例         2.装载数据库,MOUNT         3.还原并恢复缺失的数据文件,restore datafile/database          4.recover datafile/database         5.打开数据库  

SQL> set linesize 300
set pagesize 600
col file_name format a50
col tablespace_name format a20
select tablespace_name,file_name from dba_data_files;SQL> SQL> SQL> SQL>
TABLESPACE_NAME      FILE_NAME
-------------------- --------------------------------------------------
USERS                /u01/app/oracle/oradata/xiocpt0/users01.dbf
UNDOTBS1             /u01/app/oracle/oradata/xiocpt0/undotbs01.dbf
SYSAUX               /u01/app/oracle/oradata/xiocpt0/sysaux01.dbf
SYSTEM               /u01/app/oracle/oradata/xiocpt0/system01.dbf
REDO_DATA            /u01/app/oracle/oradata/xiocpt0/redo_data01.dbf
SQL>
SQL> !rm -rf /u01/app/oracle/oradata/xiocpt0/system01.dbf
startup mount ---将数据库启动到mount
restore tablespace system;---指定关键表空间进行还原
recover tablespace system;---恢复表空间
sql 'alter database open';---将数据库打开
[oracle@t-xi-oracle01 ~]$ rman  target /
Recovery Manager: Release 11.2.0.4.0 - Production on Tue May 22 15:30:33 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to target database (not started)
RMAN> startup mount
Oracle instance started
database mounted
Total System Global Area     409194496 bytes
Fixed Size                     2253744 bytes
Variable Size                322964560 bytes
Database Buffers              79691776 bytes
Redo Buffers                   4284416 bytes
RMAN> restore tablespace system;
Starting restore at 22-MAY-18
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=18 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 00001 to /u01/app/oracle/oradata/xiocpt0/system01.dbf
channel ORA_DISK_1: reading from backup piece /u01/backup/backup01_08t3hoq8_1_1
channel ORA_DISK_1: piece handle=/u01/backup/backup01_08t3hoq8_1_1 tag=TAG20180522T151208
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:45
Finished restore at 22-MAY-18
RMAN> recover tablespace system;
Starting recover at 22-MAY-18
using channel ORA_DISK_1
starting media recovery
archived log for thread 1 with sequence 74 is already on disk as file /u01/archive/arch_976375926_1_74.arc
archived log for thread 1 with sequence 75 is already on disk as file /u01/archive/arch_976375926_1_75.arc
archived log for thread 1 with sequence 76 is already on disk as file /u01/archive/arch_976375926_1_76.arc
archived log for thread 1 with sequence 77 is already on disk as file /u01/archive/arch_976375926_1_77.arc
archived log for thread 1 with sequence 78 is already on disk as file /u01/archive/arch_976375926_1_78.arc
archived log for thread 1 with sequence 79 is already on disk as file /u01/archive/arch_976375926_1_79.arc
archived log for thread 1 with sequence 80 is already on disk as file /u01/archive/arch_976375926_1_80.arc
archived log for thread 1 with sequence 81 is already on disk as file /u01/archive/arch_976375926_1_81.arc
archived log for thread 1 with sequence 82 is already on disk as file /u01/archive/arch_976375926_1_82.arc
archived log for thread 1 with sequence 83 is already on disk as file /u01/archive/arch_976375926_1_83.arc
archived log for thread 1 with sequence 84 is already on disk as file /u01/archive/arch_976375926_1_84.arc
archived log for thread 1 with sequence 85 is already on disk as file /u01/archive/arch_976375926_1_85.arc
archived log for thread 1 with sequence 86 is already on disk as file /u01/archive/arch_976375926_1_86.arc
archived log file name=/u01/archive/arch_976375926_1_74.arc thread=1 sequence=74
archived log file name=/u01/archive/arch_976375926_1_75.arc thread=1 sequence=75
archived log file name=/u01/archive/arch_976375926_1_76.arc thread=1 sequence=76
archived log file name=/u01/archive/arch_976375926_1_77.arc thread=1 sequence=77
archived log file name=/u01/archive/arch_976375926_1_78.arc thread=1 sequence=78
archived log file name=/u01/archive/arch_976375926_1_79.arc thread=1 sequence=79
archived log file name=/u01/archive/arch_976375926_1_80.arc thread=1 sequence=80
archived log file name=/u01/archive/arch_976375926_1_81.arc thread=1 sequence=81
media recovery complete, elapsed time: 00:00:00
Finished recover at 22-MAY-18
RMAN> sql 'alter database open';
sql statement: alter database open

 

     

 

     

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐