您的位置:首页 > 数据库 > Oracle

oracle用户管理的完全恢复3:在ARCHIVELOG 模式(恢复关闭的数据库)

2013-01-23 11:14 639 查看
场景描述:恢复关闭的数据库

在以下情况中,通常将此恢复方法与RECOVER DATABASE命令或RECOVER DATAFIL命令一起使用:

  a.恢复的文件属于系统表空间或回退段表空间。

  b.需要恢复整个数据库或大部分数据文件。

  c.数据库不是全天候(每周7 天、每天24 小时)运行。

前期场景描述图:表t创建在表空间sun01上,用户为user1。分别在不同的时间点插入3条数据,恢复要求三条数据不缺失。



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]



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

恢复成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐