ORACLE故障排除--注意事项

 
1.       在系统良好运作时, 进行一次Statspack! 并将结果文件保存作为以后的判断标准.
2.       ORACLE中建立一张存放有执行计划的表
脚本如下:
 
--建立一张计划表
create table plan_hashes
( sql_text            varchar2(1000),
 hash_value          number,
 plan_hash_value     number,
 constraint plan_hashes_pk
 primary key(hash_value,sql_text,plan_hash_value)
)
organization index;
 
--将shared_pool中的语句插入计划表
insert into plan_hashes( sql_text, hash_value, plan_hash_value )
select distinct sql_text,
       hash_value,
       plan_hash_value
 from v$sql
 where command_type in (
 /* DELETE */ 7,     /* INSERT */ 2,
 /* MERGE */ 189, /* SELECT */ 3,
 /* UPDATE */ 6 )
   and parsing_user_id <> 0
   and parsing_schema_id <> 0;
 
--查看当前shared pool中的执行计划与计划表的差异
select distinct sql_text,
       hash_value,
       plan_hash_value,
       decode( (select 1
                  from plan_hashes
                 where plan_hashes.hash_value = v$sql.hash_value
                   and plan_hashes.sql_text = v$sql.sql_text
                   and rownum = 1), 1, 'Changed', 'New' ) status
 from v$sql
 where (sql_text, hash_value, plan_hash_value)
not in (select sql_text, hash_value, plan_hash_value
           from plan_hashes)
   and command_type in (
 /* DELETE */ 7,     /* INSERT */ 2,
 /* MERGE */ 189, /* SELECT */ 3,
 /* UPDATE */ 6 )
   and parsing_user_id <> 0
   and parsing_schema_id <> 0
/
 
--shared_pool中新的执行计划存入计划表
insert into plan_hashes( sql_text, hash_value, plan_hash_value )
select distinct sql_text,
       hash_value,
       plan_hash_value
 from v$sql
 where (sql_text, hash_value, plan_hash_value)
not in (select sql_text, hash_value, plan_hash_value
           from plan_hashes)
   and command_type in (
 /* DELETE */ 7,     /* INSERT */ 2,
 /* MERGE */ 189, /* SELECT */ 3,
 /* UPDATE */ 6 )
   and parsing_user_id <> 0
   and parsing_schema_id <> 0
/
 
3.       找出差异
收集了之前的历史资料,我们就能通过比对找出两者之间的差别
 
4.       每次只更改一个问题
不要多个人同时更改多个问题,也不要一个人更改多个问题,这样就无法确定到底是哪个变动解决了问题所在
 
5.       确认是否需要修改这个问题
改动一个问题之前要先确定目标,并且经过验证(小规模的基准测试是必要的)之后才能动手
 
6.       做好备份
任何改动之前都需要进行备份,使系统能够回退到改动前的状态时必须的
 
7.       建立小型的测试用例
由于系统可能会很庞大,运行起来相当复杂耗时,所以需要尽可能多的剥离不需要的代码,使用简单,明了的测试用例重现错误!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 由于ARCHIVE挂起导致数据库挂死 2 NIT文件中SGA区设置太大,导致内存不够用,数据库和系统都挂死 3 由于临时表空间无法扩展导致数据库被挂起 4由于未打补丁导致RMAN备份时将数据库挂起 5由于BLOB类型的表记录数太多操作又太频繁导致数据库效率急差 6由于未对特大表(达到或超过100万条记录)定期做表分析导致数据库操作特别慢 7由于空间不够导致插入数据时扩展索引失败 8由于REDOLOG破坏导致数据库异常 9由于控制文件被破坏导致数据库无法正常启动 10由于数据文件丢失或破坏导致数据库无法正常启动 11由于空间参数设置不合理导致扩展表空间、索引等失败 12由于时间格式的环境变量设置问题导致话单无法入库 13由于大事务未使用大回滚段导致事务挂起 14由于数据库连接数太多导致服务器进程数多或内存耗尽 15由于使用了MTS方式,导致数据库操作特别慢(包括备份) 16由于存在一个大事务操作,导致数据库性能特别差或产生频繁日志切换 17由于没有COMMIT,导致数据库表被锁住 18索引创建不合理,导致数据库查询特别慢 19 由于BUFFER参数设置不合理导致EXP失败 20由于EXP不向上兼容,语言不兼容,导致不同版本、不同字符集的数据库无法导入 21 由于创建表空间时误将其创建在以‘本地管理’,导致在表空间上的所有对象无法修改其存储参数 22 错误地在系统表空间上建无关的数据文件 23 ORACLE客户端在P4上安装不成功 24由于LISTENER.ORA或TNSNAMES.ORA配置问题导致网络问题 25由于环境变量设置问题导致VERSOIN版本启动问题 26用户数据、表破坏下的数据恢复 27 由于OS层问题导致数据库ORA-600错误 .....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值