Pular para o conteúdo
#79929
DanielB
Participante

    a ver si es esto lo que sucede

    Problem Description

    Consider a Form which contains a timer. This timer fires for example
    every 10 seconds. The action of this timer is to keep a screen
    always up to date, based on a regular data refresh.

    To do so, you define a timer which fires the WHEN-TIMER-EXPIRED
    trigger. This trigger opens a cursor, fetches data from a table, assigns
    data to visible items on the Form and eventually closes the cursor.

    This works fine.
    Now, you let your Forms application run and open a SQLPlus session.
    In this SQL
    Plus session, you update data in the table queried by the
    cursor and commit changes. You can see changed data in SQLPlus with
    a simple SELECT statement. Data changes are really committed because you
    can see the changes as well in another SQL
    Plus session.
    However, the changed data do not get refreshed in Forms: it seems that
    Forms reads the old data, although the cursor is opened, fetched and
    closed everytime the timer expires.

    You can also get from time to time the ORA-8177 error message:
    Error: ORA 8177

    Text: cannot serialize access for this transaction

    Cause: Oracle encountered data changed by an operation that occurred after
    the start of this serializable transaction
    Action: In read/write transactions, retry the intended operation or
    transaction.

    Solution Description

    This sitatuation can happen if the Form-level property “Isolation Mode”
    is set to “Serializable”.

    Change it back to the default value “Read Committed” and the data is properly
    displayed and refreshed in the Form.

    Explanation (from the Forms Builder online help)

    The “Isolation Mode” Form-level property specifies whether or not transactions
    in a session will be serializable. If Isolation Mode has the value Serializable,
    the end user sees a consistent view of the database for the entire length of the
    transaction, regardless of updates committed by other users from other sessions.
    If the end user queries and changes a row, and a second user updates and commits
    the same row from another session, the first user sees Oracle error
    (ORA-08177: Cannot serialize access.).
    Serializable mode is best suited for an implementation where few users are
    performing a limited number of transactions against a large database; in other
    words, an implementation where there is a low chance that two concurrent
    transactions will modify the same row, and where long-running transactions are
    queries.
    For transaction-intensive implementations, leave Isolation Mode set to Read
    Committed (the default). Serializable mode is best used in conjunction with the
    block-level property Locking Mode set to Delayed.