热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

undo损坏案列

公司一台测试环境的基于linux平台下oracle11.2.0.3的数据库,为开归档,未备份。21号晚上,因目录下空间使用%100,oracleHOME目录在系统目录下:因硬盘资源占尽,不能连接操作,oracle数据库挂起。某人的操作,查看undotbs1占用最大,通过mv移

公司一台测试环境的基于linux 平台下 oracle 11.2.0.3 的数据库,为开归档,未备份。 21号晚上,因/目录下 空间使用%100,oracle HOME目录在系统 / 目录下: 因硬盘资源占尽,不能连接操作,oracle 数据库挂起。 某人的操作,查看undotbs1 占用最大,通过mv 移

公司一台测试环境的基于linux 平台下 oracle 11.2.0.3 的数据库,为开归档,未备份。 21号晚上,因/目录下 空间使用%100,oracle HOME目录在系统 / 目录下:
因硬盘资源占尽,不能连接操作,oracle 数据库挂起。
某人的操作,查看undotbs1 占用最大,通过mv 移动到 另一目录,同时系统被重启,使得undotbs1 数据文件损坏,不能使用,最后又做了一个rm 操作, 重启库,导致故障出现!
报错一:
Wed Jan 22 09:42:50 2014 ALTER DATABASE OPEN Errors in file /u01/app/oracle/diag/rdbms/gtadata13/gtadata13/trace/gtadata13_dbw0_4245.trc: ORA-01157: cannot identify/lock data file 3 - see DBWR trace file ORA-01110: data file 3: '/u01/app/oracle/oradata/gtadata13/undotbs01.dbf' ORA-27047: unable to read the header block of file Linux-x86_64 Error: 25: Inappropriate ioctl for device Additional information: 1 Wed Jan 22 09:42:52 2014 Checker run found 1 new persistent data failures Errors in file /u01/app/oracle/diag/rdbms/gtadata13/gtadata13/trace/gtadata13_ora_4361.trc: ORA-01157: cannot identify/lock data file 3 - see DBWR trace file ORA-01110: data file 3: '/u01/app/oracle/oradata/gtadata13/undotbs01.dbf' ORA-1157 signalled during: ALTER DATABASE OPEN...
--- 就是oracle 在mount后,不能加载到open 状态。

2 接下来操作: 因为undo tablespace 数据文件undotbs1 没有了,想通过重建一个undo 表空间 undotbs2 把数据库启动到open 状态
操作:
SQL> show parameter undo NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_management string AUTO undo_retention integer 900 undo_tablespace string UNDOTBS1
SQL > CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE '/XXXX.DBF' SIZE 32M AUTOEXTEND ON NEXT 32M MAXSIZE 10G; --重创建表空间 SQL > SELECT * FROM V$TABLESAPCE SELECT NAME,STATUS FROM V$DATAFILE -- 查询其状态值 SQL > ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2 SCOPE=BOTH -- 通过show parameter undo 查看是否使用。
3 此时,数据库可以open起来, 但是通过client ,或者其他用户连接时,报错:
报错二 SQL> conn input/INPUT ERROR: ORA-00604: error occurred at recursive SQL level 1 ORA-00376: file 3 cannot be read at this time ORA-01110: data file 3: '/u01/app/oracle/oradata/gtadata13/undotbs01.dbf' ORA-02002: error while writing to audit trail ORA-00604: error occurred at recursive SQL level 1 ORA-00376: file 3 cannot be read at this time ORA-01110: data file 3: '/u01/app/oracle/oradata/gtadata13/undotbs01.dbf'
4 根据报错,发现不仅仅是 undotbs1数据文件有问题,还有开启了审计 audit: 如是
先关闭审计 SQL > SHOW PARAMETER AUDIT NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ audit_file_dest string /u01/app/oracle/admin/gtadata1 3/adump audit_sys_operations boolean FALSE audit_syslog_level string audit_trail string DB
SQL > alter system set audit_trail=none scope=spfile -- 设置后需要重启库。 --具体见审计
5 再通过对undotbs1数据文件操作,使其offline 处理(看行否)
SQL > alter database datafile 3 offline drop ;
6 通过 v$logfile,dba_tablespaces, dba_data_files 查看数据表空间,数据文件的状态:
SQL> select tablespace_name,file_id,file_name from dba_data_files; TABLESPACE_NAME FILE_ID FILE_NAME ------- ---------- ------------------------------------------------------------- USERS 4 /u01/app/oracle/oradata/gtadata13/users01.dbf UNDOTBS1 3 /u01/app/oracle/oradata/gtadata13/undotbs01.dbf SQL> select status,tablespace_name from dba_tablespaces; STATUS TABLESPACE_NAME --------- ------------------------------ ONLINE SYSTEM ONLINE SYSAUX ONLINE UNDOTBS1

7 此时发现undotbs1 数据文件还在,同时undotbs1 表空online
如是操作:
报错三 SQL> alter tablespace UNDOTBS1 offline; alter tablespace UNDOTBS1 offline * ERROR at line 1: ORA-01191: file 3 is already offline - cannot do a normal offline ORA-01110: data file 3: '/u01/app/oracle/oradata/gtadata13/undotbs01.dbf' --- 此时心想,怎么不能offline了,看能否风能 temporary offline 查询数据文件头,select FILE#,checkpoint_change#,recover, fuzzy from v$datafile_header;
最后通过 SQL> alter system checkpoint; --做一个检查点,再试试: System altered. SQL> alter tablespace undotbs1 offline temporary; Tablespace altered.
再次通过 dba_tablespaces 查看 undotbs1 的状态,发现 是否offline。 offline 状态。
8 测试再看看能否通过其他用户连接或client 连接: -- 发现ok,可以通过其他用户连接了,但是一些程序 涉及到报错:
报错四:

\

执行存储过程失败 ORA-00376: 此时无法读取文件 3 ORA-01110: 数据文件 3: "/u01/app/oracle/oradata/gtadata13/undotbs01.dbf' ORA-06512: 在 "GTA_DATA.SP_QA_TIMELINESS", line 54 ORA-06512: 在 line 1
如是想了想 ,确实,因为undotbs1 是通过物理删除的,那么oracle 一致性 会是这些需要recovery恢复:

9 既然offline,可否删除掉,(估计比较麻烦,这回退给干掉了,怎么回退了?)
通过dba_rollback_segs 发现 还有很多 recovery 的undotbs1 段需要回滚恢复,是数据一致性。
SQL> select segment_name,tablespace_name,status from dba_rollback_segs; SEGMENT_NAME TABLESPACE_NAME STATUS ------------------------------ ------------------------------ ---------------- SYSTEM SYSTEM ONLINE _SYSSMU122_928896348$ UNDOTBS1 OFFLINE _SYSSMU121_4101333926$ UNDOTBS1 OFFLINE _SYSSMU120_471964226$ UNDOTBS1 OFFLINE _SYSSMU119_3645569891$ UNDOTBS1 OFFLINE _SYSSMU118_1816999230$ UNDOTBS1 OFFLINE _SYSSMU117_3513527861$ UNDOTBS1 OFFLINE _SYSSMU116_2167311593$ UNDOTBS1 OFFLINE _SYSSMU90_1969094056$ UNDOTBS1 NEEDS RECOVERY _SYSSMU89_2804401042$ UNDOTBS1 NEEDS RECOVERY _SYSSMU88_3446396459$ UNDOTBS1 NEEDS RECOVERY _SYSSMU87_268667266$ UNDOTBS1 NEEDS RECOVERY _SYSSMU86_1912503840$ UNDOTBS1 NEEDS RECOVERY _SYSSMU85_2732352333$ UNDOTBS1 NEEDS RECOVERY _SYSSMU84_1805825668$ UNDOTBS1 NEEDS RECOVERY _SYSSMU83_1984855352$ UNDOTBS1 NEEDS RECOVERY _SYSSMU212_1777710046$ UNDOTBS2 ONLINE _SYSSMU211_3260590093$ UNDOTBS2 ONLINE _SYSSMU210_1915944113$ UNDOTBS2 ONLINE _SYSSMU209_2868303011$ UNDOTBS2 ONLINE _SYSSMU208_3687438092$ UNDOTBS2 ONLINE _SYSSMU207_752508113$ UNDOTBS2 ONLINE
此时,百度,及询问了一些高手,说最好做个备份: 如是想通过expdp 导入导出:
报错五:
[oracle@gtadata13 dump_dir]$ impdp dcsys/DCSYS directory=dump_dir dumpfile=TBL_CHN_FN_ForecFin.dmp Import: Release 11.2.0.3.0 - Production on Wed Jan 22 14:40:30 2014 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options ORA-31626: job does not exist ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79 ORA-06512: at "SYS.KUPV$FT", line 1042 ORA-31637: cannot create job SYS_IMPORT_FULL_01 for user DCSYS ORA-31632: master table "DCSYS.SYS_IMPORT_FULL_01" not found, invalid, or inaccessible ORA-31635: unable to establish job resource synchronization ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79 ORA-06512: at "SYS.KUPV$FT_INT", line 2401 ORA-00376: file 3 cannot be read at this time ORA-01110: data file 3: '/u01/app/oracle/oradata/gtadata13/undotbs01.dbf' -- 这也不行,看来,只能老实的弄了
10 ,打算删除 这offline undotbs1表空间,看是否跳过:
报错六:
SQL> drop tablespace undotbs1; drop tablespace undotbs1 * ERROR at line 1: ORA-01548: active rollback segment '_SYSSMU1_1240252155$' found, terminate dropping tablespace SQL> DROP ROLLBACK SEGMENT "_SYSSMU1_1240252155$"; DROP ROLLBACK SEGMENT "_SYSSMU1_1240252155$" * ERROR at line 1: ORA-30025: DROP segment '_SYSSMU1_1240252155$' (in undo tablespace) not allowed
再次通过百度,高手请教: 发现需要在pfile 上 添加隐藏参数文件_offline_rollback_segments (‘xx’)和 _corrupted_rollback_segments ('xx') 后再删除,看否跳过
在pfile中加入参数 _offline_rollback_segments=(‘’) _corrupted_rollback_segments=(‘’) ---括号参数为dba_rollback_segs中 undotbs1 status 为need recovery 状态的这种值“_SYSSMU122_928896348$”
10 : 于是通过 pfile添加影藏参数 或者 alter system set _offline_rollback_segments = " 值 " socpe=spfile
alter system set _corrupted_rollback_segments = " 值 " socpe=spfile 进行操作。
当时我通过重建pfile参数文件 *._offline_rollback_segments=('_SYSSMU90_1969094056$',。。。。) *._corrupted_rollback_segments=('_SYSSMU90_1969094056$', 来操作
然后 通过删除所有 dba_rollback_segs 下的所有值后,在drop undotbs1 表空间:
SQL> drop rollback segment "_SYSSMU1_1240252155$"; ---注意双引号不能有空格 Rollback segment dropped. ---对应的值,一个一个删除。

11 : 最后删除 undotbs1 表空间 ---ok,可以删除了,再通过dba_rollback_segs发现,没有了undtotbs1 的表空间了。
SQL> select segment_name,tablespace_name,status from dba_rollback_segs; SEGMENT_NAME TABLESPACE_NAME STATUS ------------------------------ ------------------------------ ---------------- SYSTEM SYSTEM ONLINE _SYSSMU212_1777710046$ UNDOTBS2 ONLINE _SYSSMU211_3260590093$ UNDOTBS2 ONLINE _SYSSMU210_1915944113$ UNDOTBS2 ONLINE _SYSSMU209_2868303011$ UNDOTBS2 ONLINE _SYSSMU208_3687438092$ UNDOTBS2 ONLINE _SYSSMU207_752508113$ UNDOTBS2 ONLINE _SYSSMU206_883733676$ UNDOTBS2 ONLINE _SYSSMU205_725465268$ UNDOTBS2 ONLINE _SYSSMU204_1401227473$ UNDOTBS2 ONLINE _SYSSMU203_3100642042$ UNDOTBS2 ONLINE


12 : 扫尾: a: 恢复原来好审计功能设置, b: 多切换几次,查看业务数据 c: 这样操作,虽然 可以了,但是有部分业务数据丢失 d: 做好备份 e: 就像大师说的,遇事,莫急躁
推荐阅读
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
author-avatar
新起点新娘妆
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有