• 6.oracle的undo出现坏块


       undo 表空间中的undo块记录的是数据修改之前的操作,可以帮助我们随时对数据的修改进行回退,但是当undo出现了坏块怎么办呢?

       坏块?在数据库中有一个数据库一致性的概念,在oracle中数据库一致性包括两个层次:物理一致性和逻辑一致性,如果一个数据块在这两个层次上存在不一致性,那它就是一个坏块,数据后后台就会出现告警ORA-1578或ORA-600这种错误。

      这里就说当undo表空间出现坏块时,该怎样做?

      1.首先我们需要停掉监听,防止还有程序在对数据进行操作

      2.然后建立新的undotbs2表空间代替已经坏掉的undotbs1表空间。但是这里有一个问题是:创建表空间需要数据库在open状态,而当有undo坏块时,数据库是不能启动到open状态的,因为一启动,SMON进程就会强行关闭数据库。

      如果要是出现2这种情况,我们首先需要把数据库启动到mount状态,然后让出现坏块的表空间所对应的文件处于数据文件脱机状态

      startup mount;
      alter database datafile  File_id  offline drop;
      alter database open;

      然后创建新的表空间,并修改undo_tablespace参数 

      create undo tablespace undotbs2 datafile '路径' size 1G autoextend on;
      alter system set undo_tablespace=undotbs2 scope=both;

      3.删除旧的表空间

       新的表空间创建后,删除旧的表空间  

      drop tablespace undotbs1 including  contents and datafiles;

        注意:如果此时删不掉,说明数据库中原undo表空间仍然存在活跃的undo段,所以此时数据库阻止我们的删除

        查询相关视图,获取所有原undo表空间仍然活跃的undo段  

      select status, segment_name from dba_rollback_segs where status not in ('OFFLINE') and  tablespace_name='UNDOTBS1'

        将这些活跃的undo段添加到pfile参数文件中,进行跳过处理。

    *._allow_resetlogs_corruption=true
    
    *._allow_terminal_recovery_corruption=true
    
    *._corrupted_rollback_segments=(_SYSSMU10_1197734989$,xxxx,xxxx)

      最后使用pfile进行启动 

      startup  pfile=/oracle/product/11.2.0/db_1/dbs/initETL.ora;

          当启动完了之后再删除就旧的表空间

    补充几个常用的命令: 

    select * from v$rollname;
    select * from undo$;
    select * from v$tablespace;
    
    ##使数据文件处于在线状态
    alter database datafile  File_id online;

         

      

  • 相关阅读:
    IIS部署Asp.Net Core 项目运行时报错,处理程序“aspNetCore”在其模块列表中有一个错误模块“AspNetCoreModuleV2"
    Linux Mysql5.7.22安装
    Nginx初体验
    asp.net core Csc任务不支持SharedCompilationId参数,请确认改参数存在于此任务中,并且是可设置的公共实例属性
    【Node.js 】Express框架
    【Node.js】 初体验
    Mongodb 配置
    【C#】Windows服务守护并发送邮件通知
    新建【Git】仓库后给使用者授权
    Git提交修改的代码出现提交不上去
  • 原文地址:https://www.cnblogs.com/zmc60/p/16297909.html
Copyright © 2020-2023  润新知