вторник, 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 был включен:

Работа с NLS

Зачастую при работе с разными базами клиентов приходится менять кодировку:


Для этого есть несколько вариантов, в зависимости от платформы на которой работаем.

Windows:
меняем значение в реестре:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1

Пример:
NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251
NLS_LANG=AMERICAN_AMERICA.AL32UTF8

В командной строке:

set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
set NLS_LANG=AMERICAN_AMERICA.CL8MSWIN1251

После '=' пишем язык_территорию.чарсет который нам нужен.

Linux/UNIX:

Работа с DBLINK ' ами

Просто о простом. Просмотр, Создание, Удаление.


select * from dba_db_links; --1

--1--просмотр всех доступных в БД линков. (требуются права sys)

select * from user_db_links; --1

--1--просмотр БД линков, доситупных текущему пользователю.

CREATE PUBLIC DATABASE LINK "<db_link name>" --1
CONNECT TO <username> --2
IDENTIFIED BY <pwd> --3
USING 'BASE'; --4

-- 1 -- создание ДБ линка, при указании 'PUBLIC' линк будет доступен всем юзерам.
-- 2 -- имя пользователя с которым мы подключаемся к целевой базе
-- 3 -- его пароль
-- 4 -- имя целевой БД, совпадает с TNS записью.

--Пример:

Начало.

Так уж вышло, что память не вечна, что-то забывается, что-то терятся в террабайтах документации.

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