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 !
10.2.0.5 - скоро это когда С.И.Томин говорил по август - сентябрь...
ОтветитьУдалитьно это н официально
Сейчас идет внутреннее тестирование;
ОтветитьУдалитья думаю, через 2-3 месяца начнуться релизы.
для части платформ есть бекпорт этого дела поверх версий 10.2.0.3, 10.2.0.4
ОтветитьУдалитьсм. патч 6522622
см. так же
http://structureddata.org/2008/11/19/preprocessor-for-external-tables/
срочно нужно осваивать 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_);
релизы чего - патчей (версия 1, 2 , и тд) или Вы имели ввиду под разные платформы ?
ОтветитьУдалитьа то с версиями патчей для OraLite мы уже проходили... %|
Я имел в виду релизы - версии для разных платформ.
ОтветитьУдалитьКогда следующий семинар будет?
ОтветитьУдалитьЗависит от того, когда вы будете готовы на нем выступать. Концепция изменилась - теперь надо заработать право быть на семинаре :). Так как это бесплатные семинары, купить тут ничего нельзя :)
ОтветитьУдалить