четвер, 26 лютого 2015 р.

CONSTRAINT Enable Novalidate

Используется для установки ограничений на поля без проверки содержимого в них. Пример: есть поле с ограничением NULLABLE = TRUE, в данном поле есть как NULL, так и заполненные значения. Захотели поменять ограничение на NULLABLE = FALSE:

alter table tbl modify test not null

Выдает ошибку, что в колонке есть NULL значения.
Для обхода ошибки используем Enable Novalidate:

alter table tbl modify test not null enable novalidate

неділя, 15 лютого 2015 р.

Сменить пароль для SYS

При установке Oracle 11g забыл установить пароль для SYS и SYSTEM.
Вот так сменил:
  1. Зашел в cmd
  2. sqlplus / as sysdba;  
  3. alter user SYS identified by newpassword;

понеділок, 9 лютого 2015 р.

Индексы и функции по индексным полям

Стандартная ситуация: выборка данных на дату с использованием trunc в условии. Поле с датой проиндексировано – данные должны получаться быстро, НО:
План запроса:

Тот же запрос, немного переделанный – на выходе те же данные, но:
План:

Почему так происходит? – Когда используем любую функцию по проиндексированной колонке – индекс не работает.
Варианты решения :
1 – использовать between
2 – сделать индекс для функции trunc(«поле с датой»). Вот результаты:
- без индекса по функции trunc:

- с индексом по функции:

CPU cost уменьшилось в 1789 раз
Cost – в 30 раз
IO Cost – в 26 раз

субота, 7 лютого 2015 р.

При возникновении ошибки COM Surrogate Error

У меня после переустановки Винды возникла данная ошибка при просмотре фотографий.
Решения:
- DEP for dllhost.exe;
- Выполнить команды regsvr32 vbscript.dll regsvr32 jscript.dl
Не помогли
Мне помогло:
Удалить драйвера на Intel HD Graphics 4000
 

четвер, 5 лютого 2015 р.

Кто последний делал изменения в пакете PL/SQL

SELECT t.* FROM sys.user_audit_object t
where t.OBJ_NAME like 'PKG_%'

Локи

Запрос:

select s.USERNAME Locking_Username, s.STATUS Locking_Sid_Status, l.*
from (SELECT
       lh.inst_id Locking_Inst, lh.sid Locking_Sid, lw.CTIME Time_Waited, lw.inst_id Waiting_Inst, lw.sid Waiter_Sid,
       decode(lh.type,
              'MR', 'Media_recovery',       'RT', 'Redo_thread',        'UN', 'User_name',            'TX', 'Transaction',
              'TM', 'Dml',                  'UL', 'PLSQL User_lock',    'DX', 'Distrted_Transaxion',  'CF', 'Control_file',
              'IS', 'Instance_state',       'FS', 'File_set',           'IR', 'Instance_recovery',    'ST', 'Diskspace Transaction',
              'IV', 'Libcache_invalidation','LS', 'LogStaartORswitch',  'RW', 'Row_wait',                    'SQ', 'Sequence_no',
              'TE', 'Extend_table',                'TT', 'Temp_table',
              'Nothing-') Waiter_Lock_Type,
       decode(lw.request,
              0,    'None',                 1,    'NoLock',              2,    'Row-Share',            3,    'Row-Exclusive',
              4,    'Share-Table',          5,    'Share-Row-Exclusive', 6,    'Exclusive',
              'Nothing-') Waiter_Mode_Req
      FROM gv$lock lw, gv$lock lh
      WHERE lh.id1 = lw.id1 AND lh.id2 = lw.id2  AND lh.request = 0  AND lw.lmode = 0
            AND (lh.id1, lh.id2) In(SELECT id1, id2 FROM gv$lock WHERE request = 0
                                    INTERSECT
                                    SELECT id1, id2 FROM gv$lock WHERE lmode = 0)
     ) l, gv$session s
   where s.SID=l.Locking_Sid and s.inst_id=l.Locking_Inst
  order by l.Time_Waited desc

вівторок, 3 лютого 2015 р.

Тесты

Для тренировки и наглядного соединения создадим таблицы с одним полем:

with 
t as 
(
select 1 as a from dual
union all
select 2 from dual
)
,
t1 as 
(
select 2 as a from dual
union all
select 3 from dual
union all
select 4 from dual
)

Если просто выполнить запрос - ничего не будет. Надо делать выполнять вместе с Select:
select  * from t , t1
____________
t.a     t1.a
1 2
1  3
1  4
2  2
2  3
2  4

  • select  * from t , t1 where t.a = t1.a(+);
Все равно, что:
select  * from t LEFT JOIN t1 on t.a = t1.a
____________
t.a     t1.a
2  2
1



  • select  * from t FULL OUTER JOIN t1 on t.a = t1.a

____________
t.a     t1.a

2  2
  3
  4
1

  • select  * from t INNER JOIN t1 on t.a = t1.a
____________
t.a     t1.a
2  2




Добавление/ отнимание времени:

select to_char(sysdate,'dd.mm.yyyy hh24:mi:ss') as now,

/*добавляем минуты и секунды*/
to_char(sysdate+INTERVAL '1:2' MINUTE TO SECOND,'dd.mm.yyyy hh24:mi:ss') as addTime, 

/*добавляем минуты*/
to_char(sysdate+INTERVAL '10' MINUTE,'dd.mm.yyyy hh24:mi:ss') as addMinutes,

/*добавляем часы*/
to_char(sysdate+INTERVAL '2' HOUR ,'dd.mm.yyyy hh24:mi:ss') as addHour, 

/*добавляем дни*/
to_char(sysdate+INTERVAL '4' DAY,'dd.mm.yyyy hh24:mi:ss') as addDay   

from dual 
Перевод строки в Oracle выполняется лишь chr(10)

Деление на 0 в SQL


select 1 from dual where exists (select 1/0 from dual)