企业空间 采购商城 存储论坛
首页 > 数据库 > Oracle > 安装配置 > 正文

[Oracle] 解析在没有备份的情况下undo损坏怎么办

2014-11-24 01:08:02来源:中存储网
导读: Oracle备份恢复之Oracle在运行中很不幸遇到undo损坏,当然最好的方法是完全恢复,但如果是在没有备份的情况下undo损坏怎么办?以下就为各位网友介绍出现这种情况的解决办法,需要的兄弟姐妹参考下

如果Oracle在运行中很不幸遇到undo损坏,当然最好的方法是完全恢复,不过如果没有备份,可以采用一种非常规的手段(利用Oracle的隐藏参数),如果此时undo包含未提交的事务,会造成一点点的数据丢失(一般都是可忍受的),如果没有未提交的事务,则不会有数据丢失。其主要步骤有:

1. 修改undo表空间管理为手动;
2. 设置隐藏参数(_offline_rollback_segments或_corrupted_rollback_segments)标识受影响的回滚段,使Oracle忽略其上的未提交事务;
3. 手动删除受影响的回滚段和undo表空间,然后重建新的undo表空间;
4. 还原undo表空间管理为自动。

实验如下:
Step 1.
如果undo数据文件损坏,数据库只能到mount状态,open时会出现以下错误:
ORA-01157: cannot identify/lock data file 14 - see DBWR trace file
ORA-01110: data file 14: 'I:INTEL_DATAO06DMS0UNDO1.O06DMS0'
说明该undo文件已经损坏或丢失,把该文件offline之后就可以打开数据库了:
SQL> alter database datafile 'I:INTEL_DATAO06DMS0UNDO1.O06DMS0' offline drop;
SQL> alter database open;
打开数据库的目的是为了找出受影响的回滚段:
SQL> select segment_name,status from dba_rollback_segs;

SEGMENT_NAME                   STATUS
------------------------------ ----------------
SYSTEM                         ONLINE
_SYSSMU10_1201331463$          OFFLINE
_SYSSMU9_2926456744$           OFFLINE
_SYSSMU8_640224757$            OFFLINE
_SYSSMU7_3984293596$           OFFLINE
_SYSSMU6_3694658906$           OFFLINE
_SYSSMU5_3475919656$           OFFLINE
_SYSSMU4_168502732$            OFFLINE
_SYSSMU3_1987193959$           OFFLINE
_SYSSMU2_3908286755$           OFFLINE
_SYSSMU1_3281912951$           OFFLINE

SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      undo1
关闭数据库:
SQL> shutdown immediate;

Step 2.
创建一个临时的pfile:
SQL> create pfile='H:initO06DMS0.ora' from spfile;
修改pfile如下:
*.undo_management='manual'   -- undo表空间管理方式修改为手动
*.undo_tablespace='undo2'     --指定一个新的undo表空间
*._offline_rollback_segments=('_SYSSMU10_1201331463$','_SYSSMU9_2926456744$','_SYSSMU8_640224757$','_SYSSMU7_3984293596$','_SYSSMU6_3694658906$','_SYSSMU5_3475919656$','_SYSSMU4_168502732$','_SYSSMU3_1987193959$','_SYSSMU2_3908286755$','_SYSSMU1_3281912951$')  --把所有受影响的回滚段都列在这里
并以改pfile重新启动数据库:
SQL> startup pfile='H:initO06DMS0.ora'

Step 3.
手动删除受影响的回滚段:
SQL>drop rollback segment "_SYSSMU10_1201331463$";
SQL>drop rollback segment "_SYSSMU9_2926456744$";
SQL>drop rollback segment "_SYSSMU8_640224757$";
SQL>drop rollback segment "_SYSSMU7_3984293596$";
SQL>drop rollback segment "_SYSSMU6_3694658906$";
SQL>drop rollback segment "_SYSSMU5_3475919656$";
SQL>drop rollback segment "_SYSSMU4_168502732$";
SQL>drop rollback segment "_SYSSMU3_1987193959$";
SQL>drop rollback segment "_SYSSMU2_3908286755$";
SQL>drop rollback segment "_SYSSMU1_3281912951$";
手动删除旧的undo表空间:
SQL> drop tablespace undo1 including contents;
重建新的undo表空间:
SQL> create undo tablespace undo2 datafile 'I:INTEL_DATAO06DMS0UNDO2.O06DMS0' size 100m;
创建新的spfile,覆盖旧的spfile:
SQL> create spfile from pfile='H:initO06DMS0.ora';
关闭数据库:
SQL> shutdown immediate;

Step 4.
以原来的spfile启动数据库:
SQL> startup;
还原undo表空间管理为自动:
SQL> alter system set undo_management='auto' scope=spfile;
取消隐藏参数的设置:
SQL> alter system reset "_offline_rollback_segments" scope=spfile;
重启使其生效:
SQL> shutdown immediate;
SQL> startup
SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      undo2

最终检查一下:
SQL> select segment_name,status from dba_rollback_segs;

SEGMENT_NAME                   STATUS
------------------------------ ----------------
SYSTEM                         ONLINE
_SYSSMU40_1968985325$          ONLINE
_SYSSMU39_4040503138$          ONLINE
_SYSSMU38_4059847715$          ONLINE
_SYSSMU37_2692202156$          ONLINE
_SYSSMU36_2617425201$          ONLINE
_SYSSMU35_1133967719$          ONLINE
_SYSSMU34_1916939664$          ONLINE
_SYSSMU33_99444166$            ONLINE
_SYSSMU32_162619813$           ONLINE
_SYSSMU31_830375278$           ONLINE

继续阅读
中存储网声明:此文观点不代表本站立场,如有版权疑问请联系我们。
相关阅读
  • 东芝停电最新进展:复工时间尚未明朗 西数零售市场或将涨价10-15%

    日本四日市市发生停电事件,尽管断电后13分钟即恢复供电,,自发生停电事件以来,东芝Fab2/3/4三座晶圆厂尚未完全复工,至于复工时间,依然尚未明朗。东芝的合作伙伴西数6月已停止报价,而7月零售市场预计要涨价10-15%。

  • 飞康力推“一次付费”的存储定价模式

    飞康将提供具有单一价格的软件定义存储平台;客户只需要为所有现有和未来产品的使用支付一个许可费用,包括那些需要迁移、需要管理灾难恢复、备份或者分析的数据拷贝。

  • 构建标准体系为智能制造提供有力支撑

    智能制造正成为未来制造业发展的重大趋势和核心内容,是加快发展方式转变,促进工业向中高端迈进、建设制造强国的重要举措,也是新常态下打造新的国际竞争优势的必然选择。工业和信息化部装备工业司司长张相木接受记者专访时强调。  为把智能制造推向深入,

  • 紫光入股台湾公司 台湾媒体称“引虎驱狼”“引清兵入关”

    紫光集团对台湾半导体封测企业再度出手,11日宣布同时入股台湾矽品精密工业股份有限公司(下称“矽品”)、台湾南茂科技股份有限公司(下称“南茂”)。

  • 惠普:云业务已达30亿美元规模 惠普企业增幅20%

    惠普新的财富500强企业公司拥有强大的混合云实力,云业务规模达30亿美元,将在未来今年实现20%的快速增长。

  • 雅虎第二个数据中心叫 计算鸡舍 YCC

    第二个雅虎数据中心在纽约州的洛克波特建设完成。该数据中心采用了独特的设计,最初被称为鸡舍,但随后很快改名为雅虎计算鸡舍,或者为YCC。该设计完全放弃了耗能巨大的机械式冷水机组,几乎完全依靠外部空气进行冷却。

产品推荐
头条阅读
栏目热点

Copyright @ 2006-2021 ChinaStor.COM 版权所有 京ICP备14047533号

中存储网

存储第一站,存储门户,存储在线交流平台