Oracle DB, Oracle APEX, Linux etc.

пятница, 22 июня 2012 г.

Oracle APEX 4.2 EA1 ушёл в народ!

На официальной странице APEX появилась приятная новость о доступном Early Adapter (как Oracle именует публичные беты продуктов).
  1. Регистрируйтесь!
  2. Пробуйте!
  3. Пишите предложения и жалобы!
Приятных выходных! ;)
Читать далее

суббота, 12 мая 2012 г.

Oracle APEX: Мелочь, а не хватает...

Казалось бы, не так велик труд: выбрать что-то при редактировании страницы и удалить. Но будь возможность делать это сразу из всплывающего меню! При интенсивном редактировании страницы надоедает вначале заходить в редактировании того же региона, или кнопки, или поля, или... А потом уже DELETE, "Да, я согласен" и обратно к редактированию страницы.

На всякий случай добавил в APEX 4.2 Wish List.
Читать далее

суббота, 10 марта 2012 г.

Oracle APEX Listener: Файл настроек

Это небольшая заметка о файле настроек Oracle APEX Listener (OAL), развёрнутом на GlassFish 3.

По умолчанию OAL создаёт и ищет файл настроек ${java.io.tmpdir}/apex/apex-config.xml, где значение java.io.tmpdir для GlassFish установлено в /tmp. Любые временные директории — не место для хранения файлов настроек, поскольку время от времени их содержимое удаляется.

Чтобы изменить это поведение раз и навсегда, необходимо:
  1. Распаковать файл apex.war. Это обычный zip-архив, проблем с разархивацией возникнуть не должно. Например, разархивируем архив в директорию tmp:
    unzip -d tmp apex.war
  2. Изменить параметр config.dir в файле WEB-INF/web.xml. Найдём в нём следующие строки, устанавливающие значение параметра:
    <!--
      <context-param>
        <param-name>config.dir</param-name>
        <param-value>${java.io.tmpdir}/APEX</param-value>
      </context-param>
    -->
    
    Раскомментируем и заменим значение параметра:
      <context-param>
        <param-name>config.dir</param-name>
        <param-value>${user.dir}</param-value><
      </context-param>
    
    Параметр user.dir для приложения, развёрнутого на GlassFish в домен domain_1, будет иметь значение <Директория GlassFish>/glassfish/domains/domain_1/config. OAL создаст по этому пути поддиректорию apex и разместит файл настроек apex-config.xml в ней.
  3. Создать архив apex.war с изменённым файлом. Перейдём в директорию tmp и соберём архив:
    zip -r apex.war ./*

Всё, архив с приложением готов к установке.

Читать далее

среда, 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 Можно ли вернуться к предидущей строке?
Читать далее