oracle - jakich oświadczeń należy przestrzegać?

Jaka jest lista oświadczeń, które muszą zostać popełnione przed dalszym działaniem na stole, aby uniknąć blokady? Nie mówię o pełnych Transakcjach z wieloma oświadczeniami i integralnością transakcji; zamiast tego mam na myśli pojedyncze Oświadczenia.

Wiem, że insert powinien być zaangażowany, ale truncate ma autocommit. Jaka jest pełna lista oświadczeń, które należy zobowiązać?

Potrzeba zaangażowania (lista startowa):

UPDATE
INSERT
DELETE
Author: APC, 2012-03-03

4 answers

Polecenia DML (Data Manipulation Language) muszą być przekazane/wycofane. Tutaj {[3] } jest lista tych poleceń.

Wyrażenia Data Manipulation Language (DML) są używane do zarządzania danymi wewnątrz obiektów schematu. Niektóre przykłady:

INSERT - insert data into a table
UPDATE - updates existing data within a table
DELETE - deletes all records from a table, the space for the records remain
MERGE - UPSERT operation (insert or update)
CALL - call a PL/SQL or Java subprogram
EXPLAIN PLAN - explain access path to data
LOCK TABLE - control concurrency
 46
Author: rics,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-15 08:47:46

W sensie mechanicznym COMMIT dokonuje transakcji. Oznacza to, że transakcja to cała aktywność (jedno lub więcej poleceń DML), która występuje pomiędzy dwoma poleceniami COMMIT (lub ROLLBACK).

W Oracle polecenie DDL jest transakcją samą w sobie dlatego, że przed wykonaniem polecenia i po jego wykonaniu zostanie wydany niejawny COMMIT. TRUNCATE jest komendą DDL, więc nie potrzebuje jawnego commita, ponieważ wywołanie go wywołuje niejawny commit.

Z systemu perspektywa projektowa transakcja jest jednostką biznesową pracy. Może składać się z pojedynczej deklaracji DML lub kilku z nich. Nie ma znaczenia: tylko pełne transakcje wymagają zatwierdzenia. To dosłownie nie ma sensu wydawać COMMIT, chyba że lub dopóki nie ukończymy całej jednostki biznesowej pracy.

To kluczowa koncepcja. Commity nie tylko zwalniają blokady. W Oracle wypuszczają również zatrzaski, takie jak lista zainteresowanych transakcji. Ma to wpływ ze względu na odczyt Oracle model spójności. Wyjątki takie jak ORA-01555: SNAPSHOT TOO OLD LUB ORA-01002: FETCH OUT OF SEQUENCE występują z powodu niewłaściwych commitów. W związku z tym ważne jest, aby nasze transakcje zawieszały się na zamkach tak długo, jak ich potrzebują.
 10
Author: APC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-11 05:34:59

DML muszą być popełnione lub sfałszowane. DDL nie może.

Http://www.orafaq.com/faq/what_are_the_difference_between_ddl_dml_and_dcl_commands

Możesz włączyć auto-commit i to znowu tylko dla DML. DDL nigdy nie są częścią transakcji i dlatego nie ma to jak jawny commit/rollback.

truncate jest DDL i w związku z tym w sposób dorozumiany.

Edit
Muszę cię przeprosić. Tak jak @DCookie i @APC stwierdzili w komentarzach exist sth like implicit commits for DDL. Zobacz tutaj, aby zadać pytanie na zapytaj Toma . Jest to w przeciwieństwie do tego, czego się nauczyłem i nadal jestem trochę ciekawy.

 5
Author: Fabian Barney,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-03 00:37:06

I kluczowy punkt - chociaż TRUNCATE TABLE wygląda jak DELETE bez klauzuli WHERE, TRUNCATE to nie DML, to DDL. DELETE wymaga zatwierdzenia, ale TRUNCATE tego nie robi.

 2
Author: John Flack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-07 17:27:42