Oracle DB, Oracle APEX, Linux etc.

четверг, 11 февраля 2010 г.

Oracle SQL Developer+Debian GNU/Linux: Нетривиальный баг

Довелось наткнуться на баг не столько самого OSD, сколько используя его. После очередного обновления пакетов Debian при попытке соединения OSD выдавал lo exception: The Network Adapter could not establish the connection - и хоть ты тресни. После поиска в сети оказалось, что это баг #560044: net.ipv6.bindv6only=1 breaks java networking. Быстрый и грязный фикс для тех, кто уже пользуется веткой testing:
sudo sed -i 's/net.ipv6.bindv6only\ =\ 1/net.ipv6.bindv6only\ =\ 0/' \
/etc/sysctl.d/bindv6only.conf && sudo invoke-rc.d procps restart


Надеюсь, Вы ещё не меняли ничего от отчаяния в tnsnames.ora и listener.ora?..
Читать далее

понедельник, 8 февраля 2010 г.

ОФФ: Снова в эфире из дома!

Наконец-то взял новую видеокарту взамен павшего смертью храбрых в борьбе с пылью старичка 8800GT. Не мудрствуя лукаво и не гоняясь с сверхпроизводительностью на FullHD-экранах, выбрал Gainward GT240 512MB GDDR5 - крепкий середнячок с маленьким энергопотреблением. Пока что всё устраивает: неслышный вентилятор, температура в простое - 30 градусов, производительность сравнима.

Моё домашняя машина снова на ходу! Ура.
Читать далее

суббота, 6 февраля 2010 г.

Oracle DB XE+APEX 3.2.1+JasperReports: Инструкция по сборке на Win32 ч.1

Предисловие



Честно говоря, надоело отношение к установке Oracle DB XE, к обновлению включённого в неё APEX до более поздних версий (в частности, 3.2.1) и к интеграции со всем этим добром хорошего и бесплатного генератора отчётов - ко всему этому как к чему-то сложному и непонятному. Можно по-разному бороться с этим уже сложившимся у некоторых мнением, лично я буду бороться с ним, используя простые примеры. Результатом должна стать инструкция по установке и простейшей настройке Oracle Database Express Edition (дальше - Oracle XE или просто XE), APEX 3.2.1 (дальше - APEX), JasperReports (дальше - JR). В качестве ОС пока будет выступать Win32, но надеюсь, что вскоре я реанимирую свою машину с Debian GNU/Linux, и появится аналогичная статья для Debian-based Linux. Поехали!

Установка XE



Если Вы не в курсе, что такое XE, то советую Вам прочитать следующий тынц: Oracle Database 10g Express Edition. Если вкратце, то это та же самая Oracle Database 10.2.0.1, но с ограничениями на размер пользовательских данных (4 ГБ), размер БД вместе с этими данными (5 ГБ), размер используемого ОЗУ (1 ГБ) и количество используемых ядер процессора (1 ядро). Кроме того, она довольно быстро и легко устанавливается и настраивается. Всё это делает её отличным кандидатом в качестве СУБД для небольших проектов и любящих экспериментировать разработчиков и АБД.

Скачать XE для Win32 можно здесь. Поскольку мы хотим хранить в БД данные с русскими символами и (я надеюсь) не хотим пользоваться недокументированным способом по смене кодировки БД после установки, то скачивать нужно Oracle Database 10g Express Edition (Universal) - тогда в качестве кодировки БД будет использоваться AL32UTF8.

После загрузки стоит прочитать руководство по установке и следовать ему. Для тех, у кого проблемы с английским, краткий перевод шагов:
  1. Войдите в систему как Администратор.
  2. Очистите переменную окружения ORACLE_HOME через Панель управления->Система.
  3. Сходите на сайт...
  4. ... и скачайте файл, который Вы уже скачали.
  5. Запустите его.
  6. Если Вы переустанавливаете XE, то появится опция Repair.
  7. Next.
  8. Accept->Next.
  9. Выбираем, куда установить->Next.
  10. При необходимости указываем порты для прослушивателя, MS Transaction Server и APEX. По умолчанию: 1521, 2030 и 8080.
  11. Вводим пароли для пользователей SYS и SYSTEM. По значимости эти пользователи БД близки к Локальному Администратору ОС и пользователю из группы Администраторов. Так что выбирайте сами сложность паролей.
  12. Install, если всё устраивает.
  13. У Вас есть работающая XE! Можете создавать пользователей и работать. При желании, можете зайти на домашнюю страницу БД. Приложение хорошее, но одна проблема: с обновлением APEX до 3-ей версии это приложение со всеми его прелестями администрирования пропадёт. И нам понадобится что-нибудь для работы с БД, помимо SQL Workshop->SQL Commands. Так что я предлагаю следующее...


Oracle SQL Developer



Довольно неплохое бесплатное средство разработки, администрирования и вообще общения с Oracle DB. Oracle SQL Developer может подключаться и к другим СУБД, но нас пока интересует исключительно наша XE. Домашняя страница проекта - здесь. Скачать последнюю версию можно здесь (на текущий момент это версия 2.1). Для начинающих есть пошаговое обучение. Интерфейс дружественный, в чём-то интуитивный, в чём-то - нет. Трудностей при работе возникнуть не должно, если время от времени заглядывать в Help.

Oracle APEX 3.2.1



После установки XE у Вас уже будет APEX, но почему бы не обновить его до последней версии (на данный момент это версия 3.2.1)? Многие считают, что это сложно. Попробую разубедить.

Домашняя страница APEX находится здесь. Загрузим последнюю доступную версию отсюда. Вообще-то, всё отлично получается при использовании руководства по установке. Но я попробую дать пошаговую простую инструкцию по обновлению:
  1. Скачайте архив с APEX и распакуйте их в каталог C:\tmp.
  2. Запустите cmd: Win+R->cmd. Выполните:
    cd c:\tmp\apex
    sqlplus "sys/syspass as sysdba" @apexins SYSAUX SYSAUX TEMP /i/
    

    Начнётся установка и обновление APEX. Можно сходить попить кофе или ещё как-нибудь провести минут 10-15 времени.
  3. Меняем пароль у администратора APEX:
    sqlplus "sys/syspass as sysdba" @apxchpwd
    

  4. Не выходя из SQL*Plus, настраиваем Embedded PL/SQL Gateway:
    @apex_epg_config c:\tmp

  5. Там же разблокируем пользователя ANONYMOUS, под которым APEX работает с БД...
    alter user anonymous account unlock;

  6. ... установим явно http-порт для XML DB...
    EXEC DBMS_XDB.SETHTTPPORT(8080);

  7. ... и разрешим анонимный доступ к файлам в XML DB.
    SET SERVEROUTPUT ON
    DECLARE
    l_configxml XMLTYPE;
    l_value VARCHAR2(5) := 'true'; -- (true/false)
    BEGIN
    l_configxml := DBMS_XDB.cfg_get();
    
    IF l_configxml.existsNode('/xdbconfig/sysconfig/protocolconfig/httpconfig/allow-repository-anonymous-access') = 0 THEN
    -- Add missing element.
    SELECT insertChildXML
    (
    l_configxml,
    '/xdbconfig/sysconfig/protocolconfig/httpconfig',
    'allow-repository-anonymous-access',
    XMLType('' ||
    l_value ||
    ''),
    'xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"'
    )
    INTO l_configxml
    FROM dual;
    
    DBMS_OUTPUT.put_line('Element inserted.');
    ELSE
    -- Update existing element.
    SELECT updateXML
    (
    DBMS_XDB.cfg_get(),
    '/xdbconfig/sysconfig/protocolconfig/httpconfig/allow-repository-anonymous-access/text()',
    l_value,
    'xmlns="http://xmlns.oracle.com/xdb/xdbconfig.xsd"'
    )
    INTO l_configxml
    FROM dual;
    
    DBMS_OUTPUT.put_line('Element updated.');
    END IF;
    
    DBMS_XDB.cfg_update(l_configxml);
    DBMS_XDB.cfg_refresh;
    END;
    /
    
    Element updated.

  8. Кроме того, можно открыть удалённый HTTP-доступ:
    exec dbms_xdb.setListenerLocalAccess(l_access => FALSE);

    Чтобы его убрать, достаточно выполнить тот же код, используя в качестве параметра TRUE.


Всё, вы можете заходить на страницу администрирования (http://127.0.0.1:8080/apex/apex_admin), создавать рабочее пространство и администратора для него, потом заходить администратором рабочего пространства в обновлённый APEX (http://127.0.0.1:8080/apex) и добавлять разработчиков и пользователей, потом разработчики могут приниматься за дело... Всё как и должно быть.

В качестве замены встроенного приложения для администрирования в XE можно прочитать здесь список основных задач и способы их выполнения.

О JasperReports и их установке поговорим в следующей части.

Читать далее

среда, 27 января 2010 г.

Link Dump для разработчика Oracle APEX

Предыстория: множество появляющихся вопросов в этом форуме по Oracle APEX просто вынудили меня собрать несколько полезных ссылок для тех, кто вообще никогда не имел дело с Oracle Database, но неожиданно решил освоить разработку приложений Oracle APEX.

Возможно, для кого-то это станет открытием, но для того, чтобы разрабатывать, используя Oracle APEX, нужно знать Oracle SQL и PL/SQL хотя бы в пределах синтаксиса и основных функций. Мне кажется, это неправильно - разрабатывать приложения "наугад". Потому, господа и дамы, настоятельно рекомендую для прочтения и освоения:
  1. Oracle® Database SQL Reference и/или "Секреты Oracle SQL", Санжей Мишра, Алан Бьюли. Это поможет Вам избежать множества вопросов по SQL.

  2. Oracle® Database PL/SQL User's Guide and Reference и/или "Oracle PL/SQL для профессионалов", Стивен Фейерштейн, Билл Прибыл. Это поможет Вам избежать множества вопросов по PL/SQL.

  3. Oracle® Database 2 Day + Application Express Developer's Guide и Oracle® Application Express Advanced Tutorials. Это поможет Вам избежать множества вопросов по APEX и даст массу практического опыта. В принципе, здесь Вы можете остановиться, но если Вам стало интересно...

  4. Oracle® Database Application Developer's Guide - Fundamentals. Это снабдит Вас информацией о множестве способов разработки приложений, использующих Oracle Database.

  5. Ну, и помимо всего прочего, почитывайте Concepts, дядю Тома (1, 2, 3, 4) и другие источники, если Вам интересно, как всё это в принципе работает.


Всего!

PS: Хочу заметить, что упоминание вышеуказанных материалов ни в коей мере не является рекламой. Это просто ссылки на информацию, которую я считаю полезной.

Читать далее

воскресенье, 10 января 2010 г.

APEX: Описание новых возможностей версии 4.0

Я не буду растекаться мыслию по древу, потому что всё уже сделано до меня. Вместо этого я дам ссылку на довольно полезное приложение с описанием новых возможностей APEX 4.0, написанное на APEX 4.0: APEX 4.0 New Feature Descriptions.

Успехов!

PS: Мне кажется, или здесь действительно слишком часто звучит "APEX 4.0"?.. :)
Читать далее

суббота, 19 декабря 2009 г.

Oracle APEX: 4.0 Early Adopter Now!

Ну, кто ещё не слышал, для тех новость: попробовать APEX 4.0 можно уже сейчас - http://tryapexnow.com/.

Всем приятного тестирования!
Читать далее

четверг, 3 декабря 2009 г.

Oracle DB 11gR2: New features, new bugs...

Недавно наткнулся на новоприобретённый баг, появившийся в Oracle DB 11.2.0.1: MERGE позволяет обходить ограничения-проверки (CHECK CONSTRAINTS), изменяя данные.

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

drop table test_merge;

create table test_merge as select 1 m, 2 n from dual;

alter table test_merge add constraint test_merge_chk check (m <= n);

update test_merge set n = m - 1;

rollback;

select * from test_merge;

merge into test_merge tgt
using (select m, m-1 n from test_merge) src
on (tgt.m = src.m)
when matched then update set tgt.n = src.n;

commit;

select * from test_merge;


И вот результат:


Таблица создана.


Таблица изменена.

update test_merge set n = m - 1
*
ошибка в строке 1:
ORA-02290: нарушено ограничение целостности CHECK(XXX.TEST_MERGE_CHK)



Откат завершен.


M N
---------- ----------
1 2


1 строка объединена.


Фиксация обновлений завершена.


M N
---------- ----------
1 0


Как оказалось, этот баг не проявляется, если указать ветку WHEN NOT MATCHED в операторе MERGE. Так что обход бага в случае, когда нужно только обновить данные, но не вставлять новые, прост:
merge into test_merge tgt 
using (select m, m-1 n from test_merge) src
on (tgt.m = src.m)
when matched then update set tgt.n = src.n
when not matched then insert (m) values(null) where 1 = 0;

Главное, чтобы никто не "соптимизировал" этот MERGE, удалив "лишнюю" ветку. ;)

Читать далее