gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章[Oracle] 解析在没有备份的情况下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_DATA\O06DMS0\UNDO1.O06DMS0' 说明该undo文件已经损坏或丢失,把该文件offline之后就可以打开数据库了: SQL> alter database datafile 'I:\INTEL_DATA\O06DMS0\UNDO1.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_DATA\O06DMS0\UNDO2.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 。

最后此篇关于[Oracle] 解析在没有备份的情况下undo损坏怎么办的文章就讲到这里了,如果你想了解更多关于[Oracle] 解析在没有备份的情况下undo损坏怎么办的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com