oralce归档,死锁,阵列问题处理
oralce归档,死锁,阵列问题处理(个人经验,仅供参考)
归档问题:登录数据库报错:ORA-00257 归档程序错误,在释放之前仅限于内部连接。
处 理:
第一种就是关闭闪回日志的功能 alter database flashback off
第二种方法就是增大闪回日志文件的最大大小。 alter system set DB_RECOVERY_FILE_DEST_SIZE=10g,去查看v$flash_recovery_area_usage视图中的使用率情况这个时候发现使用率(PERCENT_SPACE_USED列的值)已经大大降低了。查看系统日志文件情况。select * from v$log会发现现在redo日志文件也可以正常写入。
第三种方法 删除归档空间种的dbf数据文件
1、删除部分归档
2、修改归档备份策略为oracle类型
3、在rman里面,连接目标和恢复目录数据库,执行:crosscheck archivelog all;
4、执行归档备份,检查备份结果。
死锁问题:所有对数据库某些表的更新操作,报错:资源正忙,请制定wait后执行。
处 理:
1.查看系统死锁情况
select /*+ RULE */ ls.osuser os_user_name, ls.username user_name,
decode(ls.type, 'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock', 'TX',
'Transaction enqueue lock', 'UL', 'User supplied lock') lock_type,
o.object_name object, decode(ls.lmode, 1, null, 2, 'Row Share', 3,
'Row Exclusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive', null)
lock_mode, o.owner, ls.sid, ls.serial# serial_num, ls.id1, ls.id2
from sys.dba_objects o, ( select s.osuser, s.username, l.type,
l.lmode, s.sid, s.serial#, l.id1, l.id2 from v$session s,
v$lock l where s.sid = l.sid ) ls where o.object_id = ls.id1 and o.owner
<> 'SYS' order by o.owner, o.object_name
2.释放被锁的资源,此语句直接生成kill锁的sql,把结果直接放到pl/sql或者sqlplus中批量执行就可以了。
select 'alter system kill session '''||l.session_id||','||d.serial#||''';'
from v$locked_object l, dba_objects b,v$lock c, v$session d
where b.object_id=l.object_id
and l.session_id=c.sid and l.session_id=d.sid and c.block>0;
阵列问题:对于任何对于数据库的操作报错:Transaction is already completed - do not call commit or rollback more than once per transaction
处 理:
1.使用top检查操作系统iowait情况,如果iowait大于30说明阵列的读写出现严重瓶颈,需要在阵列找原因。
2.使用 iostat -xn 3 检查对阵列的读写状况
avg-cpu: %user %nice %sys %idle
0.46 0.00 0.53 99.01
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/cciss/c0d0
0.22 3.04 0.15 1.31 2.92 34.79 1.46 17.39 25.93 0.06 4.12 2.54 0.37
/dev/cciss/c0d0p1
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 4.08 0.00 188.22 141.68 0.00
&nbs