oracle热备切换问题,oracle模拟故障-02 热备及恢复

v$recovery_log:在恢复时需要使用的归档日志信息,当一个数据文件需要恢复的时候,这里面才会有信息。

v$archived_log:包括所有的归档日志组信息。

v$recover_file:记录这所有需要被恢复的文件,是从控制文件得来的。要保证控制文件是最新的。

恢复命令:

在mount状态下,可以使用recover database或者recover datafile ‘/u01/oracle/guo/users01.dbf’;

在open状态下,可以使用recover tablespace users或者 recover datafile ‘/u01/oracle/guo/users01.dbf’;

建立测试环境:

创建一个表空间,增加一个用户;

建立一个表,插入一条数据,做次冷备份;

再插入一条记录,做次热备份;

再插入一条记录,手工切换联机重做日志文件;

1、创建一个表空间hckj(hckj01.dbf),创建一个用户usr1/usr1,建立一个表t,插入一条记录。

create tablespace hckj datafile '/u01/app/oracle/oradata/mdguo/hckj01.dbf’ size 10M extent management local uniform segment space management auto;

create user usr1 identified by usr1 default tablespace hckj;

grant connect,resource to usr1;

用usr1登录

create table t (id int,name varchar2(10));

insert into t values(0,’xue’);

commit;

2、做一次冷备

shutdown immediate

cp

3、用usr1登录,再增加一条记录:

insert into t values(1,’xue’);

commit;

4、做次热备

alter tablespace hckj begin backup;

把hckj01.dbf备份一份。cp到一个位置。

alter tablespace hckj end backup;

5、用usr1登录,再增加一条记录:

insert into t values(2,’yao’);

commit;

6、手工切换日志

alter system switch logfile;

环境搭建结束。

测试一、删除所有的数据文件,在数据库关闭的情况下完全恢复。

rm *。dbf

只有系统表空间或undo表空间发生故障,才需要在数据库关闭的情况下进行恢复。

步骤:

1、把冷备的文件cp回原位置,用冷备的文件加上archive文件就是删除前的文件。

步骤如下:

cp /u01/cold/*.dbf . #拷贝所有的dbf文件,到原位置。

2、登录数据库

sqlplus /nolog

conn /as sysdba

startup

3、查询哪些是需要恢复的文件

col error format a18

select * from v$recover_file;  #这里面显示的都是需要恢复的。

FILE# ONLINE  ONLINE_ ERROR                 CHANGE# TIME

---------- ------- ------- ------------------ ---------- ---------

1 ONLINE  ONLINE                         883189 24-NOV-11

2 ONLINE  ONLINE                         883189 24-NOV-11

3 ONLINE  ONLINE                         883189 24-NOV-11

4 ONLINE  ONLINE                         883189 24-NOV-11

5 ONLINE  ONLINE                         883189 24-NOV-11

6 ONLINE  ONLINE                         883189 24-NOV-11

7 ONLINE  ONLINE                         883189 24-NOV-11

4、进行恢复:

recover database;

SQL> recover database;  #一次性恢复所有。也可以使用recover datafile n;例如recover datafile 7;

ORA-00279: change 883189 generated at 11/24/2011 23:50:13 needed for thread 1

ORA-00289: suggestion : /u01/arcbackup/1_3_768088723.dbf

ORA-00280: change 883189 for thread 1 is in sequence #3

Specify log: {=suggested | filename | AUTO | CANCEL}

ORA-00279: change 883933 generated at 11/25/2011 00:46:29 needed for thread 1

ORA-00289: suggestion : /u01/arcbackup/1_4_768088723.dbf

ORA-00280: change 883933 for thread 1 is in sequence #4

ORA-00278: log file '/u01/arcbackup/1_3_768088723.dbf' no longer needed for

this recovery

Specify log: {=suggested | filename | AUTO | CANCEL}

auto

ORA-00279: change 883935 generated at 11/25/2011 00:46:31 needed for thread 1

ORA-00289: suggestion : /u01/arcbackup/1_5_768088723.dbf

ORA-00280: change 883935 for thread 1 is in sequence #5

ORA-00278: log file '/u01/arcbackup/1_4_768088723.dbf' no longer needed for

this recovery

Log applied.

Media recovery complete.

4、恢复结束,查询结果,全部数据已正常恢复。

SQL> select * from usr1.t;

ID NAME

---------- ----------

1 wang

0 xue

2 yao

测试二、删除一个用户数据,在数据库打开的情况下恢复。

场景说明:数据库中,一个文件损坏,但其他还需正常工作,只能在数据库运行中进行恢复。

为了测试,我们在usr1中增加一条新纪录。

insert into t values(3,’zhang’);

commit;

alter system checkpoint;

步骤:

1、挂载数据库

正常情况下,文件损坏,自己是不知道的,我们直接startup

SQL> startup

ORACLE instance started.

Total System Global Area  285212672 bytes

Fixed Size                  1218992 bytes

Variable Size              71304784 bytes

Database Buffers          209715200 bytes

Redo Buffers                2973696 bytes

Database mounted.

ORA-01157: cannot identify/lock data file 7 - see DBWR trace file

ORA-01110: data file 7: '/u01/app/oracle/oradata/mdguo/hckj01.dbf'

2、把损坏的数据离线,并打开数据库,是其他数据库正常工作。

SQL> alter database datafile 7 offline;

SQL> alter database open;

Database altered.

3、cp备份

[oracle@oral mdguo]$ cp /u01/cold/hckj01.dbf .

4、restore !

SQL> recover datafile 7;

5、把新恢复的数据设为在线:

SQL> alter database datafile 7 online;

Database altered.

6、测试 查询:

SQL> select * from usr1.t order by 1;

ID NAME

---------- ----------

0 xue

1 wang

2 yao

3 zhang

OK 恢复成功!!

测试三、数据文件损坏,但是没有备份。

前提:

1、不能是系统表空间,不能是老的控制文件。

2、数据库创建之后的所有的归档日志文件都在。

3、者控制文件里包含被损坏的文件的文件名(控制文件是当前的,或在损坏文件创建之后做的备份)。

环境搭建:

在创建一个新的表空间,在其上建立一个表,写入条记录。步骤同上,这里省略。

步骤:

1、把损坏的文件offline,

SQL> col name format a56;

SQL> select TS#,name from v$datafile;

TS# NAME

---------- --------------------------------------------------------

0 /u01/app/oracle/oradata/mdguo/system01.dbf

1 /u01/app/oracle/oradata/mdguo/undotbs01.dbf

2 /u01/app/oracle/oradata/mdguo/sysaux01.dbf

4 /u01/app/oracle/oradata/mdguo/users01.dbf

6 /u01/app/oracle/oradata/mdguo/example01.dbf

7 /u01/app/oracle/oradata/mdguo/guo.dbf

10 /u01/app/oracle/oradata/mdguo/hckj01.dbf

11 /u01/app/oracle/oradata/mdguo/hckj02.dbf

8 rows selected.

关闭数据库,在打开,发现datafile文件号和上述查出来的不一样。

SQL> startup

ORACLE instance started.

Total System Global Area  285212672 bytes

Fixed Size                  1218992 bytes

Variable Size              71304784 bytes

Database Buffers          209715200 bytes

Redo Buffers                2973696 bytes

Database mounted.

ORA-01157: cannot identify/lock data file 8 - see DBWR trace file

ORA-01110: data file 8: '/u01/app/oracle/oradata/mdguo/hckj02.dbf'

或者 按照上例子中方法,关闭数据库,再挂载让oracle自动发现,然后在离线,但是这两种方法的datafile文件号不一样的。

SQL> alter database datafile 8 offline;

Database altered.

SQL> alter database open;

Database altered.

2、重新创建一个空白的文件,名字和之前的一样

SQL> alter database create datafile '/u01/app/oracle/oradata/mdguo/hckj02.dbf';

Database altered.

3、恢复

SQL> recover datafile 8;

Media recovery complete.

4、使恢复的文件online。

SQL> alter database datafile 8 online;

Database altered.

5、查询一下:

SQL> select * from usr1.t2;

ID NAME

---------- ----------

1 yang

OK,恢复正常!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值