В версии 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.
Комментариев нет:
Отправить комментарий