My last day in Oracle CIS

Сегодня мой последний день в Oracle CIS.

Я очень рад, что мне довелось работать с такими профессионалами, как
Андрей Пивоваров, Игорь Мельников, Сергей Иванович Томин, Марк Ривкин, Андрей Забелин, Саша Рындин, Вадим Гусев, Дмитрий Севостьянов, Ольга Горчинская, в общем, я могу очень долго перечислять весь Российский PreSales департамент. Также, благодаря работе в Oracle, я познакомился с огромным количеством гуру (Женя Горбоконенко, Андрей Криушин, Дмитрий Безруков, Валерий Юринский, Harald van Breederode, Chris Jenkins, Tim Vincent и многими другими), отличными продавцами (Катя Кобер, Марина Тищенко, Алексей Лапиров и т.д.) и другими уникальными личностями в Российском представительстве Oracle и вообще в Oracle Community. Я получил неоценимый опыт и очень сожалею, что мне пришлось покинуть компанию.

PS. Я переезжаю в Лондон и надеюсь найти там работу и продолжить то, чем я занимался в прекрасной компании Oracle

PPS. Фото взято здесь (http://dreamvoyage.ru/blog/2007-11-03-100)

OFF: Oracle Database 10g: Real Application Clusters Administrator Certified Expert

На днях, сдал 1z0-048. Общие впечатления.
Сам экзамен не очень сложный, учитывая даже то, что смысл некоторых вопросов я не понял :)). Вопросы про CRS показались гораздо легче чем по функционалу RAC, ну в общем, заветные 60% по каждой из секций я набрал.

PS. На фото, почти high end storage, сделанный собственными руками. Собрал это чудо, как вы понимаете, мастер на все руки - Игорь Мельников

Перенос PL/SQL в TimesTen и ttSrcScan


В версии 11g, TimesTen стал поддерживать PL/SQL, а точнее, движок PL/SQL Oracle Database 11g, был портирован в TimesTen, т.е., теперь, приложения, использующие PL/SQL могут работать и в TimesTen. Но, вы прекрасно понимаете, что TtimesTen не поддерживает ВСЕГО функционала Oracle Database, например нет триггеров, нельзя создавать типы (CREATE TYPE) и т.д. Кроме того, как показывает практика, приложения содержат огромное количество кода (сотни тысяч или миллионы строк) и анализ кода на проверку работоспособности в TimesTen может занять огромное количество времени, поэтому разработчики создали специальную утилиту (ttSrcScan), которая должна автоматизировать данный процесс.

Данная утилита доступна после установки TimesTen 11.2.1 в каталоге $TIMESTEN_HOME/quickstart/sample_util (правда нужно не забыть поставить quickstart), но если не хочется ставить лишнее программное обеспечение, то можно обратиться в Oracle и получить ее отдельно.

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

create or replace package test_1 as

  procedure p_test;

end test_1;
/
create or replace package body test_1 as

  procedure p_test
  is
     v_rec number (10);  
  begin
    for v_rec in ( select level from dual connect by level <=10 ) loop
      dbms_output.put_line ('1');
    end loop;
  end p_test;   
end test_1;
/
Т.е. я явно указываю SQL конструкцию, которую TimesTen не поддерживает.
Command> select level from dual connect by level <=10;
 1001: Syntax error in SQL statement before or at: "by", character position: 32
select level from dual connect by level <=10
                               ^^
The command failed.
Command>
Проверим данный пакет с помощью ttSrcScan.
[oracle@tt1 ~]$ cd /u01/app/oracle/product/11.2.1.8/TimesTen/tt2/quickstart/sample_util/
[oracle@tt1 sample_util]$ ./ttSrcScan -i /home/oracle/source -o /home/oracle/result


  ***************************************
  * Oracle TimesTen Source Code Scanner *
  ***************************************

  Options used:
  =============
  -input           = /home/oracle/source
  -output          = /home/oracle/result
  -nestedDir       = TRUE
  -version         = 11.2.1.8.0
  -summaryPrefix   = ttSrcScan
  -maxRows         = 15


  Summary Statistics:
  ===================

  Files Processed:
  Input files and sub-directories processed :         1
  Sub-directories processed                 :         0
  Unsupported file types                    :         0
  Files Scanned                             :         1

  Files Scanned:
  Scanned files with no source code issues  :         1
  Scanned files with source code issues     :         0

  Lines Of Code Scanned:
  Lines of code                             :        19
  Lines of code with issues                 :         0
  Percentage of lines of code with issues   :         0.00%


  Detail Statistics:
  ==================
  Summary Report           /home/oracle/result/ttSrcScan_summary.html
  Files Processed Report   /home/oracle/result/ttSrcScan_all_input_files.html
  Files With Issues Report /home/oracle/result/ttSrcScan_issue_files.html
  Log File                 /home/oracle/result/ttSrcScan_log_file.log


[oracle@tt1 sample_util]$
Следовательно, ошибок нет. Скомпилируем данный пакет в TimesTen.

Command> create or replace package test_1 as
       >
       >   procedure p_test;
       >
       > end test_1;
       > /

Package created.

Command> create or replace package body test_1 as
       >
       >   procedure p_test
       >   is
       >      v_rec number (10);
       >   begin
       >     for v_rec in ( select level from dual connect by level <=10 ) loop
       >       dbms_output.put_line ('1');
       >     end loop;
       >   end p_test;
       >
       > end test_1;
       > /

Package body created.


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

Command> exec test_1.p_test;
 1001: Syntax error in SQL statement before or at: "BY", character position: 32
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=10
                               ^^
 8507: ORA-06512: at "ORACLE.TEST_1", line 7
 8507: ORA-06512: at line 1
The command failed.
Command>
Следовательно, ошибки, связанные с неподдерживаемыми SQL операторами, получим только в runtime, это нужно учитывать. Кроме того, TimesTen поддерживает работу с некоторыми системными пакетыми (UTL_FILE, DBMS_LOCK и др.), полный список можно посмотреть в документации. Но, содержание пакетов может быть разным. Например:
Command> # TimesTen
Command> desc dbms_lock
       > ;

Package SYS.DBMS_LOCK:

  Procedure SLEEP:
    Arguments:
      SECONDS                         IN     NUMBER

1 PL/SQL object found.
и Oracle Database.
SQL> desc dbms_lock;

PROCEDURE ALLOCATE_UNIQUE

FUNCTION CONVERT RETURNS NUMBER(38)

FUNCTION CONVERT RETURNS NUMBER(38)

FUNCTION RELEASE RETURNS NUMBER(38)

FUNCTION RELEASE RETURNS NUMBER(38)

FUNCTION REQUEST RETURNS NUMBER(38)

FUNCTION REQUEST RETURNS NUMBER(38)

PROCEDURE SLEEP
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SECONDS                        NUMBER                  IN

Поэтому, при анализе кода, ttSrcScan добавляет строки содержащие системные пакеты, как "потенциально ошибочные". Например, проанализируем данный код:
create or replace package test_1 as

  procedure p_test;

end test_1;
/
create or replace package body test_1 as

  procedure p_test
  is
  begin
    dbms_lock.sleep(10);
  end p_test;

end test_1;
/
[oracle@tt1 sample_util]$ ./ttSrcScan -i /home/oracle/source -o /home/oracle/result


  ***************************************
  * Oracle TimesTen Source Code Scanner *
  ***************************************

  Options used:
  =============
  -input           = /home/oracle/source
  -output          = /home/oracle/result
  -nestedDir       = TRUE
  -version         = 11.2.1.8.0
  -summaryPrefix   = ttSrcScan
  -maxRows         = 15


  Summary Statistics:
  ===================

  Files Processed:
  Input files and sub-directories processed :         1
  Sub-directories processed                 :         0
  Unsupported file types                    :         0
  Files Scanned                             :         1

  Files Scanned:
  Scanned files with no source code issues  :         0
  Scanned files with source code issues     :         1

  Lines Of Code Scanned:
  Lines of code                             :        16
  Lines of code with issues                 :         1
  Percentage of lines of code with issues   :         6.25%


  Detail Statistics:
  ==================
  Summary Report           /home/oracle/result/ttSrcScan_summary.html
  Files Processed Report   /home/oracle/result/ttSrcScan_all_input_files.html
  Files With Issues Report /home/oracle/result/ttSrcScan_issue_files.html
  Log File                 /home/oracle/result/ttSrcScan_log_file.log


[oracle@tt1 sample_util]$ 
 
А в файле test.sql__source_issues.html видим.


Собственно, нужно также быть очень осторожным при переносе системных пакетов.

Конечно, данная утилита имеет свои ограничения, но все же она позволяет очень быстро проверить основные конструкции кода. Игорь Мельников обещал написать (если будет время конечно :) ) свою утилиту ttChecker, аналогичную RacChecker.

Семинар для партнеров по TimesTen

12 сентября, то есть уже в ближайший понедельник, в офисе Oracle состоится семинар для партнеров. Основная тема – Oracle TimesTen и In-Memory Database Cache. Вести семинар буду я :), так что welcome.
  • За дополнительной информацией по семинару, просьба обращаться в Представительство корпорации Oracle к Елизавете Матвеевой по тел. +7 (495) 795 2276 или по электронной почте: elizaveta.x.matveeva@oracle.com
  • По вопросам регистрации, просьба обращаться в Представительство корпорации Oracle к Валерии Хоменковой по тел. +7 (495) 641 1569 или по электронной почте: valeria.khomenkova@oracle.com