Vim for beginners

Изучение Vim — это инвестирование.

Редакторы командной строки могут быть страшной вещью для обучения и использования новичками и Vim возможно найстрашнейший из них– хотя на самом деле не должен. В нём много чего скрыто (гораздо больше, чем будет сказано в этом руководстве) и здесь рассмотрим основы настолько, что мы могли бы по крайней мере удобно редактировать файлы. Читать далее «Vim for beginners»

Drop и Create индекса на Primary key

Появилась задача — Drop и Create индекса на Primary key (Именно такое потенциальное решение, из всех других предложенных вариантов, остаётся для Internal error ORA 600 [kdsgrp1] по рекомендации MOS)

Alter table "ARDOME"."RUNDOWN_ROW" drop primary key
Error report -
SQL Error: ORA-02273: denna UNIQUE/PRIMARY KEY refereras från några främmande nycklar
02273. 00000 - "this unique/primary key is referenced by some foreign keys"
*Cause: Self-evident.
*Action: Remove all references to the key before the key is to be dropped.

I. Давайте определим имя PK при помощи представления DBA_CONSTRAINTS:

В нашем случае это таблица RUNDOWN_ROW в схеме ARDOME.
select CONSTRAINT_NAME from DBA_CONSTRAINTS
where OWNER like 'ARDOME' and Table_name like 'RUNDOWN_ROW'
and CONSTRAINT_TYPE='P'

Типы констрейнтов:

  • C (check constraint on a table)
  • P (primary key)
  • U (unique key)
  • R (referential integrity) — он же FK, который ссылаясь мешает удалить PK
  • V (with check option, on a view)
  • O (with read only, on a view)

Немного подшаманим и увидим информацию о FK на наш PK:
select * from DBA_CONSTRAINTS
where R_CONSTRAINT_NAME in (
select CONSTRAINT_NAME from DBA_CONSTRAINTS
where OWNER like 'ARDOME' and Table_name like 'RUNDOWN_ROW' and CONSTRAINT_TYPE='P')

Читать далее «Drop и Create индекса на Primary key»

Трассировка определённого SQL. Tracing for a specific SQL.

Event 10046 — это событие является стандартным методом сбора расширенной sql_trace информации для Oraclовых сессий.
Для вопросов связанных с производительностью запросов (Query Performance) обычные требования — это записать информацию об ожиданиях и биндах переменных. Эта задача выполняется при использовании 10046 с уровнем 12 или 4 (level 12/level 4).

Для методов которые требуют уровня трассировки действительны следующие значения:
0 — Нет трейса. Как если sql_trace off.
2 — Эквивалент обычного sql_trace;
4 — То же, что и 2, но дополняется значениями забинженых переменных;
8 — То же, что и 2, но дополняется событиями ожидания;
12 — То же, что и 2, но с доп. значениями забинженых переменных и событиями ожидания (как у уровней 4 и 8, собственно 4+8=12).

В конкретном случае мне требуется узнать значение переменной B1 у запроса  10q4ut6chvak6 (выпадает ORA-00600: internal error code, arguments: [kdsgrp1] при определённых значениях):

--- Current SQL Statement for this session (sql_id=10q4ut6chvak6) ---
SELECT R.*, C.CCN_ID, C.CCN_TITLE FROM ARDOME.RUNDOWN_ROW R
LEFT OUTER JOIN ARDOME.COLLECTION C ON R.RDR_SITE_ID_STR=C.CCN_SITE_ID_STR AND C.CCN_TYPE='program' WHERE RDR_ID=:B1

Включить:
alter system set events 'sql_trace[sql: 10q4ut6chvak6] level=12';

Найти трейс можно по запросу:
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Default Trace File';

Через некоторое время в трейсе можно обнаружить то, что требовалось найти:
PARSING IN CURSOR #140038752954880 len=177 dep=1 uid=103 oct=3 lid=103 tim=1494421918938952 hv=2567809606 ad='41f2229a0' sqlid='10q4ut6chvak6'
SELECT R.*, C.CCN_ID, C.CCN_TITLE FROM ARDOME.RUNDOWN_ROW R LEFT OUTER JOIN ARDOME.COLLECTION C ON R.RDR_SITE_ID_STR=C.CCN_SITE_ID_STR AND C.CCN_TYPE='program' WHERE RDR_ID=:B1
END OF STMT
BINDS #140038752954880:
Bind#0
oacdty=02 mxl=22(21) mxlc=00 mal=00 scl=00 pre=00
oacflg=03 fl2=1206001 frm=00 csi=00 siz=24 off=0
kxsbbbfp=7f5d50211b40 bln=22 avl=11 flg=05
value=2101705100110951942

Выключить:
alter system set events 'sql_trace[sql: 10q4ut6chvak6] off';

Отследить отслеживаемые запросы можно через oradebug
SQL> oradebug setmypid
Statement processed.
SQL> oradebug eventdump session
sql_trace[sql: 10q4ut6chvak6] level=12

 

N.B. Будьте бдительны, в моём случае я поймал то, что искал:
EXEC #140534692422696:c=0,e=303,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=2,plh=2289027174,tim=1494423351664104
* kdsgrp1-1: *************************************************
row 0x02cbbaca.7 continuation at
0x02cbbaca.7 file# 11 block# 768714 slot 7 not found

и далее +72Мб дополнительной информации. При многократном получении ошибки можно быстро забить файловую систему.