powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Вопрос по транзакциям
9 сообщений из 9, страница 1 из 1
Вопрос по транзакциям
    #36496529
Alevtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Напомните пожалуйста (давно с Informix не работал).
Если я открываю транзакцию. Начинаю update-ить необходимые мне таблицы с анализом результатов выполнения по каждой таблице и спотыкаюсь на одной из таблиц, то возникает вопрос по таблице на которой произошла ошибка. Если я закрою транзакцию, то update записей в таблице, на которой произошла ошибка откатятся или все таки часть записей в этой таблице останутся проапдейчеными?
Заранее спасибо.
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #36496579
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alevtin Если я закрою транзакцию

Зависит от того , как "закроете" транзакцию.
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #36496658
Alevtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IkirAlevtin Если я закрою транзакцию
Зависит от того , как "закроете" транзакцию.
Речь идет о том, что я хочу именно "закрыть" (commit work) транзакцию, а не откатить ее целиком. Что будет, если сделать rollback мне и так понятно.
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #36496876
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlevtinIkirAlevtin Если я закрою транзакцию
Зависит от того , как "закроете" транзакцию.
Речь идет о том, что я хочу именно "закрыть" (commit work) транзакцию, а не откатить ее целиком. Что будет, если сделать rollback мне и так понятно.
В таком случае (commit work) будут зафиксированы все измененные на данный момент строки во всех таблицах, за исключением тех, которые не были модифицированы из-за ошибки или не успели измениться к моменту фиксации. А как могло быть по другому ?
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #36496931
Alevtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vasilis,

извините, но расскажите еще раз неразумному.......
Что будет с таблицами, которые изменялись в пределах данной транзакции до момента возникновения ошибки, я знаю.
Меня интересует таблица, на которой произошла ошибка. Если я делаю update таблицы через курсор и к моменту возникновения ошибки успел в этой таблице проапдейтить 754 (например) записи, то после того как возникла ошибка и я закрыл транзакцию принудительно, что будет с этими 754 записями. Они откатятся или будут зафиксированы?
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #36497032
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alevtin,

будут зафиксированы
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #36497407
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alevtin, будут зафиксированы, поскольку "через курсор" - это несколько команд (хоть и одинаковых). Если был бы один "атомарный" "UPDATE tbl SET fld=vl" - то эти данные остались бы неизменёнными.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
CREATE TABLE loy1(id INT);

INSERT INTO loy1 VALUES( 1 );
INSERT INTO loy1 VALUES( 2 );

CREATE TABLE loy2(id INT);

ALTER TABLE loy2
  ADD CONSTRAINT
    CHECK (id <  3 ); 

INSERT INTO loy2 VALUES( 1 );
INSERT INTO loy2 VALUES( 2 );

BEGIN WORK;

UPDATE loy1 SET id =  4 ;
UPDATE loy2 SET id =  4 ;

COMMIT WORK;

SELECT * FROM loy1;

id
 4 
 4 


SELECT * FROM loy2;

id
 1 
 2 

DROP TABLE loy1;
DROP TABLE loy2;
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #36497668
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если требуется откатить только часть транзакции можно использовать sql-оператор ROLLBACK TO SAVEPOINT
...
Рейтинг: 0 / 0
Вопрос по транзакциям
    #36497725
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛой... Если был бы один "атомарный" "UPDATE tbl SET fld=vl" - то эти данные остались бы неизменёнными.
Говоря более простым английским :) и чтобы подчеркнуть важность вышесказанного и уточнить момент транзакционности БД:
The logging status of a database determines what happens after an error has occurred when an SQL statement that affects more than one row in a table is executed.
- Logged databases.
If an error occurs, no further rows are processed. Any changes that have already been made to the table are rolled back. All of this activity is recorded in the log file.
- Unlogged databases.
If an error occurs, no further rows are processed. Any changes that have already been made to the table, however, remain in place.
АнатоЛой
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE loy1(id INT);
INSERT INTO loy1 VALUES( 1 );
INSERT INTO loy1 VALUES( 2 );
CREATE TABLE loy2(id INT);
ALTER TABLE loy2
  ADD CONSTRAINT
    CHECK (id <  3 ); 
INSERT INTO loy2 VALUES( 1 );
INSERT INTO loy2 VALUES( 2 );
BEGIN WORK;
UPDATE loy1 SET id =  4 ;
UPDATE loy2 SET id =  4 ;
COMMIT WORK;
SELECT * FROM loy1;
SELECT * FROM loy2;
DROP TABLE loy1;
DROP TABLE loy2;

Мне кажется, что более показательным был бы следующий update
UPDATE loy1 SET id = id+1;
UPDATE loy2 SET id = id+1;
и вариант даже без явного указания транзакции (т.е. использование singleton transaction)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Вопрос по транзакциям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]