Oracle DB, Oracle APEX, Linux etc.

среда, 18 января 2012 г.

Oracle SQL Developer: проблема с горячими клавишами

Предыстория: Не так давно обновил Debian на домашней машине до testing, из-за чего встретился с Gnome 3. Если бы у меня был планшет, наверно, всё было по-другому, однако для настольных ПК это DE недружелюбно. Итогом встречи стал переход на XFCE 4.8, который устроил практически всем. Но...

Проблема: Oracle SQL Developer отказался распознавать текстовые символы с включёнными модификаторами Alt, Ctrl и любыми их комбинациями. То есть, о горячих клавишах можно было забыть.

Причина: Разброд и шатание в настройках клавиатуры.

Ход мыслей: Поначалу я подумал на баги очередного EA, как раз обновил Oracle SQL Developer. Но откат на стабильную версию и удаление настроек (с созданием резервной копии, конечно) ситуацию не изменили. Пришлось внимательнее почитать Сеть. Несколько тем с похожими проблемами натолкнули на мысль, что что-то не так с настройками клавиатуры. И я начал читать про раскладки, X.org, XFCE, udev, evdev и грабли, на которые уже наткнулось прогрессивное человечество.

Развитие X.org server, вначале отказавшегося от хранения настроек в xorg.conf в пользу HAL, а затем — и от HAL в пользу udev, evdev и задания настроек несколькими файлами через /etc/X11/xorg.conf.d, вынудило меня убрать развёвшийся в xorg.conf бардак. Я убрал секции InputDevice для мышки и клавиатуры, убрал ссылки на них в секции ServerLayout. Cоздал файл /etc/X11/xorg.conf.d/99-keyboard.conf, который задаёт для класса устройств типа Keyboard со строкой keyboard в названии драйвер, модель, раскладки и опции:

Section "InputClass"
  Identifier "evdev keyboard catchall"
  MatchIsKeyboard "on"
  MatchDevicePath "/dev/input/event*"
  MatchProduct "keyboard"
  Driver "evdev"
  Option "XkbModel" "logicd"
  Option "XkbRules" "xorg"
  Option "XkbLayout" "us,ru"
  Option "XkbVariant" ",winkeys"
  Option "XkbOptions" "grp:caps_toggle,compose:rwin,terminate:ctrl_alt_bksp"
EndSection

Также, перезагружая иксы и проглядывая раз за разом /var/log/Xorg.0.log, я удалил не поддерживаемые расширения и модули, ненужные видеорежимы и прочий мусор. В /etc/default/keyboard были внесены те же правила для клавиатуры. Однако setxkbmap -print -verbose 10 показывал совсем не то. Оказалось, что xfce4-xkb-plugin отчего-то переопределяет системные настройки, не смотря на соответствующую опцию. За что и был заменён на xxkb.

Итог: Oracle SQL Developer снова работает с горячими клавишами, в настройке устройств ввода наведён небольшой порядок, место индикатора раскладок занял xxkb.

Читать далее

суббота, 31 декабря 2011 г.

НГ-2012

Желаю в наступающем Новом году счастья, здоровья, достаточно воображения для задумок и достаточно сил для их воплощения!
Читать далее

среда, 12 октября 2011 г.

Oracle: ORA-00600 [16305] + ORA-03113 при открытии БД

Обновил в очередной раз Debian на своей домашней машине, запускаю экземпляр Oracle - и что я вижу? ORA-03113 в консоли + ORA-00600 [16305] в alert.log. Порыскав немного по OTN Forums и MOS и попутно заглядывая в трассу PMON, наткнулся на Doc ID 466056.1. Проверяя кэйс, выполнил ifconfig - а в выводе нет работающего loopback-интерфейса. В общем, для решения проблемы было достаточно его поднять:
sudo ifup lo
И можно смело запускать экземпляр.
Читать далее

Oracle: V$SESSION_LONGOPS и несколько одновременных длинных операций

Для того, чтобы отразить в V$SESSION_LONGOPS состояние нескольких одновременных длительных операций - например, общее выполнение процесса и конкретный большой шаг - нужно сохранять значение параметра slno процедуры DBMS_APPLICATION_INFO.set_session_longops. Используя затем пару значений (rindex,slno), можно менять необходимую строку в V$SESSION_LONGOPS. Вот пример работы с двумя длительными операциями:
declare
  first_row pls_integer := dbms_application_info.set_session_longops_nohint;
  second_row pls_integer := dbms_application_info.set_session_longops_nohint;
  slno1 pls_integer;
  slno2 pls_integer;
begin
  dbms_application_info.set_session_longops(rindex => first_row
                                            ,slno => slno1
                                            ,op_name => '1_op'
                                            ,sofar => 1
                                            ,totalwork => 2
                                            ,units => 'step'
                                           );
  dbms_application_info.set_session_longops(rindex => second_row
                                            ,slno => slno2
                                            ,op_name => '2_op'
                                            ,sofar => 1
                                            ,totalwork => 1
                                            ,units => 'step'
                                           );
  dbms_application_info.set_session_longops(rindex => first_row
                                            ,slno => slno1
                                            ,op_name => '1_op'
                                            ,sofar => 2
                                            ,totalwork => 2
                                            ,units => 'step'
                                           );
 
end;
/

select MESSAGE from v$session_longops where (sid,serial#) =
(select sid,serial# from v$session where audsid = USERENV('SESSIONID'));
Тема на SQL.RU: set_session_longops Можно ли вернуться к предидущей строке?
Читать далее

пятница, 5 августа 2011 г.

Oracle APEX: Процедуры в URL - Z

Последняя из "маленьких" встроенных процедур APEX, которые можно использовать в URL: Z.

Эта процедура используется для подсчёта кликов по ссылкам. Обёрткой вокруг неё является APEX_UTIL.COUNT_CLICK, поэтому можно смело ориентироваться на документацию, меняя в примерах APEX_UTIL.COUNT_CLICK на Z. У Z есть следующие параметры:

  • p_url — URL, к которому необходимо перейти.
  • p_cat — категория, к которой Z причисляет клик.
  • p_id — вторичный числовой идентификатор клика. ID приложения, номер страницы — всё то, что поможет Вам в дальнейшем выделить именно эти клики из остальных.
  • p_user — пользователь, который сделал клик.
  • p_company, p_workspace — ID рабочего пространства. Если p_company пустое, то используется p_workspace. Если оба эти параметра пустые, то Z не сохраняет информацию о клике, а просто перенаправляет на p_url.

Пример URL с этой процедурой:

z?p_url=w3.org&p_cat=w3c&p_company=&WORKSPACE_ID.

Информацию, собранную Z, можно просмотреть в представлении APEX_WORKSPACE_CLICKS.


Сообщения по теме:
Oracle APEX: Процедуры в URL - F
Oracle APEX: Процедуры в URL - P

Читать далее

четверг, 4 августа 2011 г.

Oracle APEX: Процедуры в URL - P

Ещё одна используемая при создании URL процедура: P.

Она не завраплена, так что её код можно легко увидеть:

create or replace
procedure p (
    n       in varchar2 default null,
    p_mime_type in varchar2 default null,
    p_inline    in varchar2 default 'NO')

-- Copyright (c) Oracle Corporation 2001. All Rights Reserved.
--
--    DESCRIPTION
--      View a page given a page ID
--
--    SECURITY
--      Public shortcut
--
--    NOTES
--
--    EXAMPLES:
--

is
begin
     if n is null then
         htp.p(wwv_flow_lang.system_message('p.valid_page_err'));
         return;
     end if;
     --
     wwv_flow_file_mgr.get_file (
        p_id => n,
        p_mime_type => p_mime_type,
        p_inline => p_inline);
end p;

P используется, чтобы скачать загруженные файлы, которые можно найти в представлении APEX_APPLICATION_FILES (aka WWV_FLOW_FILES, построено на таблице FLOW_FILES.WWV_FLOW_FILE_OBJECTS$). У этой процедуры не так много параметров:
  • n — ID файла, который необходимо скачать.
  • p_mime_type — устаревший параметр для указания MIME-типа файла. Сейчас информация берётся из соответствующих столбцов записи в APEX_APPLICATION_FILES.
  • p_inlineNO, чтобы предложить пользователю скачать файл; YES, чтобы браузер отобразил его.
Пример относительного URL для скачивания файла с ID=1234567891011:
p?n=123456789101112&p_inline=NO


Сообщения по теме:
Oracle APEX: Процедуры в URL - F
Oracle APEX: Процедуры в URL - Z

Читать далее

среда, 20 июля 2011 г.

Oracle APEX: Процедуры в URL - F

В APEX переход по страницам приложения - это обращение к процедурам. И одной из самых используемых процедур является F. Чтобы увидеть её, можно просто почаще смотреть в строку адреса во время работы с APEX. Там обнаружится что-то вроде такого:

http://work:8080/apex/f?p=4000:1500:434361572702804:::::

С помощью этой процедуры можно создавать ссылки к различным страницам приложений APEX. Я не буду здесь повторять раздел документации Oracle® Application Express Application Builder User's Guide: 2 Application Builder Concepts - Understanding URL Syntax. По крайней мере, ту его часть, которая описывает структуру значений параметра P. Давайте лучше поговорим о том, что упоминается не так часто.

Итак, F - это своеобразная обёртка для WWV_FLOW.SHOW (aka APEX_APPLICATION.FLOW). В этой процедуре устанавливаются различные глобальные переменные, использующиеся для отображения страницы, параметр P разбирается на составляющие, которые передаются в APEX_APPLICATION.FLOW.

Кроме параметра P у процедуры F есть ещё параметры. Часть из них описана в документации, часть можно увидеть в URL при работе с приложениями. Вот неполный список:

  • p_sep - разделитель, который используется, чтобы разбить значение параметра P в PL/SQL-коллекцию.
  • p_trace - если равен "YES", apex_application.show будет создавать трассировочный файл. Подробнее в документации: Enabling SQL Tracing and Using TKPROF.
  • c - workspace_id или название (workspace) рабочего пространства из apex_workspaces. По значению этого параметра выбирается и устанавливается группа безопасности (aka security group ID). Это понадобится, к примеру, при вызове страниц приложения с тем же псевдонимом в другом рабочем пространстве. Упоминается в документации: Calling a Page Using an Application and Page Alias.
  • cs - контрольная сумма, которой проверяются значения параметров. Первый символ - тип кинтрольной суммы, остальная строка - собственно контрольная сумма.
  • success_msg - текст для отображения сообщения об успешном выполнении.
  • notification_msg - текст для отображения уведомления.
  • tz, p_lang, p_territory - NLS-параметры: временная зона, язык и территория. Значением p_lang можно менять язык сессии, который используется при переводе приложения с настройкой Application Language Derived From = Session.

Сообщения по теме:
Oracle APEX: Процедуры в URL - P
Oracle APEX: Процедуры в URL - Z

Читать далее