11g Release 2: External table preprocessor feature

Сейчас мы усиленно готовимся к очередному семинару DBOD. Накатываем на его контент массу патчей! :-) Конечно же основной патч связан с фичами второго релиза 11g (11g Release 2), в ожидании которого все мы с Вами живем. Поэтому, Вас ждет масса новой и интересной информации...


Об одной такой новой возможности я решил Вам рассказать заранее.

Потому-что эта новая возможность доступна и для пользователей 11gR1, но только начиная с 11.1.0.7 (первого патчсета), а также скоро будет доступна и для 10gR2 (для патчсета 10.2.0.5).

Речь идет о возможности препроцессорной обработки файла, содержащего данные для внешней таблицы (external table).
Теперь, при создании внешней таблицы, стало возможным определять внешнюю программу (консольное приложение операционной системы, на котором установлен сервер Oracle Database). Эта внешняя программа принимает на вход один параметр: полное имя файла внешней таблицы.
Внешняя программа должна вернуть на стандартный вывод (stdout) содержимое внешней таблицы.

Я думаю идея вам понятна: c помощью внешней программы можно сделать предварительную обработку данных внешнего файла, например конвертировать ее в какой-то формат (из двоичного в текстовый).

Рассмотрим эту новую возможность чуть подробнее.

Прежде всего нам необходимо создать объект - каталог (DIRECTORY) операционной системы, в котором будет лежать программа-препроцессор, а затем выдать привилегию пользователю на выполнение (EXECUTE) и чтение (READ) файлов в этом каталоге.

sqlplus / as sysdba

SQL*Plus: Release 11.1.0.7.0 - Production on Tue Jun 22 13:57:22 2009

Copyright (c) 1982, 2008, Oracle. All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create directory prep_files as 'C:\oracle\admin\orcl\prepfiles';

Directory created.

SQL> grant read,execute on directory prep_files to dbod_demo;

Grant succeeded.

После этого, как обычно, нам нужно создать директорию в которой будет лежать файл для внешней таблицы:

SQL> conn / as sysdba
Connected.
SQL> create or replace directory data_files as 'C:\oracle\admin\orcl\datafiles';

Directory created.

SQL>
SQL> grant read, write on directory data_files to dbod_demo;

Grant succeeded.


И, в завершение, при создании внешней таблицы, указывается новая директива PREPROCESSOR, в параметрах которой передается каталог и внешняя программа, которая в нем находится:


C:\oracle\product\11.1.0\db\BIN>sqlplus /nolog

SQL*Plus: Release 11.1.0.7.0 - Production on Wed Jun 22 14:15:17 2009

Copyright (c) 1982, 2008, Oracle. All rights reserved.

SQL> conn dbod_demo/dbod_demo
Connected.
SQL> CREATE TABLE dbod_ext_table (line varchar2(2000))
2 ORGANIZATION EXTERNAL
3 (TYPE ORACLE_LOADER
4 DEFAULT DIRECTORY data_files
5 ACCESS PARAMETERS (
6 RECORDS DELIMITED BY NEWLINE
7 PREPROCESSOR prep_files:'unrar.bat'
8 FIELDS (line char(2000)))
9 LOCATION ('test.rar'))
10 REJECT LIMIT UNLIMITED;

Table created.

Моя внешняя программа (обычный bat-файл, - мой сервер работает под win32) будет распаковывать rar-архив и выводить его содержимое его на stdout:

@echo off
c:\arc\rar p %1 -inul

Собственно, на этом все:
SQL> conn dbod_demo/dbod_demo
Connected.
SQL> select * from dbod_ext_table;

LINE
-----------------------------------------------------------------------------
Здраствуй мир !



На мой взгляд: очень практичная возможность, может быть и не революционная, но крайне полезная.

Увидимся на DBOD !

8 комментариев:

  1. Анонимный24/6/09 1:44 AM

    10.2.0.5 - скоро это когда С.И.Томин говорил по август - сентябрь...
    но это н официально

    ОтветитьУдалить
  2. Сейчас идет внутреннее тестирование;
    я думаю, через 2-3 месяца начнуться релизы.

    ОтветитьУдалить
  3. Анонимный24/6/09 1:07 PM

    для части платформ есть бекпорт этого дела поверх версий 10.2.0.3, 10.2.0.4
    см. патч 6522622
    см. так же
    http://structureddata.org/2008/11/19/preprocessor-for-external-tables/

    ОтветитьУдалить
  4. срочно нужно осваивать ACL (ну собственно они и раньше были для XML_DB, а 11.1 они уже есть и для PL/SQL пакетов) - скорее всего тоже будет и 10.2.0.5

    ORA-24247: network access denied by access control list (ACL)
    ORA-06512: at "SYS.UTL_TCP", line 17
    ORA-06512: at "SYS.UTL_TCP", line 246
    ORA-06512: at "SYS.UTL_SMTP", line 115
    ORA-06512: at "SYS.UTL_SMTP", line 138

    SQL> EXECUTE DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('_acl_name_.xml', 'ACL for Network procedures', '_owner_', TRUE, 'connect');
    SQL> EXECUTE DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('_acl_name_.xml', '_tcp_server_', _tcp_port_);

    ОтветитьУдалить
  5. релизы чего - патчей (версия 1, 2 , и тд) или Вы имели ввиду под разные платформы ?
    а то с версиями патчей для OraLite мы уже проходили... %|

    ОтветитьУдалить
  6. Я имел в виду релизы - версии для разных платформ.

    ОтветитьУдалить
  7. Анонимный22/1/10 10:51 AM

    Когда следующий семинар будет?

    ОтветитьУдалить
  8. Зависит от того, когда вы будете готовы на нем выступать. Концепция изменилась - теперь надо заработать право быть на семинаре :). Так как это бесплатные семинары, купить тут ничего нельзя :)

    ОтветитьУдалить