25 ноября, суббота 12:26
Bankir.Ru

Объявление

Свернуть
1 из 2 < >

Выбираем Золотого пользователя - 2017

2 из 2 < >

Выбираем Золотого модератора - 2017

Показать больше
Показать меньше

Отладка серверных процедур АБС "Кворум"

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Отладка серверных процедур АБС "Кворум"

    2 ALL
    В связи с массированным переносом всех алгоритмов на сервер поделитесь, пожалуйсто, методами отладки этого самогого хозяйства. Интерес представляет отладка в контексте работающего модуля АБС.

    P.S.
    Вставку операторов dbms_output.put_line(' '); везде, где это только можно - не предлогать.

  • #2
    Попробуй, мужик Manager.PutError :....................

    Комментарий


    • #3
      Андрюха А. Уме-е-е-е-н! Просто до безобразия.

      Комментарий


      • #4
        Сообщение от RedPank
        Андрюха А. Уме-е-е-е-н! Просто до безобразия.
        Шутка это, шутка))

        Комментарий


        • #5
          Програмулинки типа TOAD, PL\SQL Developer, SQL Navigator могут выплнять хранимые процедуры под отладкой. Что нужно для этого сделать. Первое скомпилировать пакет с добавлением дебажной информации (например в тоаде надо нажать кнопочку с паучком перед компиляцией). А потом запускаешь функцию или процедуру отдельно (не из кворумовского модуля) ну и отлаживаешь че хочешь.
          Хотя по опыту могу сказать что dbms_output гораздо удобнее.

          Комментарий


          • #6
            SQL Navigator позволяет отлаживать "другую" сессию. Но с Кворумом у меня такое не вышло ...

            Комментарий


            • #7
              RedPank
              В SQL Navigator тоже можно отлаживаться, но конечно если ты запускаешь пакет не из Кворума. Напиши неименованный блок, в котором запускаешь интересующую тебя функцию из какого-то пакета, предварительно откомпилировав ее в debug mode и вперед ! Не забудь только перед этим проинициализировать свою сессию (user, restoreallsettings, etc). По сравнению с Delphi конечно не очень удобно. Некоторые программеры у нас пользуются этим, другие плюются (после Delphi ) и ставят dbms_output.
              Из Атлантиса нет технической возможности отлаживаться

              Комментарий


              • #8
                arc Из Атлантиса нет технической возможности отлаживаться А я надеялся ...

                P.S. Интересно, а как сами кворумовцы отлаживаются ?

                Комментарий


                • #9
                  P.S. Интересно, а как сами кворумовцы отлаживаются ?
                  как и все остальные dbms_output

                  Комментарий


                  • #10
                    прикиньте а я живьем видел как из атлантиса отлаживали серверные процедуры sql navigator'ом

                    Комментарий


                    • #11
                      YK
                      Ваша фраза мне напомнила фразу, сказанную одним из руководителей АСУ в таможне лет 10 назад: "Если SuperCalc откомпилировать в Clipper'е, то будет классно !".
                      No comments.

                      Комментарий


                      • #12
                        А мне фраза "из атлантиса отлаживали серверные процедуры sql navigator'ом" совсем не понятна. Как можно из атлантиса что навигатором делать ?
                        Если уважаемый YK имел ввиду отладку в навигаторе хранимой процедуры, вызванной из атлантса, то я бы очень хотел узнать как это делается!

                        Комментарий


                        • #13
                          RedPank : то я бы очень хотел узнать как это делается!

                          RTFM (SQL Navigator help) :
                          ==============================
                          Debugging code run from an external application

                          You can use SQL Navigator’s Just-In-Time Debugging feature to debug SQL Navigator server-side code that is run from any client-server application. (This includes code written in VB, Delphi, PowerBuilder, Developer/2000, or other applications.)
                          Just-In-Time Debugging can be extremely useful when the application calls a stored program with complex parameters, such as cursors, that are not easily simulated from SQL Navigator. Rather than trying to simulate the complex environment, you can simply connect to the external application and then debug the code.

                          Requirements for attaching to an external application

                          To initialize Debug mode, the external application must execute three commands:

                          ALTER SESSION SET PLSQL_DEBUG=TRUE
                          id := dbms_debug.initialize('SQLNAV')
                          dbms_debug.debug_on;

                          where SQLNAV can be replaced by any ID string. If this parameter is omitted, the return value of initialize will be used as the Session ID.
                          The ALTER SESSION command (SQL) should be executed separately, while dbms_debug.initialize and dbms_debug.debug_off (PL/SQL) can be placed in the same PL/SQL block. If you omit the ALTER SESSION command, SQL Navigator will not be able to display the source line currently being executed.
                          After the external application is finished executing the code that needs debugging, it should execute the command:

                          dbms_debug.debug_off

                          Otherwise, all subsequent PL/SQL code that this application submits for execution will be run in debug mode. This will cause the application to hang until SQL Navigator attaches to it again.

                          Attaching an external session for debugging

                          In the following procedure, Step 5 can be done before Step 4, but it may then be difficult to pass the Session ID (unless it is hard-coded). The important thing is that the application and debugger are synchronized at the point when:

                          The application runs PL/SQL code in debug mode, and
                          The Attach command has been issued from SQL Navigator.

                          To attach an external session for debugging

                          1 In SQL Navigator, connect to the same DB instance as the external application.
                          2 Set PL/SQL Debugging ON
                          3 In SQL Navigator, from the Debug menu select Attach External Session.
                          4 In the dialog that comes up, enter the same Session ID as passed to or returned by the initialize statement. SQL Navigator will then wait for the application to execute PL/SQL code.
                          5 From the application, execute the PL/SQL block that calls the stored program to be debugged. SQL Navigator displays the Execution Status window and enables all debugging commands.

                          6 Verify that, when execution of the PL/SQL code is complete, SQL Navigator displays the message Execution complete and the external application continues its normal work.
                          =========================================
                          WBR, Александр Турчин

                          Комментарий


                          • #14
                            Александр_Турчин Читать HELP :-)) я тоже умею. Только вот у меня такой фокус не вышел.
                            Хитрость скорее всего где выполнять

                            ALTER SESSION SET PLSQL_DEBUG=TRUE
                            id := dbms_debug.initialize('SQLNAV')
                            dbms_debug.debug_on;


                            А действительно где ?

                            Комментарий


                            • #15
                              2RedPank : Хм, девствютельно. А вот так (сам не пробовал, правда) :
                              =========================
                              PROCEDURE TEST_DBG AS
                              nCursor NUMBER;
                              sText VARCHAR2 (100);
                              nRowProc NUMBER;
                              id NUMBER;
                              BEGIN
                              nCursor := dbms_sql.open_cursor;
                              sText := 'ALTER SESSION SET PLSQL_DEBUG=TRUE';
                              dbms_sql.parse (nCursor, sText, dbms_sql.v7);
                              nRowProc := dbms_sql.execute( nCursor );
                              dbms_sql.close_cursor( nCursor );
                              id := dbms_debug.initialize('SQLNAV');
                              dbms_debug.debug_on;
                              dbms_debug.debug_off;
                              EXCEPTION WHEN OTHERS THEN dbms_sql.close_cursor(nCursor); RAISE;
                              END;
                              =========================
                              ?
                              WBR, Александр Турчин

                              Комментарий


                              • #16
                                RedPank
                                Хитрость скорее всего где выполнять
                                Так эти настройки действуют для сессии, то их вероятно можно выполнить из Атлантиса через FarmSQL. Только кто поднимет SQLNavigator я не могу понять ! а тем более из Атлантиса.

                                Комментарий


                                • #17
                                  Кто-нибуди справился с необходимостью перегружать модуль кворума после перекомпиляции серверной процедуры ?

                                  Комментарий


                                  • #18
                                    RedPank
                                    Мне кажется, что не справится никто , т.к. проблема не в Кворуме, а в Оракле. Кворум использует в пакетах переменные, при перекомпиляции они сбрасываются, соответственно логика становится инвалидной. Если бы их не было, то можно было бы компилять на ходу - сессии не валились бы.

                                    Комментарий


                                    • #19
                                      Насколько я себе представляю, отлаживаться из-под модуля Анталнтис не позволяет
                                      Посему дебажить пакет можно с помощью SQL Navigator, и следующим образом:
                                      1. Закачать на схему копию пакета, но с другим именем, например, из ACCLFUNC сделать TEST_ACCFUNC.
                                      2. Устроить сессии SQL Navigator'a следующий изврат:
                                      Procedure setquorumsession(u number, d date) is
                                      b number;
                                      begin
                                      if not(SECURITY.SetUserByCode(u)) then
                                      dbms_output.put_line('no user'||to_char(u));
                                      end if;
                                      GETSETTIMAN.restoreallsettings;
                                      select btrv_address into b from operdays where operdate=d;
                                      OPENDAY.updatecurrentoperday(b);
                                      exception when others then
                                      dbms_output.put_line('couldn''t set quorum session!');
                                      end;
                                      3. Откомпилить пакет в дебажном режиме, и тестить его, пока SQL Nav-r не свалится!

                                      Единственно, очень хочется, чтобы опер был действующим, а дата - открытым когда-либо оперднем!

                                      P.S. А dbms_output.put_line(' '); все равно - RULEZZZ 4EVER!

                                      Комментарий


                                      • #20
                                        Battledwarf
                                        Была реализована возможность отладки PL/SQL кода из модулей на Атлантисе.
                                        Все модули, пересобранные на Атлантисе, начиная с 15.04.2005 уже поддерживают эту возможность.

                                        Технология внешней отладки серверной части модулей собранных на Атлантисе.

                                        Ограничения использования:
                                        1) Пользователь Oracle должен обладать правом alter session.
                                        2) Для возможности считывать и редактировать значения переменных в отлаживаемых пакетах необходимо предварительно скомпилировать пакеты с отладочной информацией
                                        В SqlNavigator: войти в режим отладки, перекомпилировать пакет без изменения.
                                        В PlSqlDeveloper: в контекстном меню пакета выбрать "Add Debug Information"
                                        3) Для SqlNavigator возможность отладки поддерживается только на Oracle серверах версии ниже 9.х (скорее всего пока)

                                        Сокращения: Модуль на Атлантисе - М>, Отладчик - О>

                                        1) М>: запустить модуль, собранный на Атлантисе
                                        2) М>: для включения режима внешней отладки нужно выполнить процедуру
                                        по Ctrl+F4: PLDBG_ENABLE(идентификатор-string>,режим отладки-boolean>),

                                        где идентификатор-строка>- имя отладочной сессии.
                                        Примечание : если идентификатор-строка> - пустая строка, то
                                        передается имя пользователя в системе Windows(в верхнем регистре)
                                        (идентификатор регистрозависимый)

                                        где режим отладки> режим отладки модуля: комплексный(True),
                                        хранимых процедур(False),
                                        в случае комплексной отладки - установливается точка отладки при вызове
                                        процедуры PLDBG_ENABLE, и заканчивается при вызове функции PLDBG_DISABLE
                                        (такой режим предпочтительнее при вызове последовательного списка хранимых процедур).
                                        !!! все промежуточные обращения к серверу тоже отлаживаются!!

                                        в случае отладки хранимых процедур - точки отладки устанавливаются
                                        непосредственно перед вызовом хранимой процедуры и снимаются после ее окончания.


                                        Сеанс отладки
                                        3) М>: Запустить необходымые вызовы хранимых процедур, при выполнении которых модуль перейдет в режим ожидания отладки

                                        4) O>: подкючитесь к сессии отладки по идентификатору идентификатор-строка>
                                        переданному в п.2
                                        Примечание:
                                        В SqlNavigator
                                        4.1) Войти в режим PlSql-Отладки (Меню "Session"->"Pl/Sql Debugging")
                                        4.2) Подключиться к сессии (Меню "Debug"->"Attach External Session"),
                                        где ввести идентификатор идентификатор-строка> переданный в п.2
                                        5) O>: выполнить сессию отладки, завершив ее (смотри п.6).

                                        6) O>: !!! Внимание: Для текущей версии Атлантиса необходимо выполнить п. 4
                                        - дважды
                                        в первый - вызываемая процедура, а во втором - завершающий блок отладки.
                                        Считается, что сессия завершилась, когда модуль M> получил управление,
                                        то есть реагируют меню и прочее.


                                        Если необходимо, можно повторить сеанс отладки (п.3- п.6)

                                        8) M>:Чтобы отключить режим отладки, нужно вызвать процедуру PLDBG_DISABLE
                                        Чтобы посмотреть текущее состояние режима отладки нужно вызвать процедуру
                                        ISPLDBG_ENABLE. True-значит режим отладки включен, False - выключен.

                                        Комментарий


                                        • #21
                                          Эту бы фичу, да год назад, когда тред шел...
                                          Но в любом случае, за возможность внедриться в сессию модуля АБС большой респект!

                                          Комментарий

                                          Пользователи, просматривающие эту тему

                                          Свернуть

                                          Присутствует 1. Участников: 0, гостей: 1.

                                          Обработка...
                                          X