Подтвердить что ты не робот

Оракул - какие заявления нужно совершить?

Каков список инструкций, которые необходимо выполнить перед дальнейшими действиями в таблице, чтобы избежать блокировки? Я не говорю о полных транзакциях с несколькими операторами и целостностью транзакций (вместо этого я имею в виду одиночные утверждения).

Я знаю, что вставка должна быть зафиксирована, но усечка имеет автокоманду. Каков полный список заявлений, которые необходимо совершить?

Необходимо совершить (список стартеров):

UPDATE
INSERT
DELETE
4b9b3361

Ответ 1

Команды DML (Data Manipulation Language) должны быть объявлены/откат назад. Здесь - список этих команд.

Операторы языка данных (DML) используются для управления данными внутри объектов схемы. Некоторые примеры:

SELECT - retrieve data from the a database
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

Ответ 2

В механических терминах COMMIT совершает транзакцию. То есть, транзакция - это все действия (одно или несколько операторов DML), которое происходит между двумя операторами COMMIT (или ROLLBACK).

В Oracle оператор DDL представляет собой транзакцию по своему усмотрению просто потому, что неявный COMMIT выдается до выполнения оператора и снова после этого.

С точки зрения дизайна системы транзакция является бизнес-единицей работы. Он может состоять из одного оператора DML или нескольких из них. Это не имеет значения: для полного транзакции требуется COMMIT. В буквальном смысле не имеет смысла выпускать COMMIT до тех пор, пока мы не закончим целую бизнес-единицу работы.

Это ключевая концепция. COMMIT не только выпускают блокировки. В Oracle они также выпускают защелки, такие как "Список транзакций". Это влияет на модель согласованности чтения Oracle. Исключения, такие как ORA-01555: SNAPSHOT TOO OLD или ORA-01002: FETCH OUT OF SEQUENCE, происходят из-за несоответствующих коммитов. Следовательно, очень важно, чтобы наши транзакции зависали на замках до тех пор, пока они им нужны.

Ответ 3

DML должен быть зафиксирован или откат. DDL не может.

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

Вы можете включить автоматическую фиксацию и снова использовать только для DML. DDL никогда не являются частью транзакций, и поэтому нет ничего похожего на явный фиксация/откат.

truncate является DDL и поэтому неявно совершается.

Edit
Я должен извиниться. Подобно @DCookie и @APC, указанным в комментариях, существуют такие же скрытые фиксации для DDL. См. Здесь вопрос о том, что на Ask Tom. Это в отличие от того, что я узнал, и мне все еще немного любопытно.

Ответ 4

И ключевой момент - хотя TRUNCATE TABLE выглядит как DELETE без предложения WHERE, TRUNCATE не является DML, это DDL. DELETE требует COMMIT, но TRUNCATE не делает.