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

ORACLE数据库一次意外宕机的分析处理实记(ora-1578)

一个安静的下午,测试环境中一台装有ORACLE数据库的AIX小机因意外断电而导致其上的oracle数据库宕机了。由于是测试环境,安排了一个工程师过去解决了,具体是这

一个安静的下午,测试环境中一台装有ORACLE数据库的AIX小机因意外断电而导致其上的oracle数据库宕机了。由于是测试环境,安排了一个工程师过去解决了,具体是这

一个安静的下午,测试环境中一台装有ORACLE数据库的AIX小机因意外断电而导致其上的oracle数据库宕机了。由于是测试环境,安排了一个工程师过去解决了,具体是这样解决的:首先重启了小机服务器,启动完后,发现oracle所在的/app目录没有mount上。然后通过smitty fs修复了一下,mount上了app,再接着启动oracle就起来了。

事后搜集了system.txt 系统日志(通过errpt -a获得)和alert_soa.log以及oracle的跟踪日志trc,分析trc日志看到如下:

/app/oracle/product/10.2.0/admin/soa/bdump/soa_mmon_307366.trc

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORACLE_HOME = /app/oracle/product/10.2.0

System name:AIX

Node name:data2

Release:3

Version:5

Machine:00CE993C4C00

Instance name: soa

Redo thread mounted by this instance: 1

Oracle process number: 11

Unix process pid: 307366, image: oracle@data2 (MMON)

*** 2013-03-01 14:06:10.308

*** SERVICE NAME:(SYS$BACKGROUND) 2013-03-01 14:06:10.212

*** SESSION ID:(161.1) 2013-03-01 14:06:10.212

Hex dump of (file 3, block 49259)

Dump of memory from 0x07000000C5934000 to 0x07000000C5936000

7000000C5934000 06A20000 00C0C06B 0178F614 00000104 [.......k.x......]

7000000C5934010 45A30000 010A0025 0000224D 0178F614 [E......%.."M.x..]

7000000C5934020 00000000 1F023200 00C0C069 00010003 [......2....i....]

又观察另两个文件,发现有较多ORA-1578报错和DISK OPERATION ERROR。

分析:一般在进行CLUSTER双机切换、意外断电或其它情况下,有时会发生某个共享盘MOUNT不上的情况,需要使用FSCK对共享盘进行修复,然后再MOUNT.当修复完成后,顺利的话数据库可以直接起来,否则在数据库启动过程中就会报出"数据块损坏,无法启动数据库"的现象。此时,我们可以根据不同的数据块损坏类型,检测并修复错误并确定解决问题的方案。

一、数据块损坏产生原因:

1. 硬件问题(磁盘控制器问题或磁盘本身故障问题)

2. 物理级的数据块损坏(通常由前一原因造成)

3、逻辑的数据块损坏

二、坏块的原理分析:

Oracle的数据块有固定的格式和结构,分三层: Cache layer、Transaction layer和Data layer.

对数据块进行读写操作时,做一致性检查:

–Block type

–DBA

–Scn

–Header and tail

发现不一致,标记为坏块。坏块有两种: 物理坏块和逻辑坏块。坏块产生的影响:数据字典表、回滚段表、临时段和用户数据表和索引。

三、确定故障原因与对应的解决办法:

1、查看alert.log文件中,还有无其它ORA-的错误,美国空间,如果报错指向不同磁盘的文件,则是磁盘控制器的问题,查看V$DATAFILE,看有哪些文件位于该控制器下,需要查找磁盘控制器(一般控制器有两个A控和B控)是否正常。

2、 如果报错指向相同磁盘的不同文件,则是磁盘的问题,需要查看磁盘有无报警,LVM有无报错等。

3、 如果指向相同磁盘的同一个文件,则可以执行以下语句查找文件名:

SELECT SEGMENT_NAME,SEGMENT_TYPE FROM DBA_EXTENTS WHERE FILE_ID=<文件号> AND <块号> BETWEEN BLOCK_ID AND BLOCK_ID+BLOCKS-1;

其中,文件号与块号在报错日志中可以查到,如果该查询持续指向某表或索引,则重建它们即可。

4、如果文件是SYSTEM表空间,或处于NOARCHIVELOG模式,在数据库还在运行状态时,EXP导出全部数据,重建库,再IMP灌入新库即可。

5、如果数据库处于ARCHIVELOG模式,可以使用DBV校验坏块,然后通过RMAN来修复坏块,成功后启动数据库。

或者另一种方案

关闭数据库,如果不能关闭数据库,则将相应的数据文件脱机:

ALTER DATABASE DATAFILE '文件名' OFFLINE;

试着将数据文件拷贝到别的磁盘。如果拷贝失败,香港服务器租用,则文件将丢失。

然后STARTUP MOUNT;

将数据文件重命名为成功拷贝到别的磁盘的文件名

ALTER DATABASE RENAME FILE '老路径文件名' TO '新路径文件名';

ALTER DATABASE OPEN;

RECOVER DATAFILE 文件名;

ALTER DATABASE DATAFILE '文件名' ONLINE;

四、本例的解决办法

由于本案例中,数据库有备份和归档且备份可用,所以使用rman命令修复坏块

先DBV校验坏块

$show parameter db_block_size
$select BYTES/2048 from v$datafile where FILE#=3;
$dbv file=/app/oracle/product/10.2.0/oradata/soa/user01.dbf blocksize=8192

$rman target /

恢复管理器: Release 10.2.0.1.0 - Production on 星期五 3月 1 15:07:14 2013

Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到目标数据库: soa (DBID=1281151392)

RMAN> blockrecover datafile 3 block 49259;

启动 blockrecover

使用目标数据库控制文件替代恢复目录

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=187 devtype=DISK

通道 ORA_DISK_1: 正在恢复块

通道 ORA_DISK_1: 正在指定要从备份集恢复的块

正在恢复数据文件 049259 的块

通道 ORA_DISK_1: 正在读取备份段ORACLE\FLASH_RECOVERY_AREA\DB01\BACKUPSET

\2013_02_28\O1_MF_NNNDF_TAG201302287_3\YCS579G_.BKP

通道 ORA_DISK_1: 已从备份段 1 恢复块

通道 ORA_DISK_1: 块恢复完成, 用时: 00:00:02

正在开始介质的恢复

介质恢复完成, 用时: 00:00:05

完成 blockrecover 于 1-3-13

RMAN> exit

恢复管理器完成。

SQL> select count(*) from buffer.t;

COUNT(*)

----------

3298

坏块修复后,并不会更新v$database_block_corruption,需要下次备份的时候更新

SQL> select * from v$database_block_corruption;

FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO

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

3 49259 1 0 CHECKSUM

$rman target /

恢复管理器: Release 10.2.0.1.0 - Production on 星期日 3月 1 16:09:43 2013

Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到目标数据库: soa (DBID=1281151392)

RMAN> backup validate datafile 3;

启动 backup

使用目标数据库控制文件替代恢复目录

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: sid=132 devtype=DISK

通道 ORA_DISK_1: 启动全部数据文件备份集

通道 ORA_DISK_1: 正在指定备份集中的数据文件

通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03

完成 backup 于 1-3-13

RMAN> exit

恢复管理器完成。

SQL> select * from v$database_block_corruption;

未选定行

注:如果数据库没有备份的话,可以考虑使用dbms_repair包来补救,但是会丢数据库。

至此数据库恢复完成,再次重启已正常。

本文出自 “滴水穿石” 博客,谢绝转载!

,香港虚拟主机
推荐阅读
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本文探讨了适用于Spring Boot应用程序的Web版SQL管理工具,这些工具不仅支持H2数据库,还能够处理MySQL和Oracle等主流数据库的表结构修改。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
author-avatar
mobiledu2502870557
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有