频道栏目
首页 > 数据库 > Oracle > 正文
oracle 11g dataguard undo恢复
2012-10-16 09:31:13           
收藏   我要投稿


oracle 11g dataguard undo恢复

 

环境:

os:centos5.5

db:oracle11g datauard

version:11.2.0.2.0

 

在primary收缩数据文件大小

ALTER DATABASE 

  DATAFILE '/oracle/oradata/skatedb/undotbs03.dbf'

 RESIZE 1024M;  www.2cto.com  

稍后就收到报警短信,登录standby库,发现在alert.logl里有如下错误

......

Media Recovery Waiting for thread 1 sequence 17248 (in transit)

Recovery of Online Redo Log: Thread 1 Group 8 Seq 17248 Reading mem 0

  Mem# 0: /oracle/oradata/skatedb/sdbyredo08.log

Thu Oct 11 13:59:06 2012

Archived Log entry 10938 added for thread 1 sequence 17247 ID 0xa47b04d0 dest 1:

Thu Oct 11 14:06:26 2012

Errors in file /oracle/app/diag/rdbms/skate04/skatedb/trace/skatedb_pr0d_25721.trc  (incident=40497):

ora-00600: internal error code, arguments: [3020], [3], [160], [12583072], [], [], [], [], [], [], [], []

ora-10567: Redo is inconsistent with data block (file# 3, block# 160, file offset is 1310720 bytes)

ora-10564: tablespace UNDOTBS1

ora-01110: data file 3: '/oracle/oradata/skatedb/undotbs01.dbf'

ora-10560: block type 'KTU SMU HEADER BLOCK'

Incident details in: /oracle/app/diag/rdbms/skate04/skatedb/incident/incdir_40497/skatedb_pr0d_25721_i40497.trc

Thu Oct 11 14:06:52 2012

......

  www.2cto.com  

standby库无法apply

重启standby,数据库可以

alter database mount standby database;

但是open read only的时候,总报如上的错误

 

在standby上,执行如下也不可以

sql> recover standby database;

 

为了解决这个问题,我们决定不恢复了undotbs01.dbf , 直接从primary把这个文件复制过来(主库的比较新),

然后在恢复standby库,

  www.2cto.com  

操作如下:

为了数据文件的一致性,冻结表空间undo

1.primary:

sql> ALTER TABLESPACE UNDOTBS1 BEGIN BACKUP;

2.standby:

shutdown immediate
 

3.primary:

把primary上的undotbs01.dbf文件copy到standby上,待copy完之后,一定要解冻(如不解冻,在standby库apply时会hang住)

sql> ALTER TABLESPACE UNDOTBS1 END BACKUP;

4.standby:

sql> startup nomount;

sql> alter database mount standby database;

sql> alter database open read only;

sql> alter database recover managed standby database disconnect using current logfile;

注意,在操作dataguard环境里,在操作undo表空间和数据时, 要特别注意,这里就是一个例子。

   www.2cto.com  

还有一个例子,为了节省空间,决定收缩undo的大小,步骤如下:

1.在primary上新建undotbs2表空间,查看并验证了在primary和standby上都有的表空间和相应的数据文件

2.在primary上更换在线undo表空间,如下命令

SQL>  alter system set undo_tablespace = undotbs2 scope=both; 

System altered

SQL> 

在primary上查看

SQL> show parameter undo

 NAME                                 TYPE        VALUE

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

undo_management                      string      AUTO

undo_retention                       integer     900

undo_tablespace                      string      UNDOTBS2

 

但在standby上查看

SQL> show parameter undo

NAME                                 TYPE        VALUE

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

undo_management                      string      AUTO

undo_retention                       integer     900

undo_tablespace                      string      UNDOTBS1

   www.2cto.com  

发现没有变化undo_tablespace,于是想通过更改到spfile文件里,然后重启库,结果错误出现(用如山方法恢复),理论不应该报错的。以后找环境继续测试的。

点击复制链接 与好友分享!回本站首页
相关TAG标签
上一篇:Oracle RAC连接到指定实例
下一篇:一次监控系统进程影响的业务响应的问题及解决
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站