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

Oracle
Excel VBA连接并操作Oracle
Oracle 外连接实现代码
oracle 存储过程和函数例子
Oracle 数据库操作类
ORACLE 分区表的设计
Oracle 用户权限管理方法
Oracle In和exists not in和not exists的比较分析
利用windows任务计划实现oracle的定期备份
ORACLE11g随RHEL5系统自动启动与关闭的设置方法
在oracle 数据库查询的select 查询字段中关联其他表的方法
plsql和tsql常用函数比对
plsql与tsql的语法不同
ASP.NET调用oracle存储过程实现快速分页
执行drop表操作后数据库无法起动
分析Oracle有时会用索引来查找数据的原因
数据从MySQL迁移到 Oracle的注意事项
快速理解Oracle归档模式的命令及参数
在Oracle里加快SQL执行的三种方法
几条常见的数据库分页 SQL 语句
Oracle9I OCP认证过程

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 86 ::
收藏到网摘: 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表空间。

上一页