wangwengwu 发表于 2018-9-14 06:44:27

Oracle ora-01555解决方法

  发现大量ORA-01555
  发现大量ORA-01555

  ORA-01555 caused by SQL statement below (SQL>
  ORA-01555 caused by SQL statement below (SQL>
  ORA-01555 caused by SQL statement below (SQL>  一般Alert日志里面发现这种,就是回滚段太小了,一般不用管,如果确实影响到业务,可以杀一些占用资源搞的回滚或查询进程。
  1.查看大事务 gv$transaction
  SQL> select inst_id,addr,used_urec,used_ublk from gv$transaction;
  SQL> select start_date,inst_id,addr,used_urec,used_ublk from gv$transaction;
  START_DATEINST_ID ADDRUSED_UREC USED_UBLK
  ----------------- ---------- ---------------- ---------- ----------
  20121019 06:08:532 07000001FCC35D0811
  20121019 07:20:152 07000001FB884A7891
  20121019 07:20:152 07000001FDF215A061
  20121019 07:20:152 07000001FDF7681891
  20121019 06:42:421 07000001FDF06398101
  20121019 07:16:531 07000001FB8A166061
  20121019 06:40:281 07000001FCC6EC3861
  20121019 07:20:151 07000001F9B42A6891
  20121019 05:13:541 07000001FDF79338 42976487 693162
  2.根据上面gv$transaction中ADDR地址与v$session中的taddr字段匹配查找sid,serial#
  SQL> select sql_child_number,
  sid,
  sql_id,last_call_et,
  blocking_session,
  blocking_instance,
  state,
  event,
  p1,
  p2,
  seconds_in_wait
  from v$session
  where
  taddr='07000001FDF79338';
  3.根据sid可以查找spid
  查询得到该session对应的OS进程号:
  SQL> select 'kill -9 '||spid from v$process where addr = (select paddr from v$session where sid=&sid);
  4.监控undo 使用情况
  CLEAR COLUMNS BREAKS COMPUTES
  COLUMN tablespace FORMAT a20HEADING 'Tablespace Name'

  COLUMN>
  COLUMN>  COLUMN status FORMAT a12HEADING 'Status'
  COLUMN pctFORMAT a8HEADING 'Used Pct'
  CLEAR COMPUTES BREAKS
  BREAK ON tablespace on report

  COMPUTE sum LABEL "Total: " OF>  select a.tablespace_name tablespace
  ,b.status    status

  ,b.bytes   >
  ,a.bytes   >  ,round(100*(b.bytes/a.bytes),2)||'%' pct
  from
  ,sum(bytes)/1024/1024 bytes
  from dba_data_files
  group by tablespace_name) a,
  ,sum(bytes)/1024/1024 bytes
  from dba_undo_extents
  group by tablespace_name,status) b
  where a.tablespace_name=b.tablespace_name
  order by 1,2;
  SQL> select tablespace_name,status,sum(bytes)/1024/1024/1024 from dba_undo_extents group by tablespace_name,status order by 1,3;
  5.可以考虑使用
  kill -9 spid
  或alter system kill session '986,16161';的方式
  6.检查会话是否已经被杀掉
  select a.sid,a.serial#,b.spid,a.status from v$session a,v$process b where a.paddr=b.addr and a.taddr='07000001FDF79338';
  7.事务回滚监控
  SQL> select * from v$fast_start_transactions;
  USN SLT SEQ STATEUNDOBLOCKSDONE UNDOBLOCKSTOTAL PID CPUTIME PARENTUSN PARENTSLT PARENTSEQ XIDPXIDRCVSERVERS
  ---------- ---------- ---------- ---------------- -------------- --------------- ---------- ---------- ---------- ---------- ---------- ---------------- ---------------- ----------
  1038 4314095 RECOVERING   50906028674200 0 000A00260041D3EF 000000000000000032
  SQL> select file_id,block_id from dba_rollback_segs where SEGMENT_ID=10;
  FILE_ID BLOCK_ID
  ---------- ----------
  2 153

页: [1]
查看完整版本: Oracle ora-01555解决方法