пятница, 29 мая 2009 г.

Установка Oracle Instant Client в Debian. Ссылка

По роду своих занятий, часто приходится работать с Oracle с Debian машин. Как-то я уже немного вскольз рассказывал, как установить Oracle Instant Client (см. Компиляция TOra в Debian).
Но сегодня мне подкинули ссылочку на замечательную статью, где описывается аж целых два способа установки Oracle Instant Client. Понравилось: подробно расписано для чего это нужно и как выполнять установку. Рекомендую - Установка Oracle Instant Client в Debian / Ubuntu

Подробнее...

пятница, 24 апреля 2009 г.

Понимание формата URL в Application Express. Часть 2.

Продолжение поста "Понимание формата URL в Application Express. Часть 1."

Вызов страницы, используя синонимы приложения и страницы
Синоним для приложения или страницы не может содержать пробелов и не чувствительный к регистру. Ниже приведен пример запроса к странице, в котором используются синонимы страницы и приложения. Выполняется запрос к странице "home" приложения "myapp", используя текущую сессию:
f?p=myapp:home:&APP_SESSION.
где:


  • myapp - синоним для приложения

  • home - синоним для страницы

  • APP_SESSION - идентифифкатор сессии


Синоним приложения должен быть уникален в рамках рабочей области (workspace). Если приложения, располагающиеся в разнызх рабочих областях, имеют одинаковые синонимы, необходимо использовать "&c" аргумент, чтобы указать имя рабочей области. Например:
f?p=common_alias:home:&APP_SESSION.&c=WORKSPACE_A

Использование 0 вместо Session Id
Если страница APEX-приложения является обще доступной и не требует аутентификации, можно использовать "0" вместо идентификатора сессии.

При запросе страницы, в URL которой стоит 0 вместо session id, Application Express присваивает новый session id и отсылает его вместе с cookie обратно браузеру.
Таким образом, просматривая обще доступные страницы, можно видеть, что все генерируемые ссылки на обще доступные страницы будут содержать "0" в качестве session id. Однако, на самом деле Application Express будет использовать session id из cookie, чтобы переменные приложения были в актуальном состоянии.

Эта фича полезна, когда необходимо спрятать настоящий идентификатор сессии (session id). Это бывает полезно как минимум в двух случаях:

  • Создание закладок пользователями. Нет необходимости сохранять номер сессии в ссылке закладки.

  • Поисковые системы. Номер сессии будет недоступен для ботов поисковых систем. Естевственным следствие этого будет ликвидация дублирования контента в поисковых системах, так как при каждом обращении бота поисковой системы на одну и ту же страницу, будет гарантированно получен один и тот же URL.


Основы строк подстановки (Substitution Strings)
Строки подстановки можно использовать в шаблонах страниц или в регионах для того, чтобы заменить символьную строку каким-либо значением.
В Application Builder можно использовать строки подстановки следующим образом:

Подробнее...

среда, 1 апреля 2009 г.

Понимание формата URL в Application Express. Часть 1.

URL, которые отображаются для каждой страницы, однозначно определяют:

  • Адрес Application Express

  • Идентификатор приложения (application ID) - уникальное число, однозначно идентифицирующее приложение. Уникален в рамках рабочей области (workspace)

  • Номер страницы (page number) - число, однозначно идентифицирующее страницу в приложении. Уникально в рамках приложения.

  • Идентификатор сессии (session ID)

Приложения и страницы могут иметь символьные псевдонимы (alphanumeric aliases).Так же, как и идентификаторы приложений и страниц, псевдоним приложения уникален в рамках рабочей области (workspace), а псевдоним страницы уникален в рамках приложения.

При запуске приложения Application Express генерирует идентификатор сессии, который является ключем для доступа к значениям переменных приложения.

Понимание URL для страниц


Все очень просто. Достаточно рассмотреть пример:
http://apex.oracle.com/pls/apex/f?p=4350:1:220883407765693447
где:

  • apex.oracle.com - адрес сервера

  • pls - признак использования mod_plsql

  • apex - название дескриптора доступа к БД (DAD). DAD описывает, как HTTP-сервер соединяется с сервером БД, чтобы обработать HTTP-запрос. Значение по умолчанию - apex.

  • f?p= - префикс, используемый Oracle Application Express

  • 4350 - вызываемое приложение (application ID)

  • 1 - вызываемая страницы приложения(page number)

  • 220883407765693447 - идентификатор сессии(session ID)


Использование синтаксиса "f?p"


Для создания переходов между страницами можно использовать следующий синтаксис:

f?p=App:Page:Session:Request:Debug:ClearCache:itemNames:itemValues:PrinterFriendly


Синтаксис Описание
AppИдентификатор (application ID) или символьный псевдоним (alias) приложения
PageНомер (page number) или символьный псевдоним (alias) страницы
SessionИдентификатор сессии (session ID). Идентификатор сесси имеет смысл указывать в том случае, если создается ссылка на страницу, в которой необходимо использовать теже переменные, что и в текущей странице. Получить значение идентификатор текущей сессии можно следующими способами:

  • Строка подстановки: "&SESSION."
  • PL/SQL: "V('SESSION')"
  • Bind переменная: ":APP_SESSION"
RequestВыставляется при нажатии кнопки на странице приложения. Заполняется именем нажатой кнопки. Получить значение можно следующими способами:
  • Строка подстановки: "&REQUEST."
  • PL/SQL: "V('REQUEST')"
  • Bind переменная: ":REQUEST"
DebugОтвечает за вывод отладочной информации при обработке страницы. Допустимые значения: "NO", "YES". Получить значение можно следующими способами:
  • Строка подстановки: "&DEBUG."
  • PL/SQL: "V('DEBUG')"
  • Bind переменная: ":DEBUG"
ClearCacheОчищает кэш. Выставляет значение указанных переменных в NULL. Пример: f?p=100:5:&APP_SESSION.::NO:THE_EMPNO,THE_DEPTNO Очищает кэш переменных THE_EMPNO и THE_DEPTNO.
Ключевое слово "RP" вызывает сброс навигации (region pagination) на странице. Например:
f?p=6000:6003:&APP_SESSION.::NO:RP,6004,6014
Очищает состояние всех переменных на страницах 6004 и 6014. Сбрасывает состояние навигации (region pagination -RP) на странице 6003.
Ключевое слово "APP" вызывает сброс кэша во всем приложении.
Ключевое слово "SESSION" работает аналогично ключевому слову "APP", за исключением того, что очищает значение переменных, связанных со всеми приложениями, которые были использованы в рамках заданной сессии.
itemNamesСписок переменных через запятую, для которых необходимо выставить значение.
itemValuesСписок значений переменных через запятую. Не допустимо использование двоеточия (:) в качестве значения. Допустимо использование запятой в качестве значения, если значение заключено в обратные слеши (\123,45\).
PrinterFriendlyОпределяет, будет ли страница выведена в режиме "на печать" (значение - "Yes"). Может быть использовано для условного вывода того или иного элемента страницы при выводе на печать. Получить значение можно следующими способом: V('PRINTER_FRIENDLY').
Если задано, то Application Express не будет отображать закладки или навигационные области. Кроме того, все элементы форм будут выводиться как текстовые поля.

Продолжение следует...

Подробнее...

пятница, 1 августа 2008 г.

Недокументированная опция для статических LOV

Согласно документации, статический список значений (STATIC, STATIC2) определяется следующим образом:


STATIC[2]:Display Value[;Return Value],Display Value[;Return Value]

То есть, получается, чтобы вывести Display Value в котором содержалась бы запятая - невозможно. Однако, как выяснилось, это не совсем так...

Оказывается для STATIC, STATIC2 есть недокументированная опция! (Спасибо за это Patrick Wolf). Недокументированная опция выглядит следующим образом:

STATIC[2](lov-entries-sep,display-return-sep):Display Value[Return Value]Display Value[Return Value]

То есть, чтобы вывести Display Value с запятой, можно, например, определить LOV следующим образом:

STATIC2(;,=):Показывать, но не учитывать=1; Учытвать, но не показывать=2;

Подробнее...

четверг, 28 февраля 2008 г.

apex.oracle.com обновился до версии 3.1

Официальный общедоступный тестовый инстанс Oracle Application Express был обновлен до версии 3.1. Очевидно, что скоро новая версия Apex будет доступна для загрузки.
Те,кто не подписывался на пробную версию Apex 3.1 (evaluation version) или ничего еще не читал, то с новыми фичами можно ознакомиться в статье "Release 3.1 New Features Sample Application".

Подробнее...

среда, 16 января 2008 г.

Компиляция TOra в Debian

TOra - расшифровывается как "Toolkit For Oracle" и представляет из себя IDE для таких СУБД как Oracle, MySQL, PostgreSQL. На данный момент является одной из трех полноценных Oracle IDE под Linux (остальные две - это "SQL Developer" от Oracle и "Aqua Data Studio" от AquaFold). Концептуальное отличие - язык программирования исходного кода: "SQL Developer", "Aqua Data Studio" - Java, "TOra" - C++.

На днях пришлось собирать ее из исходных кодов, так как по лицензионным причинам, в стандартной сборке TOra из репозитария Debian GNU/Linux не включена поддержка Oracle.

Все работы велись в Debian Lenny:
$ uname -a
Linux Debian4Test 2.6.22-3-686 #1 SMP Mon Nov 12 08:32:57 UTC 2007 i686 GNU/Linux


Версия TOra:
$ ls -l /usr/src/tora-1.3.22/
-rw-r--r-- 1 root src 3496227 2008-01-15 18:19 tora-1.3.22.tar.gz


Итак... поехали...

  1. Получение Oracle Instant Client
  2. Скачиваем следующие пакеты:
    Или, как вариант, можно скачать соответствующие *.rpm пакеты с сайта Oracle и с помощью утилиты "alien" преобразовать их в *.deb.

  3. Установка Oracle Instant Client

  4. $ sudo dpkg -i oracle-instantclient-basic_10.2.0.3-2_i386.deb
    $ sudo dpkg -i oracle-instantclient-devel_10.2.0.3-2_i386.deb
    $ sudo dpkg -i oracle-instantclient-sqlplus_10.2.0.3-2_i386.deb


    Проверяем, куда был установлен клиент Oracle:
    $ whereis oracle
    oracle: /usr/lib/oracle /usr/include/oracle /usr/share/oracle


  5. Создание файла TNSNAMES.ORA
  6. Создаем файл /usr/lib/oracle/tnsnames.ora и заполняем его необходимыми данными для соединения с экземплярами БД Oracle.

  7. Настройка кэша динамических библиотек
  8. В файл /etc/ld.so.conf добавляем следующую строку:
    /usr/lib/oracle/10.2.0.3/client/lib

    После чего перегружаем кэш:
    $ sudo ldconfig

  9. Настройка переменных окружения
  10. Добавляем следующие строки в файл /etc/profile:
    LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client/lib:$LD_LIBRARY_PATH
    TNS_ADMIN=/usr/lib/oracle
    export LD_LIBRARY_PATH TNS_ADMIN


  11. Получение и распаковка исходных кодов TOra
  12. Исходный код можно загрузить с оф. сайта:
    $ sudo mkdir /usr/src/tora
    $ cd /usr/src/tora
    $ wget http://switch.dl.sourceforge.net/sourceforge/tora/tora-1.3.22.tar.gz
    $ sudo tar zxvf tora-1.3.22.tar.gz


  13. Подготовка к пересборке TOra
  14. Устанавливаем необходимые модули:
    $ sudo aptitude install g++ gcc autoconf automake flex zlib1g-dev docbook-xsl
    $ sudo aptitude install libqt3-mt-dev libqt3-compat-headers


  15. Сборка TOra
  16. Переходим в директорию с исходным кодом и выполняем конфигурацию:
    $ cd /usr/src/tora/tora-1.3.22/
    $ ./configure --with-oracle=$ORACLE_HOME --with-oci-version=10G CC=gcc-4.2 --without-kde --with-xinerama


    В результате последней операции получаем сообщение об ошибке:
    ...
    checking whether uic supports -nounload ... yes
    checking if STL implementation is SGI like... yes
    checking for oracle... checking oci works... yes
    checking for qscintilla... configure: error: Couldn't compile a simple QScintilla application. See config.log or specify its location with --with-qscintilla-includes
    make: *** [configure-stamp] Ошибка 1


    То есть, в системе не оказалось пакета "libqscintilla-dev". Скачиваем его и повторяем попытки компиляции:
    $ wget http://ftp.pl.debian.org/debian/pool/main/q/qscintilla/libqscintilla-dev_1.7.1-2_all.deb
    $ sudo dpkg -i libqscintilla-dev_1.7.1-2_all.deb
    $ ./configure --with-oracle=$ORACLE_HOME --with-oci-version=10G CC=gcc-2.95 --without-kde --with-xinerama
    $ make
    $ sudo make install

    На этот раз ошибок не появилось.

  17. Запуск TOra
  18. Проверяем, где располагается TOra:
    $ whereis tora
    tora: /usr/bin/tora /usr/lib/tora /usr/local/tora /usr/share/tora /usr/share/man/man1/tora.1.gz


    Запускаем IDE:
    /usr/bin/tora


Подробнее...

понедельник, 24 декабря 2007 г.

Официальный перевод "Apex. Sizing Up Performance"

Около полугода назад я делал перевод статьи по оптимизации производительность Apex приложений - "Sizing Up Performance":


Теперь же есть возможность оценить ее официальный перевод :), ознакомиться с которым можно в декабрьском номере русской версии Oracle Magazine - "Оценка производительности".
Читаем, сравниваем....

Подробнее...

суббота, 22 декабря 2007 г.

Нужна ли сертификация по APEX?

David Peake, менеджер проекта APEX, активно прорабатывает вопрос создания программы сертификации по Oracle Application Express. И в настоящий момент проводит опрос о необходимость такого курса вообще.

Опрос состоит из нескольких экранов по 3-5 вопросов. Суть вопросов: направление проф. деятельности, используете ли APEX и в каком качестве и мнение насчет необходимости сертификации по APEX.

Исследование будет проводится до середины января 2008. Так что если есть желание оставить свое мнение - не откладывайте - времени осталось не много... ибо скоро НГ!!!
PS: с наступающими праздниками!!!

Подробнее...

вторник, 4 декабря 2007 г.

Запросы для получения ряда чисел

В некоторых случаях бывает необходимо получить последовательность чисел от N до M (в последнее время что-то уж очень часто возникает такая необходимость :). Дабы самому не забыть решил перечислить известные мне способы:

-- Самый простой
Select Rownum
From User_Objects
Where Rownum <= 25;

-- Кол-во единичек в CUBE - степень двойки
Select Rownum
From (Select 1 From Dual Group By Cube(1, 1, 1, 1, 1))
Where Rownum <= 25;

-- С использованием иерархичного запроса
Select Level
From Dual
Connect By Level <= 25;

-- Только для 10 версии и выше
Select y from dual
model
dimension by (1 as x) measures (1 as y)
rules iterate (25) (y[iteration_number + 1] = iteration_number + 1);


Есть есть еще какие-либо решения - будет интересно посмотреть...

Подробнее...

пятница, 23 ноября 2007 г.

APEX 3.1 доступен для тестирования

Буквально на днях команда Oracle Application Express анонсировала версию 3.1 для beta тестирования. Для того, чтобы получить доступ к тестовому инстансу, необходимо всего лишь зарегистрироваться.

Основная новинка - это интерактивные отчеты (Interactive Report Regions). Уже есть даже демонстрационная страничка от Dimitri Gielis - пример Interactive Report Regions.

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

Список новых фич:


  • Application Builder

    • Interactive Report Regions

    • Templates

      • Improve Searching of templates

      • Replace Templates

      • Publish Templates

      • Bulk Unsubscribe of templates

      • 2 New Themes

    • Wizards

      • Allow for early exit when creating HTML region

      • Create Interactive Report Wizard

      • Remove 32k limit on Create Application on a Spreadsheet

    • Addition of Application Groups

    • Simplification of Page Group pages

    • Addition of Application Date Format

    • Support for Declarative Media Type

    • Can view existence of run-only application (but cannot edit them)

    • Display Application Name in App Builder footer

  • Workspace Administration

    • Workspace-specific Builder Notifications

  • Runtime Installation

  • APIs

    • Augment APEX_MAIL API to support adding attachments to e-mails

Подробнее...