当前位置: 首页 > 图文教程 > 数据库 > Oracle > Oracle数据库系统紧急故障处理方法

Oracle
常见的一些Oracle初学者的问题
ORACLE认证系统概述
数据库考试简介:Oracle认证
Oracle认证基础知识介绍
ADO连接Oracle Access示例及记录集处理源码
SQL Server和MySQL的安全性分析
用Oracle和SQL Server数据库组合利弊分析
Oracle 11g分区功能新革命
Flashback Query 恢复误删除的数据
基于Oracle高性能动态SQL程序开发
怎样在Oracle 9i中正确的转换时区
Oracle 10g导出的数据库能否导入Oracle 9i?
增加Distinct后查询效率反而提高
Oracle限制返回结果集的大小
Java语言数据库操作的基本流程
美国甲骨文(ORACLE)公司入驻渝中区大都会商厦
RHEL AS4上安装oracle 10R2 的方法
DB中如何查询Table占用空间的大小
编写高质量高性能的MySQL语法
Oracle数据库自动备份的具体实现步骤

Oracle数据库系统紧急故障处理方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 85 ::
收藏到网摘: n/a

正在看的ORACLE教程是:Oracle数据库系统紧急故障处理方法。

Oracle物理结构故障是指构成数据库的各个物理文件损坏而导致的各种数据库故障。这些故障可能是由于硬件故障造成的,也可能是人为误操作而引起。所以我们首先要判断问题的起因,如果是硬件故障则首先要解决硬件问题。在无硬件问题的前提下我们才能按照下面的处理方发来进一步处理。
  控制文件损坏:
  控制文件记录了关于oracle的重要配置信息,如数据库名、字符集名字、各个数据文件、日志文件的位置等等信息。控制文件的损坏,会导致数据库异常关闭。一旦缺少控制文件,数据库也无法启动,这是一种比较严重的错误。
  损坏单个控制文件:
  1. 确保数据库已经关闭,如果没有用下面的命令来关闭数据库:
  svrmgrl>shutdown immediate;
  2. 查看初始化文件$ORACLE_BASE/admin/pfile/initORCL.ora,确定所有控制文件的路径。
 
  3. 用操作系统命令将其它正确的控制文件覆盖错误的控制文件。
  4. 用下面的命令重新启动数据库:
  svrmgrl>startup;
  5. 用适当的方法进行数据库全备份。
  损坏所有的控制文件:
  1. 确保数据库已经关闭,如果没有用下面的命令来关闭数据库:
  svrmgrl>shutdown immediate;
  2. 从相应的备份结果集中恢复最近的控制文件。对于没有采用带库备份的点可以直接从磁带上将最近的控制文件备份恢复到相应目录;对于采用带库备份的点用相应的rman脚本来恢复最近的控制文件。
  3. 用下面的命令来创建产生数据库控制文件的脚本:
svrmgrl>startup mount;
svrmgrl>alter database backup controlfile to trace noresetlogs;
  4. 修改第三步产生的trace文件,将其中关于创建控制文件的一部分语句拷贝出来并做些修改,使得它能够体现最新的数据库结构。假设产生的sql文件名字为createcontrol.sql.
  注意:
  Trace文件的具体路径可以在执行完第3)步操作后查看$ORACLE_BASE/admin/bdump/alert_ORCL.ora文件来确定。
  5. 用下面命令重新创建控制文件:
  svrmgrl>shutdown abort;
  svrmgrl>startup nomount;
  svrmgrl>@createcontrol.sql;
  6. 用适当的方法进行数据库全备份。
  重做日志文件损坏:
  数据库的所有增、删、改都会记录入重做日志。如果当前激活的重做日志文件损坏,会导致数据库异常关闭。非激活的重做日志最终也会因为日志切换变为激活的重做日志,所以损坏的非激活的重做日志最终也会导致数据库的异常终止。在ipas/mSwitch中每组重做日志只有一个成员,所以在下面的分析中只考虑重做日志组损坏的情况,而不考虑单个重做日志成员损坏的情况。
  确定损坏的重做日志的位置及其状态:
  1. 如果数据库处于可用状态:
  select * from v$logfile;
  svrmgrl>select * from v$log;
  2. 如果数据库处于已经异常终止:
  svrmlgr>startup mount;
  svrmgrl>select * from v$logfile;
  svrmgrl>select * from v$log;
  其中,logfile的状态为INVALID表示这组日志文件出现已经损坏;log状态为Inactive:表示重做日志文件处于非激活状态;Active: 表示重做日志文件处于激活状态;Current:表示是重做日志为当前正在使用的日志文件。
  损坏的日志文件处于非激活状态:
  1. 删除相应的日志组:
  svrmgrl>alter database drop logfile group group_number;
  2. 重新创建相应的日志组:
  svrmgrl>alter database add log file group group_number ('log_file_descritpion',…) size log_file_size;
  损坏的日志文件处于激活状态且为非当前日志:
  1. 清除相应的日志组:
  svrmgrl>alter database clear unarchived logfile group group_number;
  损坏的日志文件为当前活动日志文件:
  用命令清除相应的日志组:
  svrmgrl>alter database clear unarchived logfile group group_number;
  如果清除失败,则只能做基于时间点的不完全恢复。
  打开数据库并且用适当的方法进行数据库全备份:
  svrmgrl>alter database open;

[NextPage]

部分数据文件损坏:
  若损坏的数据文件属于非system表空间,则数据库仍然可以处于打开状态可以进行操作,只是损坏的数据文件不能访问。这时在数据库打开状态下可以单独对损坏的数据文件进行恢复。若是system表空间的数据文件损坏则数据库系统会异常终止。这时数据库只能以Mount方式打开,然后再对数据文件进行恢复。可以通过查看数据库日志文件来判断当前损坏的数据文件到底是否属于system表空间。

上一页