Апр 082011
 

Иногда при выполнении манипуляций с данными администратор (особенно начинающий) забывает выполнить команду COMMIT, и после закрытия сессии он теряет все изменения и немалую часть нервных клеток. Повторяясь несколько раз, эта ситуация заставляет его делать COMMIT после каждой операции, что снижает продуктивность.
Чтобы понять, когда нужно и когда не нужно фиксировать транзакции, надо разобраться с типами SQL-выражений.

  1. DML

    Это выражения языка манипуляций данными - Data Manipulation Language. К ним относятся:

    • SELECT
    • INSERT
    • UPDATE
    • DELETE
    • MERGE
    • CALL - вызов PL/SQL блока, в том числе и анонимного (*)
    • EXPLAIN PLAN
    • LOCK TABLE
  2. DDL

    Это выражения языка определения данных - Data Definition Language. К ним относятся:

    • CREATE
    • ALTER
    • DROP
    • TRUNCATE
    • COMMENT
    • RENAME
  3. DCL

    Это выражения языка контроля данных - Data Control Language. К ним относятся:

    • GRANT
    • REVOKE

Итак: Если выполняется DDL или DCL, то ORACLE автоматически выполняет COMMIT до и после команды. В противном случае, фиксировать транзакцию надо вручную.

* Важно! Если мы вызываем какую-либо процедуру из пакета и она не содержит в себе COMMIT'ов или выполняем анонимный PL/SQL блок, то фиксировать транзакцию нужно обязательно. Например, некоторые администраторы после использования процедур пакета DBMS_JOB не делают COMMIT, и потом долго пытаются понять, почему не удаётся с его помощью управлять заданиями.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)