Oracle DB, Oracle APEX, Linux etc.

понедельник, 29 ноября 2010 г.

Oracle: Consistency и разминка для ума

Допустим, что в одной сессии выполнится следующее:

drop table t7;
create table t7 as select 1 id, 0 val from dual;
insert into t7 values(2, 0);
update t7 set val = 1;

Затем во второй выполнилось вот это:

update t7 x set val = (select t.val + 1 from t7 t where t.id = x.id);
commit;
select * from t7;

Что выведется во второй сессии на экран?

Теперь повторим в первой сессии тот же блок, что и вначале, а во второй выполним:

update t7 x set val = (select x.val + 1 from t7 t where t.id = x.id);
commit;
select * from t7;

Каким будет результат?

PS: Ответы и информацию для размышления опубликую через пару дней.
Читать далее

суббота, 20 ноября 2010 г.

Oracle APEX: Сколько транзакций в фазе Page Processing?

И правильный ответ... Одна.

Из любопытства я сделал простой тест, чтобы подтвердить, что обработка страницы происходит в одну транзакцию:

0. Создал таблицу и пакет для лога.

create table processing_steps (ordr number, msg varchar2(1000 char));

create or replace package proc_stp_pkg
as
  procedure reset;
  procedure add(p_ordr number, p_msg varchar2);
  procedure add_auton(p_ordr number, p_msg varchar2);
end proc_stp_pkg;
/

create or replace package body proc_stp_pkg
as
  procedure reset
  is
    pragma autonomous_transaction;
  begin
    delete processing_steps;
    commit;
  end;
  
  procedure add(p_ordr number, p_msg varchar2)
  is
  begin
    insert into processing_steps(ordr, msg) values (p_ordr, p_msg);
  end;
  
  procedure add_auton(p_ordr number, p_msg varchar2)
  is
    pragma autonomous_transaction;
  begin
    add(p_ordr=>p_ordr, p_msg=>p_msg);
  
    commit;
  exception
    when others then 
      rollback;
      raise;
  end;
end proc_stp_pkg;
/

1. Создал в APEX страницу с процессом перед проверками, вычислением, проверкой и процессом после вычисления. В каждом из них есть строки:

rollback;
proc_str_pkg.add(..., '...');
proc_str_pkg.add_auton(..., '...');

2. Добавил кнопку и переход на эту же страницу при нажатии.
3. Запустил страницу и нажал на кнопку.
4. Выполнил запрос:

SQL> set pages 9999 line 200
SQL> column msg format a50
SQL> select * from processing_steps
  2  order by ordr;

      ORDR MSG
---------- --------------------------------------------------
         1 Pr: On Submit - Before Computations and Validation
           s - Autonomous Transaction

         3 Computation - Autonomous Transaction
         5 Validation - Autonomous Transaction
         6 Pr: On Submit - After Computations and Validations
         7 Pr: On Submit - After Computations and Validations
            - Autonomous Transaction


SQL>

Пропущенные вставки 0, 2 и 4 откатывались оператором ROLLBACK в последующих блоках обработки. Вставка 6 автоматически зафиксировалась при успешном выполнении последнего блока. Так что будьте осторожней, управляя фиксацией и откатом в Вашем коде - Вы можете повлиять на результаты предыдущих блоков.

Читать далее

понедельник, 15 ноября 2010 г.

Oracle APEX + Oracle SQL Developer = Сила двух

Предлагаю вниманию читателей перевод одной статьи. Она понравилась мне объяснением возможностей удалённой отладки, и я решил перевести её целиком. Надеюсь, она пригодится...

Сила двух
Дэвид Пик
Перевод: Александр Поливаный 

Использование Oracle SQL Developer при разработке в Oracle Application Express.

Oracle Application Express (Oracle APEX) и Oracle SQL Developer (OSD) — это бесплатные инструменты, оба работающие с Oracle Database версии 9.2 и выше. OSD не только помогает Вам в разработке приложений БД, но также даёт Вам возможности просмотра, экспорта, импорта, внедрения и удалённой отладки Ваших приложений Oracle APEX.

Эта статья покажет, как OSD и Oracle APEX работают вместе, способствуя разработке. Мы увидим, как можно просматривать информацию о приложениях Oracle APEX из OSD. Затем мы пройдёмся по примеру удалённой отладки PL/SQL-кода, выполняющегося в браузерном приложении, из OSD.


Введение


Используя OSD в связке с Oracle APEX, Вы можете просматривать несколько приложений и страниц и быстро добираться до конкретных данных. К примеру, в Oracle APEX Вам потребуется два браузера, чтобы глядеть* на код двух списков значений (list of values, LOV) в двух разных приложениях одновременно. В OSD всё, что нужно - развернуть оба приложения в списке подключений (Connections). Также OSD специально для Oracle APEX предоставляет несколько очень полезных и подробных отчётов о приложениях, страницах, схемах и рабочих пространствах (категория Data Dictionary Reports в отчётах).

OSD позволяет Вам экспортировать, импортировать и внедрять приложения во многих рабочих пространствах, экземплярах APEX и базах данных. ПКМ на названии приложения вызывает контекстное меню, при помощи которого можно переносить приложение с его вспомогательными объектами из одного рабочего пространства в другое. Эта возможность особенно полезна при внедрении приложений из разработки в тестирование или производство.

Вы можете копировать SQL-код из Ваших регионов, списков значений и проверок, вставлять их в SQL Worksheet в OSD и выполнять. OSD даст Вам ввести значения для связываемых переменных и запустить EXPLAIN PLAN или AUTOTRACE для запроса, чтобы обнаружить проблемы с производительностью и настроить SQL.

Для примеров в этой статье требуются Oracle APEX 3.0.1 и выше и OSD 1.2.1 и выше. (Обратите внимание, что Вы не сможете выполнить примеры, используя Oracle APEX на apex.oracle.com.) Вам также потребуется рабочее пространство Oracle APEX, связанное со схемой-примером HR, доступной в БД по умолчанию.


Просмотр информации Oracle APEX


Создайте подключение в OSD к схеме HR. Для пошаговых инструкций по созданию подключений в OSD читайте статью "Making Database Connections" в этом выпуске Oracle Magazine.**

Когда соединение установится, Вы сможете увидеть пункт Application Express под подключением HR в списке подключений (Connections), как показано на рисунке (под подключением XE Dpeake):

Пункт Application Express в Oracle SQL Developer


Теперь Вы можете просмотреть приложения Oracle APEX пользователя HR, используя закладки с подробной информацией:
Закладки с подробной информацией о приложении



Удалённая отладка


Вы можете использовать OSD для удалённой отладки PL/SQL-кода. Эта возможность особенно полезна в случае, когда приложение не прекращает выполнение, но и не даёт результатов, которые Вы ожидали. Чтобы потренироваться, выполните следующие шаги для отладки процедуры в упакованном приложении Oracle APEX "Asset Manager":

Шаг 1: Получение и установка упакованного приложения. Скачайте, импортируйте и разверните приложение в Oracle APEX.

  1. Скачайте и сохраните asset_manager_1.0.zip с сайта http://www.oracle.com/technetwork/developer-tools/apex/application-express/packaged-apps-090453.html#ASSETS .
  2. Разархивируйте файл.
  3. В OSD подключитесь к схеме HR.
  4. ПКМ по пункту Application Express под HR в списке подключений, выберите Import Application (Импортировать приложение).
  5. Найдите и откройте разархивированную папку asset_manager_1.0, выберите файл asset_manager_installer_1.0.sql.
  6. Нажмите Next (Далее).
  7. Установите флажок Run Install Script (Запустить установочный скрипт) и нажмите Next.

    Импорт и внедрение приложения
  8. Нажмите Finish (Завершить).
  9. Нажмите OK в окне, сообщающем об успешной установке.


Шаг 2: Настройка OSD для удалённой отладки. Подготовьте OSD для отладки процедуры EBA_ASSET.update_status, выполняемой в приложении, удалённо.

  1. В OSD подключитесь к базе данных как пользователь с привилегиями DBA.***
  2. Введите следующий код. Если необходимо, замените PUBLIC на имя пользователя, от имени которого запускается Oracle APEX в mod_plsql.
    grant DEBUG CONNECT SESSION to HR; 
    grant DEBUG on HR.EBA_ASSET to PUBLIC;
  3. Нажмите кнопку Run Script (или нажмите F5).
  4. Подключитесь как HR.
  5. В Подключениях откройте пункт Packages (Пакеты) и нажмите EBA_ASSET.
  6. ПКМ по телу пакета EBA_ASSET и выберите Edit (Править).
  7. ПКМ по левому полю в редакторе кода, выберите Toggle Line Numbers (Отображать номера строк).
  8. Перейдите вниз, к строке 113, ПКМ по левому полю в редакторе кода, выберите Toggle Breakpoint (Установить точку остановки).
  9. ПКМ по коду, выберите Compile for Debug (Компилировать для отладки). Заметьте, что выполнение пакета в режиме отладки сильно помешает производительности. Когда тестирование закончится, Вам стоит перекомпилировать пакет без отладочной информации.
  10. ПКМ по подключению HR в Подключениях, выберите Remote Debug (Удалённая отладка).

    Oracle SQL Developer настроен для удалённой отладки
  11. Нажмите OK.


Шаг 3: Настройка Oracle APEX для отладки. Подготовьте Oracle APEX к отладке процедуры EBA_ASSET .update_status:

  1. Войдите в Oracle APEX как разработчик соответствующего рабочего пространства - того, в которое Вы установили приложение "Asset Manager".
  2. Нажмите Application Builder.
  3. Нажмите Asset Manager 1.0.
  4. Откройте страницу 11 - Inventory Details.
  5. В Процессах (Processes) нажмите Update Asset Status.
  6. В поле Source замените код на следующий:
  7. IF :DEBUG = 'YES' THEN
         dbms_debug_jdwp.connect_tcp('localhost',4000);
    END IF;
    eba_asset.update_status(:P11_ASSET_ID);
    IF :DEBUG = 'YES' THEN
         dbms_debug_jdwp.disconnect;
    END IF;
    Этот код будет срабатывать только тогда, когда страница запущена в режиме отладки. Второй блок IF отключает отладочную сессию.
  8. Нажмите Apply Changes (Применить изменения).

Шаг 4: Запуск приложения. Запустите приложение "Asset Manager" в Oracle APEX, вначале в обычном режиме, а затем - в режиме отладки.

  1. В Oracle APEX вернитесь назад, к странице 1 и нажмите Run (Запустить).
  2. Войдите в приложение как HR.
  3. Выберите Assets.
  4. Нажмите иконку редактирования для любой записи.
  5. Нажмите иконку редактирования для записи остатков. Поменяйте значение поля Status (статус).
  6. Нажмите Apply Changes. Приложение нормально обработает изменения, потому оно запущено не в режиме отладки.
  7. Нажмите иконку редактирования для той же записи остатков.
  8. Нажмите Debug (Отладка) на панели инструментов разработчика.
  9. Панель инструментов разработчика в Oracle APEX
  10. Поменяйте статус и нажмите Apply Changes.
  11. Теперь OSD должен перехватить фокус ввода. (Если этого не произошло, то приложение будет показывать частично завершённый процесс загрузки страницы, и Вам нужно будет открыть окно OSD самостоятельно.)
  12. Используйте инструменты OSD, чтобы возобновить выполнение, выполнять отладку пошагово с обходом и со входом в процедуру. Во время отладки процедуры Вы можете видеть изменения значений в переменных и в данных.

Когда процедура закончит выполнение, удалённый отладчик отсоединится.

Вы можете использовать удалённую отладку, чтобы пошагово пройти сквозь сложную PL/SQL обработку, которая не выполняет предназначенное. Наблюдение за значениями переменных и данных во время отладки программы помогает определить ошибку в логике.


Заключение


Вы можете использовать Oracle SQL Developer, чтобы выполнять следующие задачи, когда Вы разрабатываете приложения Oracle Application Express:

  • Быстрое перемещение между компонентами Ваших приложений.
  • Экспорт, импорт и внедрение приложений.
  • Настройка SQL.
  • Удалённая отладка PL/SQL.

Сочетание Oracle SQL Developer и Oracle Application Express может дать Вам значительный рост производительности в разработке Web-приложений.

Примечания переводчика

 
* Дэвид не досказывает либо лукавит, говоря "глядеть" (to view) вместо "работать". Чтобы глядеть, хватит и двух закладок в браузере. Естественно, что все необходимые переменные сессии APEX — рабочее пространство, номер приложения, номер страницы — будут устанавливаться в зависимости от последнего открытого LOV. Кроме того, для одновременной работы с двумя приложениями в одном браузере можно использовать дублирование DNS-имён хоста с APEX. Подробней можно почитать здесь: Martin Giffy D'Souza on Oracle APEX - APEX: How to Develop in 2 Browser Tabs.

** Или просто нажмите F1 и читайте раздел справки SQL Developer Concepts and Usage->Database Connections.

*** Имеется в виду пользователь с правами, достаточными для выдачи привилегий DEBUG CONNECT SESSION и DEBUG HR.EBA_ASSET.

Читать далее

пятница, 12 ноября 2010 г.

Oracle APEX: 4.0.2 на пороге

Если я всё верно понял.

Ждём-с!

UPD 2010-11-20: На MOS уже доступен для загрузки патч 10173973.
Читать далее