用备份控制文件做不完全恢复下的完全恢复(全备<老>--备份控制文件<次新>--删除表空间andy--日志文件<新>)
2017-01-12 19:45
316 查看
为什么会使用备份的控制文件? 实际工作中主要有两种情况:
第一种:当前控制文件全部损坏,而数据文件备份,控制文件备份及当前日志处于不同SCN版本,它们之间又增加过表空间(数据文件)。
第二种:当前控制文件没有损坏,但想要恢复被删除的表空间。
实验3 :全备<老>--备份控制文件<次新>--删除表空间andy--日志文件<新>
情形:用户使用正常操作命令删除了表空间及其数据文件,但之后又希望恢复删除的表空间。全备里有这个表空间的数据文件。
分析:当用户使用drop tablesapce xxx including contents and datafiles 这条DDL语句后,数据库的结构发生了变更,涉及了三个地方。
a)控制文件
b)该表空间下的数据文件
c)系统表空间(数据字典)
特别提醒的是:当前的控制文件里已经没有该表空间的信息了,所以不能使用当前的控制文件做恢复。恢复这个表空间要满足三个条件:
a)要有该表空间的数据文件备份
b)使用不完全恢复(基于时间点或scn)
c)使用备份的控制文件,而这个控制文件是删除该表空间前的控制文件,不是当前的控制文件。这个非常重要,该控制文件中的内容记录了你需要恢复数据库结构,重要的这个控制文件必须包括有你要恢复的那个表空间的信息。
1)准备环境
--生成要备份的数据文件的命令
SQL> select 'ho cp ' || name || ' /home/oracle/coldbak' from v$datafile;
'HOCP'||NAME||'/HOME/ORACLE/COLDBAK'
-------------------------------------------------------------------------
ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak
6 rows selected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak
SQL> startup;
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 729812824 bytes
Database Buffers 331350016 bytes
Redo Buffers 5554176 bytes
Database mounted.
Database opened.
SQL> alter database backup controlfile to '/home/oracle/coldbak/ctl01.bak';
Database altered.
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
USERS
TEMP
LZY
GOLDGATE
SQL> create tablespace andy datafile '/home/oracle/app/oradata/orcl/andy01.dbf' size 1m;
Tablespace created.
SQL> create table andy.andy(id int) tablespace andy;
Table created.
SQL> insert into andy.andy values (101);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from andy.andy;
ID
----------
101
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2042681
2)模拟正常删除表空间
SQL> drop tablespace andy including contents and datafiles;
3) 关闭数据库
SQL> shutdown immediate;
4)还原所有数据文件,以老控制文件替换当前控制文件
[oracle@11g orcl]$ rm -rf *.dbf
[oracle@11g orcl]$ rm -rf /home/oracle/app/oradata/orcl/control01.ctl
[oracle@11g orcl]$ rm -rf /home/oracle/app/flash_recovery_area/orcl/control02.ctl
[oracle@11g coldbak]$ cp ctl01.bak /home/oracle/app/oradata/orcl/control01.ctl
[oracle@11g coldbak]$ cp ctl01.bak /home/oracle/app/flash_recovery_area/orcl/control02.ctl
[oracle@11g coldbak]$ cp *.dbf /home/oracle/app/oradata/orcl/
5)启动数据库后,要做基于时间点(或SCN)的不完全恢复
SQL> startup;
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 729812824 bytes
Database Buffers 331350016 bytes
Redo Buffers 5554176 bytes
Database mounted.
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选
SQL> recover database until change 2042681 using backup controlfile;
6)resetlogs打开数据库
SQL> alter database open resetlogs;
Database altered.
7)验证
SQL> select * from andy.andy;
ID
----------
101
OK,结束。 转载请标明出处。
第一种:当前控制文件全部损坏,而数据文件备份,控制文件备份及当前日志处于不同SCN版本,它们之间又增加过表空间(数据文件)。
第二种:当前控制文件没有损坏,但想要恢复被删除的表空间。
实验3 :全备<老>--备份控制文件<次新>--删除表空间andy--日志文件<新>
情形:用户使用正常操作命令删除了表空间及其数据文件,但之后又希望恢复删除的表空间。全备里有这个表空间的数据文件。
分析:当用户使用drop tablesapce xxx including contents and datafiles 这条DDL语句后,数据库的结构发生了变更,涉及了三个地方。
a)控制文件
b)该表空间下的数据文件
c)系统表空间(数据字典)
特别提醒的是:当前的控制文件里已经没有该表空间的信息了,所以不能使用当前的控制文件做恢复。恢复这个表空间要满足三个条件:
a)要有该表空间的数据文件备份
b)使用不完全恢复(基于时间点或scn)
c)使用备份的控制文件,而这个控制文件是删除该表空间前的控制文件,不是当前的控制文件。这个非常重要,该控制文件中的内容记录了你需要恢复数据库结构,重要的这个控制文件必须包括有你要恢复的那个表空间的信息。
1)准备环境
--生成要备份的数据文件的命令
SQL> select 'ho cp ' || name || ' /home/oracle/coldbak' from v$datafile;
'HOCP'||NAME||'/HOME/ORACLE/COLDBAK'
-------------------------------------------------------------------------
ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak
6 rows selected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> ho cp /home/oracle/app/oradata/orcl/system01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/sysaux01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/undotbs01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/users01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/tbtb01.dbf /home/oracle/coldbak
ho cp /home/oracle/app/oradata/orcl/ogg01.dbf /home/oracle/coldbak
SQL> startup;
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 729812824 bytes
Database Buffers 331350016 bytes
Redo Buffers 5554176 bytes
Database mounted.
Database opened.
SQL> alter database backup controlfile to '/home/oracle/coldbak/ctl01.bak';
Database altered.
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
USERS
TEMP
LZY
GOLDGATE
SQL> create tablespace andy datafile '/home/oracle/app/oradata/orcl/andy01.dbf' size 1m;
Tablespace created.
SQL> create table andy.andy(id int) tablespace andy;
Table created.
SQL> insert into andy.andy values (101);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from andy.andy;
ID
----------
101
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2042681
2)模拟正常删除表空间
SQL> drop tablespace andy including contents and datafiles;
3) 关闭数据库
SQL> shutdown immediate;
4)还原所有数据文件,以老控制文件替换当前控制文件
[oracle@11g orcl]$ rm -rf *.dbf
[oracle@11g orcl]$ rm -rf /home/oracle/app/oradata/orcl/control01.ctl
[oracle@11g orcl]$ rm -rf /home/oracle/app/flash_recovery_area/orcl/control02.ctl
[oracle@11g coldbak]$ cp ctl01.bak /home/oracle/app/oradata/orcl/control01.ctl
[oracle@11g coldbak]$ cp ctl01.bak /home/oracle/app/flash_recovery_area/orcl/control02.ctl
[oracle@11g coldbak]$ cp *.dbf /home/oracle/app/oradata/orcl/
5)启动数据库后,要做基于时间点(或SCN)的不完全恢复
SQL> startup;
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2220200 bytes
Variable Size 729812824 bytes
Database Buffers 331350016 bytes
Redo Buffers 5554176 bytes
Database mounted.
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选
SQL> recover database until change 2042681 using backup controlfile;
6)resetlogs打开数据库
SQL> alter database open resetlogs;
Database altered.
7)验证
SQL> select * from andy.andy;
ID
----------
101
OK,结束。 转载请标明出处。
相关文章推荐
- 用备份控制文件做不完全恢复下的完全恢复(全备<老>--备份控制文件<次新>--删除表空间andy--日志文件<新>)
- 用备份控制文件做不完全恢复下的完全恢复(全备<老>--备份控制文件<次新>--新建表空间andy--日志文件<新>)
- 用备份控制文件做不完全恢复下的完全恢复(全备<老>--备份控制文件<次新>--新建表空间andy--日志文件<新>)
- 用备份控制文件做不完全恢复下的完全恢复(数据文件备份<旧>--新建表空间--控制文件备份<次新>--日志归档文件<新>)
- 用备份控制文件做不完全恢复下的完全恢复(数据文件备份<旧>--新建表空间--控制文件备份<次新>--日志归档文件<新>)
- RMAN 备份恢复 删除表空间后控制文件丢失
- [强烈推荐]Oracle:只有rman备份(数据,参数,日志,控制文件全丢失)的恢复
- ARCHIVELOG模式下用户管理的不完全恢复(4)——基于备份控制文件的不完全恢复!
- 利用DBMS_BACKUP_RESETORE从备份中恢复控制文件数据文件和归档日志
- 第6天-3 RMAN不完全恢复】【用scn恢复到特定的时刻】【控制文件损坏】【损坏日志文件状态非INACTIVE时,数据库打不开】【增加联机日志文件】【修改所有联机日志大小同义10M】
- Eclipse从SVN恢复本地<误删除已删除>的文件和代码
- 模拟控制文件全部丢失与归档日志文件丢失的不完全恢复
- 如何使用备份的控制文件做完全恢复
- 无备份有完全归档日志情况下恢复数据文件
- RMAN备份与恢复(3)——恢复归档日志、控制文件、参数文件!
- Eclipse从SVN恢复本地<误删除已删除>的文件和代码
- 恢复删除了数据文件的表<MyISAM>
- 使用RMAN和控制文件备份删除归档日志的SHELL脚本--RED HAT 5 LINUX 64
- oracle控制文件备份和日志文件备份和恢复
- Oracle:只有rman备份(数据,参数,日志,控制文件全丢失)的恢复