oracle坏块原因分析与修复方法
Oracle 数据库中的出现坏块问题该如何处理_光环大数据培训
reserved.DBVERIFY - 验证正在开始 : FILE = system01.dbfDBVERIFY - 验证 完成 检查的页总数 :32000 处理的页总数(数据) :13261 失败的
页总数(数据) :0 处理的页总数(索引) :2184 失败的页总数(索引) :0 处理 的页总数(其它) :1369 处理的总页数 (段) 的页总数 数 :0 注:因为 dbv 要求 file 后面跟的必须是一个文件扩展名,所以如果用裸 设备存储的,就必须使用 ln 链接裸设备到一个文件,然后再用 dbv 对这个链 接文件进行检查。 : 0 失败的总页数 (段) : 0空
索引或者分区索引 5 常用的处理方法有: 1 (9i 以上版本可用) 3
通过 ROWID RANGE SCAN 保存数据 4
光环大数据
光环大数据--大数据培训&人工智能培训 用 DBMS_REPAIR5 使用 EVENT
光环大数据--大数据培训&人工智能培训 Oracle 数据库中的出现坏块问题该如何处理_光环大数据培训
光环大数据是国内知名的 IT 培训机构,大数据培训,数据分析培训、人工 智能培训等课程全国领先,帮助学员提升技术水平并保障就业,深受学员喜爱, 获得业界的一致好评。
数据字典中的坏块是不会发现的 2. 如果只是对数据库中比较重要的表进行坏块检查,可以使用 ANALYZE
TABLE tablename VALIDATE STRUCTURE CASCADE 的方法来检测坏块,它执行坏 块的检查,但是不会标记坏块为 corrupt,检测的结果保存在 USER_DUMP_DEST 目录下的用户 trace 文件中。 3. 使用 Oracle 的专门工具 dbv 来检查坏块,具体的语法如下:
ORACLE 数据库故障解决方案
ORACLE 数据库故障解决方案引言概述:ORACLE 数据库是目前企业常用的一种数据库管理系统,但在使用过程中难免会遇到各种故障。
本文将介绍一些常见的 ORACLE 数据库故障,并提供相应的解决方案,帮助读者更好地应对数据库故障。
一、数据库连接问题1.1 连接超时:当数据库连接超时时,可以通过增加连接超时时间的方式解决。
在 ORACLE 数据库中,可以通过修改 sqlnet.ora 文件中的SQLNET.INBOUND_CONNECT_TIMEOUT 参数来设置连接超时时间。
1.2 连接被拒绝:如果数据库连接被拒绝,可能是由于数据库实例未启动、监听器未启动或者网络故障等原因导致。
解决方案包括启动数据库实例、启动监听器以及检查网络连接是否正常。
1.3 连接池问题:当数据库连接池达到最大连接数时,新的连接请求会被拒绝。
解决方案包括增加连接池的最大连接数、释放闲置连接以及优化数据库连接的使用。
二、数据丢失问题2.1 意外删除数据:当数据被意外删除时,可以通过数据库备份和恢复的方式解决。
可以使用RMAN 工具进行数据库备份,并在需要时使用备份进行恢复操作。
2.2 数据库文件损坏:当数据库文件损坏时,可以使用 RMAN 工具进行数据库文件的修复。
RMAN 提供了诊断和修复数据库文件的功能,可以帮助解决数据库文件损坏的问题。
2.3 数据库坏块:当数据库出现坏块时,可以使用 RMAN 工具进行坏块的修复。
RMAN 提供了坏块检测和修复的功能,可以帮助解决数据库坏块问题。
三、性能问题3.1 慢查询:当数据库查询变慢时,可以通过优化查询语句、创建索引、增加硬件资源等方式解决。
可以使用 Explain Plan 工具来分析查询语句的执行计划,找出慢查询的原因,并进行相应的优化。
3.2 死锁:当数据库出现死锁时,可以通过锁等待超时、死锁检测和解锁等方式解决。
可以使用 V$LOCK 和 V$SESSION 视图来查看当前的锁信息,并根据情况进行相应的解锁操作。
ORACLE 数据库故障解决方案
ORACLE 数据库故障解决方案一、背景介绍ORACLE数据库是一种关系型数据库管理系统,广泛应用于企业的数据存储和管理中。
然而,由于各种原因,数据库可能会出现故障,这会对企业的正常运营造成严重影响。
因此,制定一套完善的ORACLE数据库故障解决方案对于保障数据的安全和稳定性至关重要。
二、故障分类1. 数据库无法启动:- 可能原因:数据库实例崩溃、数据库文件损坏等。
- 解决方案:根据错误日志定位问题,修复或恢复数据库文件,重新启动数据库实例。
2. 数据库性能下降:- 可能原因:数据库负载过高、SQL语句优化不当等。
- 解决方案:分析数据库性能监控数据,优化SQL语句,增加硬件资源,调整数据库参数等。
3. 数据库连接问题:- 可能原因:网络故障、数据库监听程序异常等。
- 解决方案:检查网络连接,重启监听程序,配置防火墙规则等。
4. 数据丢失或损坏:- 可能原因:人为操作失误、硬件故障等。
- 解决方案:定期备份数据库,使用闪回技术恢复数据,修复或替换损坏的硬件设备。
5. 数据库安全问题:- 可能原因:未授权访问、漏洞利用等。
- 解决方案:加强数据库安全设置,限制访问权限,及时安装数据库补丁,定期进行安全审计。
三、故障解决步骤1. 收集信息:- 根据用户反馈和日志文件,了解故障现象和发生时间。
- 检查数据库版本、操作系统环境、硬件配置等相关信息。
2. 分析问题:- 根据收集的信息,确定故障类型和可能的原因。
- 使用ORACLE提供的工具和命令,对数据库进行诊断和分析。
3. 制定解决方案:- 根据问题的严重程度和影响范围,制定相应的解决方案。
- 针对不同的故障类型,选择合适的方法和工具进行修复或恢复。
4. 执行解决方案:- 按照制定的解决方案,逐步执行修复或恢复操作。
- 注意备份数据,避免造成进一步的数据丢失或损坏。
5. 验证修复效果:- 检查数据库是否正常启动,功能是否正常运行。
- 对修复后的数据库进行性能测试,确保问题得到解决。
ORACLE 数据库故障解决方案
ORACLE 数据库故障解决方案故障解决方案是指在出现故障时,通过一系列的步骤和方法来解决问题,恢复系统的正常运行。
针对ORACLE数据库故障,下面将提供一种标准的解决方案,希望对您有所帮助。
1. 故障描述:在使用ORACLE数据库时,出现了无法连接数据库的故障,无法进行正常的数据操作和查询。
2. 故障原因分析:(根据实际情况进行分析,以下为示例)可能的原因有:- 数据库服务未启动- 数据库实例崩溃- 数据库表空间不足- 数据库连接配置错误3. 解决方案:以下是一种解决ORACLE数据库故障的标准方案,您可以根据具体情况进行调整和执行。
步骤一:检查数据库服务状态1. 打开命令行窗口,输入命令`lsnrctl status`,查看数据库监听器的状态。
2. 如果监听器状态正常,继续执行下一步;如果监听器未启动,使用命令`lsnrctl start`启动监听器。
步骤二:检查数据库实例状态1. 打开命令行窗口,输入命令`sqlplus / as sysdba`,以管理员身份登录数据库。
2. 输入命令`select status from v$instance;`,查看数据库实例的状态。
3. 如果数据库实例状态正常,继续执行下一步;如果数据库实例未启动,使用命令`startup`启动数据库实例。
步骤三:检查数据库表空间1. 打开命令行窗口,输入命令`sqlplus / as sysdba`,以管理员身份登录数据库。
2. 输入命令`select tablespace_name, sum(bytes)/1024/1024 as total_size,sum(bytes)/1024/1024 - sum(bytes_free)/1024/1024 as used_size from dba_data_files group by tablespace_name;`,查看数据库表空间的使用情况。
3. 如果表空间使用率过高,可以考虑进行表空间的扩容或清理操作。
ORACLE数据库故障解决方案
ORACLE数据库故障解决方案Oracle数据库是当前世界上应用最广泛的关系型数据库之一,但在日常运维中,难免会遇到各种故障,如数据损坏、数据库停机等。
因此,能够迅速、准确地解决数据库故障至关重要。
本文将介绍几种常见的Oracle数据库故障解决方案。
1.数据库无法启动当Oracle数据库无法启动时,往往是由于以下原因导致的:数据库实例未启动、数据库文件损坏或不完整、数据库连接问题等。
我们可以采取以下步骤来解决这个问题:- 检查错误日志:查看数据库的错误日志文件(alert.log)以获取详细的错误信息,确定故障原因。
- 检查数据库实例:在Oracle数据库中,数据库实例由后台进程(如后台进程和前台进程)组成。
如果实例未启动,可以使用SQL*Plus 工具来手动启动实例,并确保每个后台进程正常运行。
- 恢复数据库文件:如果数据库文件损坏或不完整,可以使用Oracle提供的RMAN工具来恢复文件,或者使用备份文件进行恢复。
- 检查数据库连接:使用SQL*Plus工具检查数据库连接是否正常,如果存在连接问题,可以尝试重新配置网络服务或重启数据库监听器。
2.数据损坏数据损坏是Oracle数据库常见的故障之一,可能由硬件故障、软件错误、人为操作错误等原因引起。
当发生数据损坏时,可以使用以下方案进行修复:-恢复备份数据:如果有备份数据,则可以通过将备份数据恢复到故障数据库来解决数据损坏问题。
尽量选择最新的备份数据,以尽可能减少数据丢失。
- 利用日志文件:如果无法恢复备份数据,可以使用Oracle的恢复管理工具RMAN来利用归档日志文件进行恢复。
RMAN可以将日志文件中的变更应用到数据库中,避免数据丢失。
-手动修复:在一些情况下,可能需要手动修复数据。
具体操作方法取决于数据损坏的程度和类型,需要根据具体的情况采取相应的措施。
3.性能问题Oracle数据库性能问题常常涉及到数据库的优化、调整和配置。
下面是解决性能问题的一些常见方法:-查询优化:通过优化SQL查询语句,可以提高查询的性能。
ORACLE坏块(ORA-01578)模拟与处理方法
ORACLE坏块(ORA-01578)模拟与处理方法一。
.什么是数据库的坏块首先我们来大概看一下数据库块的格式和结构——数据库的数据块有固定的格式和结构,分三层cache layer,transaction layer,data layer。
在我们对数据块进行读取写入操作的时候,数据库会对要读写的数据块做一致性的检查,其中包括数据块的类型、数据块的地址信息、数据块的SCN号以及数据块的头部和尾部。
如果发现其中有不一致的信息,那数据库就会标记这个数据块为坏块了。
数据库的坏块分为两种,逻辑坏块和物理坏块。
二.模拟坏块SQL> conn systemSQL> create tablespace corrupt datafile 'C:\corrupt.dbf' size 200k;SQL> create table corrupt_tab tablespace corrupt as select * from all_users;SQL> alter table corrupt_tab modify(user_id primary key);SQL> select extent_id,file_id,block_id,blocks from dba_extents2 where owner='SYSTEM' and segment_name='CORRUPT_TAB';EXTENT_ID FILE_ID BLOCK_ID BLOCKS---------- ---------- ---------- ----------0 8 17 8上述查询说明,这个表具有一个区间EXTNET_ID 0,位于8号文件,从块号17开始,大小为8个块。
SQL> conn / as sysdbaSQL> shutdown immediate;用UE编辑器模拟出物理或逻辑坏块。
Oracle--DBV命令行工具用法详解及坏块修复
Oracle--DBV命令⾏⼯具⽤法详解及坏块修复⼀,介绍DBV(DBVERIFY)是提供的⼀个命令⾏⼯具,它可以对数据⽂件物理和逻辑两种⼀致性检查。
但是这个⼯具不会检查索引记录和数据记录的匹配关系,这种检查必须使⽤analyze validate structure命令。
这个⼯具有如下特点:以只读的⽅式打开数据⽂件,在检查过程中不会修改数据⽂件的内容。
可以在线检查数据⽂件,⽽不需要关闭数据库。
不能检查控制⽂件和⽇志⽂件,只能检查数据⽂件。
这个⼯具可以检查ASM⽂件,但数据库必须Open状态,并且需要通过USERID指定⽤户,⽐如:dbvfile=+DG1/ORCL/datafile/system01.dbf userid=system/sys在许多UNIX平台下,DBV要求数据⽂件有扩展名,如果没有可以通过建⽴链接的⽅法,然后对链接的⽅法,然后对链接⽂件进⾏操作,⽐如:ls -n /dev/rdsk/mydevice /tmp/mydevice.dbf某些平台,DBV⼯具不能检查超过2GB的⽂件,如果碰到DBV-100错误,请先检查⽂件⼤⼩,MOS Bug 710888对这个问题有描述。
DBV只会检查数据块的正确性,但不会关系数据块是否属于哪个对象。
对于祼设备建议指定END参数,避免超出数据⽂件范围。
⽐如:dbv FILE=/dev/rdsk/r1.dbf END=<last_block_number>。
可以在v$datafile视图中⽤bytes字段除以块⼤⼩来获得END值。
参数含义缺省值FILE要检查的数据⽂件名没有缺省值START检查起始数据块号数据⽂件的第⼀个数据块END检查的最后⼀个数据块号数据⽂件的最后⼀个数据块BLOCKSIZE数据块⼤⼩,这个值要和数据库的DB_BLOCK_SIZE参数值⼀缺省值8192致LOGFILE检查结果⽇志⽂件没有缺省值FEEDBAK显⽰进度0PARFILE参数⽂件名没有缺省值USERID⽤户名、密码没有缺省值SEGMENT_ID段ID,参数格式<tsn.segfile.segblock>没有缺省值⼆,简单使⽤[oracle@oracle01 oracle01]$ dbv file=test01.dbf--最好是绝对路径,这⾥是进⼊到对应⽬录下,所以⽤相对路径DBVERIFY: Release 11.2.0.4.0- Production on Mon May 1315:21:422019Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.DBVERIFY - Verification starting : FILE=/u01/app/oracle/oradata/oracle01/test01.dbfDBVERIFY - Verification completeTotal Pages Examined : 1280 --( 检查总页数)Total Pages Processed (Data) : 5 --(处理的总页数(数据))Total Pages Failing (Data) : 0 --(总页数失败(数据))Total Pages Processed (Index): 0 --(处理的总页数(索引))Total Pages Failing (Index): 0 --(总页⾯失败(索引))Total Pages Processed (Other): 136 --(处理的总页数(其他))Total Pages Processed (Seg) : 0 --(处理的总页数(Seg))Total Pages Failing (Seg) : 0 --(总页数失败(Seg)Total Pages Empty : 1139 --(总页数空)Total Pages Marked Corrupt : 0 --(总页数标记为损坏)Total Pages Influx : 0 --(总页⾯数量)Total Pages Encrypted : 0 --(加密总页数)Highest block SCN : 11638862 (0.11638862) --(最⾼块SCN) 这个⼯具报告使⽤的是page作为单位,含义和data block相同。
ORACLE 数据库故障解决方案
ORACLE 数据库故障解决方案一、引言ORACLE 数据库是一款广泛应用于企业级应用系统的关系数据库管理系统。
然而,在数据库运行过程中,可能会浮现各种故障,如数据损坏、性能下降、连接问题等。
本文将提供一些常见的 ORACLE 数据库故障解决方案,以匡助管理员快速解决问题并恢复数据库的正常运行。
二、故障解决方案1. 数据损坏数据库数据损坏可能导致数据丢失或者无法访问。
以下是一些常见的数据损坏问题及解决方案:- 数据块损坏:使用RMAN 工具进行数据块检查,并使用备份数据进行恢复。
- 表空间损坏:使用RMAN 工具进行表空间检查,并使用备份数据进行恢复。
- 表或者索引损坏:使用 DBMS_REPAIR 工具进行修复,或者从备份中恢复受损的对象。
2. 性能下降数据库性能下降可能导致用户体验差和系统响应延迟。
以下是一些常见的性能下降问题及解决方案:- 确保数据库服务器具有足够的硬件资源,如 CPU、内存和磁盘空间。
- 优化 SQL 查询语句,使用索引、避免全表扫描等。
- 定期采集和分析数据库性能指标,如等待事件、锁定和死锁等,以找出性能瓶颈并采取相应措施。
3. 连接问题连接问题可能导致用户无法连接到数据库或者连接超时。
以下是一些常见的连接问题及解决方案:- 检查数据库监听器是否运行,并确保监听器配置正确。
- 检查网络连接是否正常,如网络配置、防火墙设置等。
- 检查数据库实例是否正常启动,并检查数据库服务是否处于运行状态。
4. 容灾和备份恢复容灾和备份恢复是数据库管理的重要方面,以确保数据的可靠性和可恢复性。
以下是一些常见的容灾和备份恢复问题及解决方案:- 使用 Oracle Data Guard 实现数据库的冗余和自动故障转移。
- 定期进行数据库备份,并测试备份的可恢复性。
- 在灾难发生时,使用备份进行数据库恢复,并确保恢复过程的可靠性和完整性。
5. 安全性问题数据库安全性问题可能导致数据泄露、未授权访问等风险。
ORACLE 数据库故障解决方案
ORACLE 数据库故障解决方案故障解决方案是指在出现问题或故障时,通过一系列的步骤和方法来解决问题,使系统恢复正常运行。
在ORACLE数据库中,故障解决方案是非常重要的,因为数据库的正常运行对于企业的数据管理和业务运营至关重要。
以下是一种针对ORACLE数据库故障的解决方案,包括故障诊断、故障处理和故障预防三个方面。
1. 故障诊断首先,当发现数据库出现故障时,需要进行故障诊断,确定故障的具体原因。
可以通过以下步骤进行故障诊断:- 检查数据库的错误日志文件,查看是否有任何错误信息。
- 检查数据库的警告日志文件,查看是否有任何警告信息。
- 使用ORACLE提供的诊断工具,如SQL Trace和Event Trace等,来收集更多的诊断信息。
- 分析收集到的诊断信息,确定故障的原因。
2. 故障处理一旦确定了故障的原因,就可以采取相应的措施来处理故障,恢复数据库的正常运行。
可以考虑以下几个方面:- 如果是由于硬件故障导致的数据库故障,应及时修复或更换故障硬件。
- 如果是由于软件问题导致的数据库故障,可以尝试重新启动数据库实例或应用补丁程序来修复问题。
- 如果是由于数据库配置错误导致的故障,可以通过修改配置文件或参数来解决问题。
- 如果是由于数据损坏导致的故障,可以尝试使用ORACLE提供的数据恢复工具来修复损坏的数据。
3. 故障预防除了及时处理故障外,还应该采取一些预防措施,以减少故障的发生概率。
可以考虑以下几个方面:- 定期备份数据库,以防止数据丢失。
- 定期进行数据库性能优化,以提高数据库的稳定性和性能。
- 定期监控数据库的运行状态,及时发现并解决潜在的问题。
- 定期进行数据库的维护工作,如清理日志文件、优化表结构等。
总结:在ORACLE数据库中,故障解决方案是非常重要的。
通过故障诊断、故障处理和故障预防三个方面的工作,可以及时发现并解决数据库故障,保证数据库的正常运行。
同时,还应该定期进行数据库的备份、性能优化、监控和维护工作,以减少故障的发生概率,提高数据库的稳定性和性能。
ORACLE 数据库故障解决方案
ORACLE 数据库故障解决方案故障解决方案一、背景介绍ORACLE数据库是一种常用的关系型数据库管理系统,用于存储和管理大量的结构化数据。
然而,在使用ORACLE数据库的过程中,可能会遇到各种故障,如数据丢失、数据库无法启动、性能下降等问题。
为了保证数据库的稳定运行,需要及时解决这些故障。
二、故障解决方案以下是针对ORACLE数据库常见故障的解决方案:1. 数据库无法启动故障描述:数据库无法正常启动,可能会出现错误提示。
解决方案:- 检查数据库参数文件是否正确配置,并确保文件路径正确。
- 检查数据库控制文件是否损坏,如果损坏,可以使用备份文件进行恢复。
- 检查数据库日志文件是否损坏,如果损坏,可以尝试使用归档日志进行恢复。
- 如果以上方法无法解决问题,可以尝试使用ORACLE提供的数据库恢复工具。
2. 数据丢失故障描述:数据库中的数据突然丢失,无法访问。
解决方案:- 检查是否有其他用户或程序误删除了数据,可以通过审查数据库日志或使用备份进行数据恢复。
- 检查数据库是否发生了物理损坏,可以使用ORACLE提供的数据恢复工具进行修复。
- 如果数据库中的数据没有备份,可以尝试使用数据恢复软件进行恢复。
3. 性能下降故障描述:数据库查询或操作速度变慢,响应时间延迟。
解决方案:- 检查数据库的硬件资源是否足够,如CPU、内存、磁盘空间等。
- 优化数据库的查询语句,使用索引、分区等技术提高查询效率。
- 检查数据库的统计信息是否准确,可以使用ORACLE提供的统计信息收集工具进行更新。
- 如果以上方法无法解决问题,可以考虑对数据库进行分析和调优,如重建索引、优化SQL语句等。
4. 数据库安全性问题故障描述:数据库面临安全威胁,如未经授权的访问、数据泄露等。
解决方案:- 加强数据库的访问控制,设置复杂的密码策略、限制登录IP等。
- 定期备份数据库,并将备份数据存储在安全的位置。
- 安装和配置防火墙、入侵检测系统等安全设备,防止未经授权的访问。
Oracle坏块故障葵花宝典
Oracle坏块故障总结最近处理了两次典型的ora-01578,ora-01115,ora-01110故障,一次是平湖索引块坏,一次是黄山数据文件坏、blob数据块坏。
平湖的警告日志文件中有以下信息:ORA-12012: error on auto execute of job 21ORA-01578: ORACLE data block corrupted (file # 10, block # 2558610) ORA-01110: data file 10: 'D:\ORACLE\ORADATA\BS\USERS04.DBF'ORA-12012: error on auto execute of job 1ORA-01578: ORACLE data block corrupted (file # 16, block # 2624066) ORA-01110: data file 16: 'D:\ORACLE\ORADATA\BS\USERS10.DBF'应用软件可以正常使用,偶尔会报错ora-01578。
排错过程登录数据库检查:select count(*) from ep_table t where ptime<trunc(sysdate)-30 andalarmtype=0784163select count(*) from ep_table t4281062看来全表扫描正常select from ep_table t where ptime<trunc(sysdate)-31 and ptime>trunc(sysdate)-33 and alarmtype=0 and rownum<10001索引扫描报错了,推断为索引上有坏块!继续查:select owner,file_id,segment_name, segment_type, block_id, blocks from dba_extentswhere file_id=16 and block_id<=2624066 and (block_id + blocks- 1) >= 2624066;运气真好重建相关索引后数据库就恢复了。
ORACLE 数据库故障解决方案
ORACLE 数据库故障解决方案ORACLE数据库故障解决方案一、背景介绍ORACLE数据库是一种常用的关系型数据库管理系统,广泛应用于企业级应用系统中。
然而,由于各种原因,数据库可能会出现故障,导致系统无法正常运行。
为了保证系统的稳定性和可靠性,需要及时解决数据库故障。
二、故障分类1. 数据库无法启动:当数据库无法启动时,可能是由于数据库实例崩溃、数据库文件损坏等原因导致。
2. 数据库连接问题:当无法连接到数据库时,可能是由于网络故障、数据库监听程序故障等原因导致。
3. 数据库性能问题:当数据库性能下降时,可能是由于缓冲区不足、SQL语句优化不当等原因导致。
4. 数据库备份恢复问题:当需要恢复数据库时,可能是由于误删除数据、数据库文件损坏等原因导致。
三、解决方案1. 数据库无法启动解决方案:a. 检查数据库实例是否崩溃,可以通过查看数据库错误日志来确认。
b. 检查数据库文件是否损坏,可以使用ORACLE提供的工具进行检查和修复。
c. 如果数据库实例崩溃,可以尝试重启数据库实例或者重建数据库实例。
2. 数据库连接问题解决方案:a. 检查网络是否正常,可以使用PING命令检查网络连通性。
b. 检查数据库监听程序是否正常运行,可以使用LSNRCTL命令进行检查和管理。
c. 如果数据库监听程序故障,可以尝试重启监听程序或者重新配置监听程序。
3. 数据库性能问题解决方案:a. 检查数据库缓冲区是否足够,可以通过查看数据库缓冲区命中率来判断。
b. 检查SQL语句是否优化,可以使用ORACLE提供的工具进行SQL调优。
c. 如果数据库性能下降,可以尝试增加数据库缓冲区大小或者重新设计数据库结构。
4. 数据库备份恢复问题解决方案:a. 检查数据库备份是否可用,可以通过恢复测试来确认备份文件是否完整。
b. 检查数据库文件是否损坏,可以使用ORACLE提供的工具进行文件恢复。
c. 如果数据库文件损坏,可以尝试从备份文件中恢复数据或者重新创建数据库。
用ORACLE8i修复数据库坏块的三种方法
在进行SUN CLUSTER双机切换、意外断电或其它情况下,有时会发生共享盘MOUNT不上的情况,需要使用FSCK对共享盘进行修复。
修复完成后,在数据库启动过程中,却又出现“数据块损坏,无法启动数据库”的现象,此时,可以根据不同的数据块损坏类型,检测并修复错误。
在此介绍三种使用Oracle8i修复损坏数据块的方法。
一、数据块损坏,错误代码为ORA-01578ORA-1115 I/O ERROR READING BLOCK通常后跟ORA-737X错误与操作系统错误(如UNIX中的错误号5)产生原因:1.硬件问题(磁盘控制器问题或磁盘问题)2.物理级的数据块损坏(通常由前一原因造成)3.处理巨型文件时,后跟错误代码ORA-7371确定故障原因与恢复的方法:1.查看alert.log文件中其它ORA-1115错误的发生情况:1) 如果指向不同磁盘的文件,则是磁盘控制器的问题,查看V$DATAFILE,有哪些文件位于该控制器下,转到第二步。
2) 如果指向相同磁盘的不同文件,则是磁盘的问题,转到第二步。
3) 如果指向同一个文件,执行以下语句查找文件名:SELECT SEGMENT_NAME,SEGMENT_TYPE FROM DBA_EXTENTSWHERE FILE_ID=<文件号> AND <块号> BETWEEN BLOCK_IDAND BLOCK_ID+BLOCKS-1;其中,文件号与块号是ORA-1115中指出的,如果该查询持续指向某表或索引,则重建它们即可。
2.如果文件是SYSTEM表空间,或处于NOARCHIVELOG模式,关闭数据库,转到第四步。
3.如果数据库处于ARCHIVELOG模式,仍应关闭数据库,如果不能关闭数据库,则将相应的数据文件脱机:ALTER DATABASE DATAFILE '文件名' OFFLINE;4.试着将数据文件拷贝到别的磁盘。
总结了10种_Oracle_文件损坏及恢复的过程
总结了10种_Oracle_文件损坏及恢复的过程Oracle数据库是一个关系数据库管理系统(RDBMS),用于存储和管理大量结构化数据。
然而,由于各种原因,Oracle数据库文件可能会损坏,这可能导致数据库无法正常工作。
为了解决这个问题,需要进行文件的恢复过程。
下面总结了10种Oracle文件损坏及恢复的常见过程:1.数据文件丢失:如果数据文件丢失,可以从最近的备份还原数据文件,并进行恢复。
2. 数据文件坏块:在Oracle数据库中,可以使用DBVERIFY工具来检查数据文件的坏块。
如果坏块小部分,可以使用RMAN进行恢复。
如果坏块较多,可能需要考虑重新创建数据文件。
3.日志文件丢失:如果日志文件丢失,可以使用备份中的归档日志文件进行恢复。
如果没有备份,可以使用增量备份或物理备份进行恢复。
4.日志文件坏块:使用DBVERIFY工具可以检查日志文件的坏块。
如果发现坏块,可以尝试使用RMAN进行恢复,或者由管理员手动修复坏块。
5.控制文件丢失:如果控制文件丢失,可以从备份中还原控制文件,并使用RECOVER命令进行数据库恢复。
6.控制文件坏块:使用DBVERIFY工具检查控制文件的坏块。
如果找到坏块,可以使用备份恢复控制文件,或者手动修复坏块。
7.数据库文件或表空间重命名:如果数据库文件或表空间被重命名,可以使用ALTERDATABASERENAME命令更改文件或表空间的名称。
8. 恶意软件或数据损坏:如果Oracle数据库中的数据被恶意软件感染或损坏,必须进行杀毒和修复操作。
首先,应使用杀毒软件对系统进行全面扫描,以确保杀死所有恶意软件。
然后,可以使用RMAN进行数据恢复。
9.操作错误:有时,由于误操作或错误的命令,数据库文件可能会被损坏。
在这种情况下,可以从备份中还原损坏的文件,并执行相关的恢复操作。
10. 数据库崩溃:如果Oracle数据库发生崩溃,可能需要使用RMAN 进行恢复。
首先,必须使用备份进行数据库重建,然后使用RMAN进行恢复。
oracle数据库出现坏块问题该如何解决
oracle数据库出现坏块问题该如何解决
Oracle数据库是甲骨文公司的一款关系数据库管理系统,目前在数据库市场上仍占有主要份额,很多企业在使用Oracle数据库的过程中,经常会遇到数据库坏块的问题。
很多用户就会疑问了,Oracle数据库坏块问题具体指什么了?我们又该如何解决数据库坏块问题呢?
很多不了解Oracle数据库的用户都不清楚数据库具体的结构,从而对其出现的故障也无从下手。
其实,数据库的数据块有固定的格式和结构,分三层:cache layer、transaction layer、data layer。
在我们对数据块进行读取写入操作的时候,数据库会对要读写的数据块做一致性的检查,其中包括:数据块的类型、数据块的地址信息、数据块的SCN号以及数据块的头部和尾部。
如果发现其中有不一致的信息,那数据库就会标记这个数据块为坏块了。
当数据库出现坏块情况时,数据库的告警日志文件里面会存在一些报错信息,用户可以根据这些信息判断数据库是否存在坏块问题。
当Oracle数据库出现坏块问题后,可能会对数据字典表、回滚段表、临时段、用户数据表和索引等内容造成一定的影响,所以当Oracle数据库出现坏块问题后,用户需要立即采取相应措施解决坏块问题。
坏道处理的方法比较复杂,针对不同原因造成的坏道问题,处理的方法也各有不同,所以对于用户来说,解决Oracle数据库坏道问题是一个难点,一旦处理不当,可能会对Oracle 数据库造成二次破坏,造成用户更大的损失。
所以当用户出现Oracle数据库坏块问题后,要立刻咨询专业的数据恢复机构,让专业的数据库恢复专家帮助修复数据库,解决数据丢失的烦恼。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle 坏块总结收藏Oracle数据库出现坏块现象是指:在Oracle数据库的一个或多个数据块(一个数据块的容量在创建数据库时由db_block_size参数指定,缺省为8K)内出现内容混乱的现象。
由于正常的数据块都有固定的合法内容格式,坏块的出现,导致数据库进程无法正常解析数据块的内容,进而使数据库进程报错乃至挂起,并级联导致整个数据库实例出现异常。
一.坏块的产生原因坏块产生的原因大致有以下几种:1.1 硬件问题Oracle进程在处理一个数据块时,首先将其读入物理内存空间,在处理完成后,再由特定进程将其写回磁盘;如果在这个过程中,出现内存故障,CPU计算失误,都会导致内存数据块的内容混乱,最后反映到写回磁盘的数据块内容有误。
同样,如果存储子系统出现异常,数据块损坏也就随之出现了。
1.2 操作系统BUG由于Oracle进程对数据块的读写,都是以操作系统内核调用(system call)的方式完成的,如果操作系统在内核调用存在问题,必然导致Oracle进程写入非法的内容。
1.3 操作系统的I/O错误或缓冲问题1.4 内存或paging问题Oracle软件BUGOracle软件特定版本上,可能出现导致数据块的内容出现异常BUG。
1.5 非Oracle进程扰乱Oracle共享内存区域如上文所述,在当数据块的内容被读入主机的物理内存时,如果其他非Oracle进程,对Oracle 使用的共享内存区域形成了扰乱,最终导致写回磁盘的数据块内容混乱。
1.6 异常关机,掉电,终止服务异常关机,掉电,终止服务使进程异常终止,而破坏数据块的完整性,导致坏块产生。
注:这也是为什么突然断电会导致数据库无法启动由上可见,坏块的形成原因复杂。
当出现坏块时,为了找到确切的原因,需要大量的分析时间和排查操作,甚至需要多次重现才能找出根本原因。
但当故障发生在生产系统上,我们为了减少停机时间,会尽快实施应急权变措施以保证系统的可用性,这样就破坏了故障现场,对根本原因的分析因而也更加困难了。
二.坏块的预防坏块问题破坏性大,但并非不可预防。
2.1 在网站,Oracle定期发布基于特定软件版本的“已知问题(known issues)说明”。
对于可能导致坏块的Oracle软件BUG,在Oracle公司内部,是作为高严重级别的问题进行处理,在“已知问题(known issues)说明”中,这些BUG以严重(Noticable)问题标出(标记为*或+),部分问题,Oracle还会发布警告(Alert)通告。
在文档中,Oracle会提供相应的补丁或应对措施。
2.2 Oracle提供备份恢复工具-Recovery Manager,提供了扫描文件检查坏块的功能。
在Recovery Manager界面中,使用:RMAN> BACKUP CHECK LOGICAL V ALIDATE DATAFILE n ;可以检查数据文件是否包含坏块,同时并不产生实际的备份输出。
2.3 Dbv工具检查注:因为dbv要求file后面跟的必须是一个文件扩展名,所以如果用裸设备存储的,就必须使用ln链接裸设备到一个文件,然后再用dbv对这个链接文件进行检查。
ANAL YZE TABLE tablename V ALIDATE STRUCTURE CASCADE它执行坏块的检查,但是不会标记坏块为corrupt,检测的结果保存在USER_DUMP_DEST 目录下的用户trace文件中。
2.4 利用exp工具导出整个数据库可以检测坏块对以下情况的坏块是检测不出来的:HWM以上的坏块是不会发现的索引中存在的坏块是不会发现的数据字典中的坏块是不会发现的结合数据库性能综合考虑db_block_checksum和db_blockchecking参数。
当我们使用Recovery Manager进行实际的数据库备份时,同时也就进行了坏块检查。
但要注意的是,在线使用Recovery Manager扫描坏块和备份时,需要数据库运行在归档模式(archive log),否则只能在数据库未打开的情况下进行。
对于操作系统问题和硬件故障,则需要相应厂商的配合支持。
同时,避免在数据库主机运行其他用户进程,避免异常停机,也会减少坏块发生的几率。
三.坏块故障的识别遇到坏块问题时,数据库的异常表现通常有:报告ORA-01578错误。
报告Ora-1110错误。
报告ORA-00600错误,其中,第一个参数为2000-8000,Cache layer 2000 –4000,Transaction layer 4000 –6000,Data layer 6000 - 8000。
Trace文件中出现Corrupt block dba: 0x160c5958 . found。
分析对象失败。
后台进程,如DBWR,LGWR出现长时间异常等待,如“LGWR wait for redo copy”。
四.Oracle数据块损坏恢复总结可以用DBV 命令来检测是否有坏块:在恢复前使用DBV命令检查数据文件是否存在坏块dbv file=d:\oracle\oradata\mydb\RONL Y.DBF blocksize=8192查看数据坏块所在数据文件号及块号可以对表进行一次全表扫描,如:select count(*) from tablename;关于DBV 命令的具体使用,请参考blog:/tianlesoftware/archive/2009/12/16/5015164.aspx4.1 没有备份的情况下:4.1.1、使用exp/imp恢复在这种情况下肯定会造成数据的丢失,在这种情况下应采取将数据导出然后重建表再进行导入的方法,来尽量恢复损坏数据块中的数据,但是在有坏块的情况下是不允许导出的,如下命令:Exp test/test file=t.dmp tables=t;导出命令在执行中会报ORA-01578错误,在这错误提示中会提示那个文件号的文件以及这个文件中的哪个块被损坏,如:ORA—01578:ORACLE 数据块损坏(文件号4,块号35)针对以上的提示首先查询那些对象被损坏:Select tablespace_name,segment_type,owner,segment_name From dba_extents Where file_id=4 and 35 between block_id and block_id+blocks-1;如果被损坏的块是索引,通常可以通过索引重建来解决,如果损坏的是数据(segment_type 为table),那么通过设置如下内部事件使得Exp操作跳过坏块。
Alter session set events=’10231 trace name context forever,level 10’;然后重新执行导出命令,导出相关的表,然后执行Drop Table命令删除相关表,之后重建表最后导入数据。
4.1.2、使用DBMS_REPAIR恢复用DBMS_REPAIR当然也会丢失数据。
这里不做详细的介绍,有兴趣的可以查看oracle的在线文档4.2 使用Rman进行恢复:首先要存在Rman的最新备份集,然后执行如下命令:RMAN>backup validate datafile 4;检查4号数据文件是否存在坏块执行查询:select * from v$database_block_corruption where file#=4;如果4号文件存在坏块的话,那么将在结果集中有所显示,会显示损坏的块号,根据显示结果执行如下命令进行恢复:RMAN>blockrecover datafile 4 block 35 from backupset;该命令执行后即可恢复坏块,并且不会造成数据丢失,但是要求数据库必须要运行在归档模式下,否则RMAN无法发挥作用,而且通过RMAN做过最新的数据库备份4.3 使用bbed恢复使用bbed恢复时必须有数据文件的拷贝。
bbed就是英文block browse edit的缩写,用来直接查看和修改数据文件数据的一个工具。
BBED在windows 8i中在$ORACLE_HOME/bin下可以找到,9i中似乎未随软件发布,故在windows没有这个工具,linux下需要编译:然后把$ORACLE_HOME/rdbms/lib加到环境变量的PATH里面,就可以直接在命令中bbed 了。
BBED的缺省口令为blockedit,For Oracle Internal Use only 请谨慎使用Oracle不做技术支持。
BBED具体的使用,参考blog:/tianlesoftware/archive/2009/12/14/5006580.aspx五.如何查找坏块所含的数据表名称和数据的rowid关于Rowid 的相关知识参看blog:/tianlesoftware/archive/2009/12/16/5020718.aspx5.1. 首先肯定知道那个数据文件坏了,查出该文件的file_id,relative_fno,tablespace_name 利用dba_data_files可以查询file_id(整个数据库唯一序号),RELATIVE_FNO(相对一个表空间内的序号)5.2. 找到坏块的ID(可以运行dbverify实现),假设找到的坏块ID为1234。
5.3.运行下面的查询,根据,坏块的file_id,block id查找该块对应的owner,segment_type, segment_name等信息select owner,file_id,segment_name, segment_type, block_id, blocks from dba_extentswhere file_id=13 and block_id<=1234 and (block_id + blocks- 1) >= 1234;5.4. 根据坏块的file_id,owner,segment_name,block_id,如果是数据表的话,用下面的查询来得到对应坏块的rowid假设owner : DA VEsegment_name: BLfile_id : 13block_id : 162运行下面的查询来获得该块所含的rowid(如果没有索引,可能就不能用下面的方式了): select /*+ index(DA VE, i_test) */ rowidfrom DA VE.BLwhere dbms_rowid.rowid_to_absolute_fno(rowid,'DA VE','BL')=13and dbms_rowid.rowid_block_number(rowid)=162;六,如何模拟坏块DBA 的基本知识,制造坏块的方法很多的,可以用ultraedit,也可以用dd命令,同时也呆以用orapatch工具6.1 orapatch 工具:$orapatch open tools001.dbf writepatch>set hex --要用十六进制patch>display 177 --orapatch以512字节为工作模式,假定想破坏第11个block即为:8k/512*11+1(file header)patch>find 00400003 --选一个要编辑的点patch>modify 00400002 --破坏patch>exit6.2 用编辑器打开datafile 以8192 字节为一大小(db 的block是8192)下面是一个block 的开始的20个字节和结尾的 4 个字节06 02 00 00 08 00 c0 02 6c 43 0d 00 00 00 01 0200 00 00 00 -- block head06 02 6c 43 -- block tail 这里有scn(6c 43) 的情况和block (06)的类型(01) 和head 的seq: 0x01 对应,只要改block尾部的4个字节中的或block开始的对应字节任何一个就一定会有ora-1578,但如果数据库有ora-1578的error不一定是这样引起的btw :UE不是很好用winhex吧不错喔6.3 BBED 工具BBED具体的使用,参考blog:/tianlesoftware/archive/2009/12/14/5006580.aspx七.如何利用dbms_repair来标记和跳过坏块但是当数据量很大,或7*24的系统时,我们使用dbms_repair来处理。