oracle用户管理的完全恢复3:在ARCHIVELOG 模式(恢复关闭的数据库)
2013-01-23 11:14
639 查看
场景描述:恢复关闭的数据库
在以下情况中,通常将此恢复方法与RECOVER DATABASE命令或RECOVER DATAFIL命令一起使用:
a.恢复的文件属于系统表空间或回退段表空间。
b.需要恢复整个数据库或大部分数据文件。
c.数据库不是全天候(每周7 天、每天24 小时)运行。
前期场景描述图:表t创建在表空间sun01上,用户为user1。分别在不同的时间点插入3条数据,恢复要求三条数据不缺失。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/28/cdb747b35a4c7477648eec7dbed1ac68.gif)
1.查看环境:在ARCHIVELOG 模式下
2.模拟生产库场景图
2.1 创建表空间sun01
2.2 在sun01表空间上创建用户user1
2.3 在user1上创建表t,并插入数据
2.4 冷备此时sun01_1.dbf 中一条记录
2.5 在表t中插入数据
2.6 热备 此时sun01_1.dbf 中两条记录
2.7 热备结束 继续向表t插入记录
[b]恢复场景描述图:[/b]
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/28/1f7322f8c649a99e08527b66f6644bd3.gif)
3.恢复场景:数据库在关闭的情况下做完全恢复情况
a.系统表空间损坏
b.undo表空间损坏
c.整个数据库损坏
3.1 损坏整个库的dbf数据文件,包括系统数据文件
3.2 强制关闭数据库
3.3 从冷备还原数据文件
3.4 启动数据库 此时会报错
3.5 查看有哪些文件需要恢复
3.6 恢复
3.7 打开数据库
4.查看先前插入的三条数据会否存在
在以下情况中,通常将此恢复方法与RECOVER DATABASE命令或RECOVER DATAFIL命令一起使用:
a.恢复的文件属于系统表空间或回退段表空间。
b.需要恢复整个数据库或大部分数据文件。
c.数据库不是全天候(每周7 天、每天24 小时)运行。
前期场景描述图:表t创建在表空间sun01上,用户为user1。分别在不同的时间点插入3条数据,恢复要求三条数据不缺失。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/28/cdb747b35a4c7477648eec7dbed1ac68.gif)
1.查看环境:在ARCHIVELOG 模式下
-bash-3.00$ sqlplus /nolog SQL*Plus: Release 10.2.0.2.0 - Production on Mon Jan 21 16:26:40 2013 Copyright (c) 1982, 2005, Oracle. All Rights Reserved. SQL> conn /as sysdba SQL> archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination /u01/admin/sun/arch Oldest online log sequence 1 Next log sequence to archive 1 Current log sequence 1 SQL> SQL> alter database open; Database altered. SQL>
2.模拟生产库场景图
2.1 创建表空间sun01
SQL> create tablespace sun01 datafile '/u01/oradata/sunbak/sun01_1.dbf' size 10M 2 extent management local uniform 3 segment space management auto; Tablespace created. SQL> #查看表空间 SQL> SELECT TS#,NAME FROM V$TABLESPACE; TS# NAME ---------- ------------------------------ 0 SYSTEM 1 UNDOTBS1 2 SYSAUX 4 USERS 3 TEMP 6 EXAMPLE 7 SUN01 7 rows selected. SQL> #查看表空间对应数据文件 SQL> select TS#,file#,name from v$datafile; TS# FILE# NAME ---------- ---------- -------------------------------------------------- 0 1 /u01/oradata/sunbak/system01.dbf 1 2 /u01/oradata/sunbak/undotbs01.dbf 2 3 /u01/oradata/sunbak/sysaux01.dbf 4 4 /u01/oradata/sunbak/users01.dbf 6 5 /u01/oradata/sunbak/example01.dbf 7 6 /u01/oradata/sunbak/sun01_1.dbf 6 rows selected. SQL>
2.2 在sun01表空间上创建用户user1
SQL> create user user1 identified by user1 default tablespace sun01; User created. SQL> grant connect,resource to user1; Grant succeeded. SQL>
2.3 在user1上创建表t,并插入数据
SQL> conn user1/user1 Connected. SQL> create table t ( id int, name varchar2(16));--表t存在sun01_1.dbf 上 Table created. SQL> insert into t values(0,'oracle'); 1 row created. SQL> commit; Commit complete. SQL>
2.4 冷备此时sun01_1.dbf 中一条记录
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> bash-3.00$ pwd /u01/oradata/sunbak bash-3.00$ ls control01.ctl control03.ctl redo01.log redo03.log sysaux01.dbf temp01.dbf users01.dbf control02.ctl example01.dbf redo02.log sun01_1.dbf system01.dbf undotbs01.dbf bash-3.00$ cp * /u01/backup/cold/ bash-3.00$
2.5 在表t中插入数据
-bash-3.00$ sqlplus /nolog SQL*Plus: Release 10.2.0.2.0 - Production on Tue Jan 22 21:51:54 2013 Copyright (c) 1982, 2005, Oracle. All Rights Reserved. SQL> conn /as sysdba Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 289406976 bytes Fixed Size 1279820 bytes Variable Size 92276916 bytes Database Buffers 192937984 bytes Redo Buffers 2912256 bytes Database mounted. Database opened. SQL> SQL> conn user1/user1 Connected. SQL> insert into t values (1,'oracle'); 1 row created. SQL> commit; Commit complete. SQL>
2.6 热备 此时sun01_1.dbf 中两条记录
-bash-3.00$ sqlplus /nolog SQL*Plus: Release 10.2.0.2.0 - Production on Tue Jan 22 21:51:54 2013 Copyright (c) 1982, 2005, Oracle. All Rights Reserved. SQL> conn /as sysdba Connected to an idle instance. SQL> SQL> alter tablespace sun01 begin backup; Tablespace altered. SQL> SQL> !ls -l /u01/oradata/sunbak/sun01_1.dbf -rw-r----- 1 oracle oinstall 10493952 Jan 22 21:58 /u01/oradata/sunbak/sun01_1.dbf SQL> !cp /u01/oradata/sunbak/sun01_1.dbf /u01/backup/hot/ SQL> !ls -l /u01/backup/hot/ total 20512 -rw-r----- 1 oracle oinstall 10493952 Jan 22 22:00 sun01_1.dbf SQL> alter tablespace sun01 end backup; Tablespace altered. SQL>
2.7 热备结束 继续向表t插入记录
SQL> insert into t values (2,'oracle'); 1 row created. SQL> commit; Commit complete. SQL> #手动切换日志 产生归档日志 SQL> alter system switch logfile; System altered. SQL> alter system switch logfile; System altered. SQL>
[b]恢复场景描述图:[/b]
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/28/1f7322f8c649a99e08527b66f6644bd3.gif)
3.恢复场景:数据库在关闭的情况下做完全恢复情况
a.系统表空间损坏
b.undo表空间损坏
c.整个数据库损坏
3.1 损坏整个库的dbf数据文件,包括系统数据文件
bash-3.00$ cd /u01/oradata/sunbak bash-3.00$ ls -l total 2162512 -rw-r----- 1 oracle oinstall 7061504 Jan 22 23:07 control01.ctl -rw-r----- 1 oracle oinstall 7061504 Jan 22 23:07 control02.ctl -rw-r----- 1 oracle oinstall 7061504 Jan 22 23:07 control03.ctl -rw-r----- 1 oracle oinstall 104865792 Jan 22 22:56 example01.dbf -rw-r----- 1 oracle oinstall 52429312 Jan 22 22:52 redo01.log -rw-r----- 1 oracle oinstall 52429312 Jan 22 22:52 redo02.log -rw-r----- 1 oracle oinstall 52429312 Jan 22 23:07 redo03.log -rw-r----- 1 oracle oinstall 10493952 Jan 22 22:56 sun01_1.dbf -rw-r----- 1 oracle oinstall 251666432 Jan 22 23:07 sysaux01.dbf -rw-r----- 1 oracle oinstall 503324672 Jan 22 23:07 system01.dbf -rw-r----- 1 oracle oinstall 20979712 Jan 22 22:00 temp01.dbf -rw-r----- 1 oracle oinstall 31465472 Jan 22 23:07 undotbs01.dbf -rw-r----- 1 oracle oinstall 5251072 Jan 22 22:56 users01.dbf bash-3.00$ rm -f *.dbf bash-3.00$
3.2 强制关闭数据库
SQL> shutdown abort ORACLE instance shut down. SQL>
3.3 从冷备还原数据文件
bash-3.00$ cd oradata/sunbak bash-3.00$ pwd /u01/oradata/sunbak bash-3.00$ ls control01.ctl control02.ctl control03.ctl redo01.log redo02.log redo03.log bash-3.00$ cp /u01/backup/cold/*.dbf . bash-3.00$ #注此时 dbf文件的scn号与clt文件的scn号并不一致,恢复需要归档日志文件
3.4 启动数据库 此时会报错
SQL> conn /as sysdba Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 289406976 bytes Fixed Size 1279820 bytes Variable Size 92276916 bytes Database Buffers 192937984 bytes Redo Buffers 2912256 bytes Database mounted. ORA-01113: file 1 needs media recovery ORA-01110: data file 1: '/u01/oradata/sunbak/system01.dbf' SQL>
3.5 查看有哪些文件需要恢复
SQL> desc v$recover_file; Name Null? Type ----------------------------------------- -------- ---------------------------- FILE# NUMBER ONLINE VARCHAR2(7) ONLINE_STATUS VARCHAR2(7) ERROR VARCHAR2(18) CHANGE# NUMBER TIME DATE SQL> col error format a30; SQL> select * from v$recover_file; FILE# ONLINE ONLINE_ ERROR CHANGE# TIME ---------- ------- ------- ------------------------------ ---------- --------- 1 ONLINE ONLINE 574367 21-JAN-13 2 ONLINE ONLINE 574367 21-JAN-13 3 ONLINE ONLINE 574367 21-JAN-13 4 ONLINE ONLINE 574367 21-JAN-13 5 ONLINE ONLINE 574367 21-JAN-13 6 ONLINE ONLINE 574367 21-JAN-13 6 rows selected. SQL>
3.6 恢复
#关闭自动恢复 SQL> set autorecovery off;#关闭自动恢复 SQL> recover database; --此处单独恢复文件:recover datafile 1; ORA-00279: change 574367 generated at 01/21/2013 21:21:47 needed for thread 1 ORA-00289: suggestion : /u01/admin/sun/arch/1_2_805319563.dbf ORA-00280: change 574367 for thread 1 is in sequence #2 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} auto ORA-00279: change 581083 generated at 01/22/2013 22:04:42 needed for thread 1 ORA-00289: suggestion : /u01/admin/sun/arch/1_3_805319563.dbf ORA-00280: change 581083 for thread 1 is in sequence #3 ORA-00278: log file '/u01/admin/sun/arch/1_2_805319563.dbf' no longer needed for this recovery Specify log: {<RET>=suggested | filename | AUTO | CANCEL} Log applied. Media recovery complete. SQL> #查看恢复状态 SQL> select * from v$recover_file; no rows selected SQL>
3.7 打开数据库
SQL> alter database open; Database altered. SQL>
4.查看先前插入的三条数据会否存在
SQL> conn user1/user1 Connected. SQL> select * from t; ID NAME ---------- ---------------- 1 oracle 2 oracle 0 oracle 恢复成功
相关文章推荐
- oracle用户管理的完全恢复4:在ARCHIVELOG 模式(恢复打开的数据库--数据库最初是关闭的)
- oracle用户管理的完全恢复4:在ARCHIVELOG 模式(恢复打开的数据库)
- ARCHIVELOG模式下用户管理的完全恢复(1)——恢复关闭的数据库!
- ARCHIVELOG模式下用户管理的完全恢复—恢复关闭的数据库
- ARCHIVELOG模式下用户管理的完全恢复(2)——恢复打开的数据库,并且数据库最初是关闭的!
- ARCHIVELOG模式下用户管理的完全恢复(3)——恢复打开的数据库,并且数据库最初是打开的!
- ARCHIVELOG模式下用户管理的完全恢复—恢复打开的数据库,并且数据库最初是打开的
- oracle数据库完全恢复和不完全恢复以及执行用户管理辈分恢复
- ARCHIVELOG模式下用户管理的不完全恢复—基于取消的不完全恢复
- ARCHIVELOG模式下用户管理的不完全恢复—基于备份控制文件的不完全恢复
- 【ORACLE备份与恢复】用户管理的:基于scn的数据库不完全恢复
- ARCHIVELOG模式下用户管理的不完全恢复(1)——基于时间点的不完全恢复!
- oracle用户管理的完全恢复2:在NOARCHIVELOG 模式下执行恢复(无联机日志的备份)
- ARCHIVELOG模式下用户管理的不完全恢复(3)——基于取消的不完全恢复!
- ARCHIVELOG模式下用户管理的完全恢复(5)——总结!
- ARCHIVELOG模式下用户管理的不完全恢复(2)——基于SCN的不完全恢复!
- ARCHIVELOG模式下用户管理的不完全恢复(4)——基于备份控制文件的不完全恢复!
- 【ORACLE备份与恢复】用户管理的:基于取消的数据库不完全恢复
- oracle用户管理的完全恢复1:在NOARCHIVELOG 模式下执行恢复
- 【ORACLE备份与恢复】用户管理的:基于时间的数据库不完全恢复