数据库故障处理应急方案V1.0
由于故障的原因很多,本文档仅供内部参考。 做任何操作之前必须与负责人评估。
一.表空间扩展故障应急处理
现象描述:
场景一:在RAC环境下进行表空间扩容(添加数据文件)时,只在一个节点上对数据文件建立了软连接,另一个节点没有建立软连接。
场景二: 在RAC环境下进行表空间扩容(添加数据文件)时,两个节点都没有建立软连接,只在一个节点的本地文件系统添加了数据文件,或者添加数据文件时有空格等特殊字符
场景三: 不小心将其他环境的裸设备加到到当前的环境中。(绝不允许出现此类错误)
场景四:在Oracle database 11.2.0.3 +RAC+ASM环境下,数据库有归档,添加数据文件至本地磁盘。
影响因素:
一般情况下,都属于人为错误.
解决方法:
(场景一)解决方法:
1、 将两个节点数据文件改为离线状态
alter database datafile 'XXX' offline;
2、 在问题节点对数据文件建立软连接
ln –s 裸设备 数据文件
3、 在问题节点恢复数据文件
recover datafile 'XXX';
4、 将数据文件改为在线状态
alter database datafile 'XXX' online;
5、 确认数据库告警日志无报错。
(场景二)解决方法:
1、 将问题节点数据文件改为离线状态
alter database datafile 'XXX' offline;
2、 在各节点对数据文件建立软连接
ln –s 裸设备 数据文件
3、 通过ALTER DATABASE CREATE DATAFILE ‘源文件’ AS ‘目标文件’; copy数据文件至目标位置
ALTER DATABASE CREATE DATAFILE '源文件' AS '目标文件';
4、 恢复数据文件
recover datafile '目标文件';
5、 将数据文件改为在线状态
alter database datafile '目标文件' online;
6、 将错误的本地数据文件移到其他路径,避免“/oracle”文件系统使用比率达到告警值。
7、 确认数据库告警日志无报错。
(场景三)解决方法:
1、 除了恢复,没有太好的方法。需要备份、归档都在。
(场景四)解决方法:
1、检查本地存在的数据文file_id. <==模糊查询/oracle目录下的数据文件
SQL> select file_name, file_id from dba_data_files where file_name like '/oracle%';
FILE_NAME FILE_ID
----------------------------------------------------------------------- --------------------------
/oracle/products/oracle/dbs/WPS_CEIDB_cei_ts_extended 25
2、使用本地数据文件脱机
alter database datafile 25 offline;
数据库故障恢复3、使用asmcmd命令 copy数据文件至ASM目录
ASMCMD>cd ESOPMDDG/esopmddb/datafile/ <===该路径为数据文件的路径
ASMCMD> cp /oracle/products/oracle/dbs/WPS_CEIDB_cei_ts_base WPS_CEIDB_cei_ts_base.dbf
4、rename 数据文件路径
SQL> alter database rename file '/oracle/products/oracle/dbs/WPS_CEIDB_cei_ts_base' to '+ESOPMDDG/esopmddb/datafile/WPS_CEIDB_cei_ts_base.dbf';
5、recover datafile 25; <= 这个时候会报错,提示不到其他节点的的归档文件.
ORA-00308: cannot open archived log '/arch01/esopmddb1/2_88_790625996.dbf'
6、将另外一个节点的归档复制一份
rcp 2_88_790625996.dbf oracle@s1-esop-db-ng:/arch01/esopmddb1
7、recover datafile 25; 恢复成功。
8、使文件联机
alter database datafile 25 online;
二.服务切换应急处理
现象描述:
场景一:当我们在进行服务切换时,无法从一个节点切换到另外一个节点。
影响因素:
一般包含以下几种:
A、目标节点实例异常,服务无法切换。
B、持有服务节点无法释放,服务无法切换
C、BUG
解决方法:
(场景一) 解决方法:
1.首先使用 srvctl start service -d <db_name> [-s <service_name> [-i <inst_name>]] 命令切换。
例如:srvctl start service -d fsdb -s smm –i fsdb1
2.当上面命令, 可以使用以下命令进行强制服务切换: alter system set service_names=‘s1,s2’;
例如:alter system set service_names='sfs,smm' scope=memory sid='FSDB1';
然后查看是否注册成功:
SQL> show parameter service
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string sfs,smm
3.检查监听并测试连接测试是否生效
$lsnrctl service
$sqlplus sys/oracle@node_vip:1521/service_name
4、如果连接不成功,按照以下命令排查.
检查实例启动时间: select instance_number, status, startup_time from gv$instance;
检查数据库状态: select inst_id, open_mode from gv$database;
检查alert.log日志:Completed: ALTER DATABASE OPEN (是否完成)
检查服务运行情况: srvctl status service -d <db_name>
检查服务配置情况: srvctl config service -d <db_name> -a
三.'TX,TM,DX'锁应急处理
现象描述:
数据库大量锁异常等待,系统资源消耗高,cpu负载高 (针对大量'TX,TM,DX'等类型的锁造成的大量异常等待)
影响因素:
多个事务争用造成。
解决方法
以下语句列出是谁造成了阻塞
column event format a30
column sess format a20
set linesize 250
set pagesize 0
break on id1 skip 1
select decode(request,0,'Holder:',' Waiter:') || s.inst_id || ':' || s.sid||','|| s.serial# sess,
id1, id2, lmode, request, l.type, ctime, s.username,s.sql_id, s.event
-- ,s.service_name
from gv$lock l, gv$session s
where (id1, id2, l.type) in
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论