вторник, 24 февраля 2015 г.

Поиск блокировок.

Смотрим ожидания сессий:

select s.username, w.event, s.sid, s.blocking_session,s2.module,s2.action
  from v$session_wait w, v$session s, v$session s2
 where w.sid = s.sid
   and s.blocking_session is not null
   and s.blocking_session =s2.sid
 order by w.event,s.sid;

Смотрим кто-кого ждет:

SELECT /*+ rule*/ DECODE(a.request,0,'Holder: ','Waiter: ')||a.sid sess, 
a.id1, a.id2, a.lmode, a.request, a.type,b.action,b.program,b.module
FROM V$LOCK a,v$session b
WHERE (a.id1, a.id2, a.type) IN
      (SELECT id1, id2, type FROM V$LOCK WHERE request>0) and a.sid=b.sid
ORDER BY id1, request ;

Советы по вычислению UNDO.

UNDO_RETENTION по существующему UNDO-tablespace.


Необходимое оптимальное значение "undo_retention" вычисляется по формуле:
Optimal Undo Retention = Actual Undo Size / (DB_BLOCK_SIZE ? UNDO_BLOCK_REP_ESC)

Получить это значение можно выполнив следующий запрос (внимание на "OPTIMAL UNDO RETENTION [Sec]"):

Switchover-Failover

--FAILOVER:--

recover managed standby database cancel;
shutdown immediate
startup nomount
alter database mount standby database;
recover standby database until cancel;
cancel
alter database activate standby database;


--Switchover Method:--

Смотрим sql_plan

Разработчикам часто требуется видеть план запроса для оптимизации кода.
Если нужно посмотреть план, по которому идет запрос:

select * from v$sql_plan where sql_id='<№>'; 

sql_id смотрим так:

select username,sql_id from v$session where username='имя пользователя выполняющего запрос';

Надо так же понимать, что план запроса строится перед выполнением запроса.
В зависимости от нагрузки на базу и ресурсов в разное время у одного запроса могут быть разные планы.

Находим сессию с ожиданиями pipe put

select w.SID,w.EVENT,x.kglnaobj "Pipe name" from v$session_wait w, x$kglob x where x.kglhdnsp=7 and x.kglobsta != 0 and x.kglhdpar=w.p1raw and w.EVENT='pipe put';



Сообщение об ошибке ORA-01555

Вся статья выкладывается "Как есть" без изменений слов автора.

Уважаемые подписчики! Этот выпуск посвящен "знаменитому" сообщению об ошибке ORA-1555: snapshot too old. Как обычно, по мотивам Тома Кайта...


Snapshot too old


Снятие AWR отчета



Выключение/включение AWR:

SQL> exec dbms_awr.disable_awr

PL/SQL procedure successfully completed.

SQL> select dbms_awr.awr_status from dual;

AWR_STATUS
-------------------------------------------------------
DISABLED

SQL> exec dbms_awr.enable_awr

PL/SQL procedure successfully completed.

SQL> select dbms_awr.awr_status from dual;

AWR_STATUS
-------------------------------------------------------
ENABLED


Как снять AWR отчет, если AWR был включен: