数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
DBA工作备忘录-阵列损坏解决方法

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

问题描述:
下午现场人员说产品库意外中止,紧接着说可能是阵列损坏,因为灯都不亮了。
于是紧急拨号到远程,检查数据库,5分钟以后,数据库重新启动成功。
问题其实非常简单,但是后来看alertlog,发现从阵列失效一直到给我打电话,中间有将近1个小时的时间,这段时间里面,因为现场人员不知道问题所在,所以反复切换cluster,试图让数据库能够启动成功,汗!

问题解释:
产品库中控制文件总共三份,分别保存在/global/oracle, /global/backup1, /global/backup2
下。重作日志和归档日志各两份,分别保存在/global/backup1, /global/backup2
下。
/global/oracle, /global/backup1, /global/backup2是三个独立的阵列。
由于控制文件对于oracle必须保持一致,所以三份控制文件中的任何一份无法读取
,数据库都会关闭。而重作日志和归档日志,只要有一份可以正常读写,那么数据
库还可以继续正常运行。
所以,如果任何一个阵列失效,那么由于控制文件的问题,数据库都会意外中止。

解决流程:
1。数据库意外中止

2。检查$ORACLE_HOME/admin/dpshdb/bdump/alert_dpshdb.log文件,确认意外中
止的原因,比如今天的内容是:
Tue Oct 26 16:36:40 2004
Errors in file /export/oracle/product/817/admin/dpshdb/bdump/dpshdb_ckpt_16541.trc:
ORA-00206: error in writing (block 3, # blocks 1) of controlfile
ORA-00202: controlfile: '/global/backup1/oradata/dpshdb/control02.ctl'
ORA-27063: skgfospo: number of bytes read/written is incorrect
SVR4 Error: 6: No such device or address
Additional information: -1
Additional information: 8192
Tue Oct 26 16:36:40 2004
Errors in file /export/oracle/product/817/admin/dpshdb/bdump/dpshdb_lgwr_16539.trc:
ORA-00345: redo log write error block 38713 count 2
ORA-00312: online log 1 thread 1: '/global/backup1/oradata/dpshdb/redo1b.log'
ORA-27063: skgfospo: number of bytes read/written is incorrect
SVR4 Error: 5: I/O error
Additional information: -1
Additional information: 1024
第一部分是指出control02.ctl控制文件无法读取,第二部分是指出redo1b.log重
作日志无法读取。
然后数据库自动关闭,如下显示,是16:36:43发生的,也就是在16:36:40首次发现
阵列失效的3秒以后(我们知道CKPT的timeout值是3秒):
Tue Oct 26 16:36:43 2004
Errors in file /export/oracle/product/817/admin/dpshdb/udump/dpshdb_ora_10206.trc:
ORA-00221: 写入控制文件出错
Instance terminated by CKPT, pid = 16541
从这些log中我们可以知道/global/backup1阵列失效了。

3。修改初始化参数文件$ORACLE_HOME/dbs/initdpshdb.ora,忽略失效的控制文件
和失效的归档路径
原内容:
control_files = ("/global/oracle/oradata/dpshdb/control01.ctl",
"/global/backup1/oradata/dpshdb/control02.ctl",
"/global/backup2/oradata/dpshdb/control03.ctl")
log_archive_dest_1 = "location=/global/backup1/oradata/dpshdb/arch"
修改后的内容:
control_files = ("/global/oracle/oradata/dpshdb/control01.ctl",
"/global/backup2/oradata/dpshdb/control03.ctl")
#log_archive_dest_1 = "location=/global/backup1/oradata/dpshdb/arch"

4。启动数据库,此时数据库已经可以正常使用了。

5。为了保证重作日志文件始终保持2份,所以在数据库启动以后,我们需要删除掉
原来失效的文件,添加新的重作日志文件。这部分操作可以在数据库启动以后再作
,但是最好不要有大量的更新操作,是为了防止重作日志切换过快,导致删除重作
日志的操作失败。
alter database drop logfile member
'/global/backup1/oradata/dpshdb/redo1b.log';
alter database add logfile member
'/global/oracle/oradata/dpshdb/redo1c.log' to group 1;
alter database drop logfile member
'/global/backup1/oradata/dpshdb/redo2b.log';
alter database add logfile member
'/global/oracle/oradata/dpshdb/redo2c.log' to group 2;
alter database drop logfile member
'/global/backup1/oradata/dpshdb/redo3b.log';
alter database add logfile member
'/global/oracle/oradata/dpshdb/redo3c.log' to group 3;
alter database drop logfile member
'/global/backup1/oradata/dpshdb/redo4b.log';
alter database add logfile member
'/global/oracle/oradata/dpshdb/redo4c.log' to group 4;
在执行alter database drop logfile member之前要检查v$log视图,确认该文件
所属的重作日志组的status字段不是current,不是active,而是inactive。否则
删除会报错,如果删除报错,那么运行两次如下语句:
alter system swtich logfile;
然后再重新执行删除旧日志和添加新日志的操作。




相关文章

相关软件