powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Возможно неполное завершение транзакции?
49 сообщений из 49, показаны все 2 страниц
Возможно неполное завершение транзакции?
    #39870096
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
попытался воспроизвести проблему с логом.
Условия: 8 mb data 8 mb log. Full recovery, autogrows -No.
-стартую транзакцию
begin tran
-проверяю
select @@trancount
1
-внутри транзакции:
insert into test values('aaaaaaaa')
go 100000
-в процессе выполнения 90030 вставилось и транзакция для этих 90030 Закомитилась без меня!
для остальных строк ошибка:
(1 row affected)
** An error was encountered during execution of batch. Continuing.

В результате транзакция выполнена частично ? В логе само собой Message
The transaction log for database 'mydb1' is full due to 'ACTIVE_TRANSACTION'.

select count(*) from test
90030
select @@trancount
0

Что не так?
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870115
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не так то, что нет обработки ошибок или хотя бы set xact_on, как и нет явного commit / rollback.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870125
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08,

та то вы что-то придумываете, или весь скрипт показывайте или расскажите как у вас 1 выводит


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BEGIN TRAN 

SELECT @@TRANCOUNT

SELECT 'aaaa'
GO 5

ROLLBACK

SELECT @@TRANCOUNT
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870133
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKта то вы что-то придумываете, или весь скрипт показывайте или расскажите как у вас 1 выводитТак у вас же лог не переполнился.

Непонятно, какие это может вызвать эффекты...
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870146
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgНепонятно, какие это может вызвать эффекты...
С переполнение лога все просто, эта ошибка вызывает откат транзакций с записью undo операций в лог.
Чтобы для таких записей гарантировано хватило место в логе, в момент записи обычных операций, в логе сразу резервируется место под undo операции.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870148
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,
Я не спорю, что не всё красиво выполнено.
В моём понимании скрипт ниже должен инициировать 1 транзакцию. В результате похоже выполняется 100000 транзакций и при переполнении лога откатываются только те которые не влезли.

begin tran
go
insert into test values('aaaaaaaa')
go 100000
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870150
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08,

не так то, что забыли rollback написать.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870151
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08,

а, там всё проще
GO валит всё в
** An error was encountered during execution of batch. Continuing.
и ошибку лога.

и всё, потом заходит в COMMIT и комитит то что смогло
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870156
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08Гавриленко Сергей Алексеевич,
Я не спорю, что не всё красиво выполнено.
В моём понимании скрипт ниже должен инициировать 1 транзакцию. В результате похоже выполняется 100000 транзакций и при переполнении лога откатываются только те которые не влезли.

begin tran
go
insert into test values('aaaaaaaa')
go 100000

batch... весь 10 000 раз... 10000 раз BEGIN TRAN ваш...
если предыдущий скрипт не понятен, дёрнгайте так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
BEGIN TRAN 
---CREATE TABLE dbo.test_XX(a int)
INSERT INTO  dbo.test_XX(a) VALUES(@@Trancount)
GO 5

COMMIT

SELECT @@TRANCOUNT
SELECT * FROM test_XX
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870160
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLexalexeyvgНепонятно, какие это может вызвать эффекты...
С переполнение лога все просто, эта ошибка вызывает откат транзакций с записью undo операций в лог.
Чтобы для таких записей гарантировано хватило место в логе, в момент записи обычных операций, в логе сразу резервируется место под undo операции.Да, это понятно, но откуда взялись 90030 записей?
Вставка прервалась на этапе, когда свободного места в логе не осталось, undo записалось в зарезервированное место.
В таблице осталось 0 записей (вставка откатилась)
Откуда же в ней записи?

Разве что ТС перепутал, и транзакции не было.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870162
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKи всё, потом заходит в COMMIT и комитит то что смоглода, или такое объяснение (наравне с тем, что транзакции в начале скрипта вообще не было)
Но тогда это ненормально.
Я понимаю, когда ошибка не влияет на статус транзакции.
Или когда она её откатывает.
Но когда ошибка делает коммит? Это нехорошо.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870165
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

он же смотрит в этом же сеансе и видит незакоммиченные строки. Автооткат не срабатывает в такой ситуации, как я понимаю.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870166
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосовон же смотрит в этом же сеансе и видит незакоммиченные строки.Он же написал, что @@trancount = 0
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870167
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgTaPaKи всё, потом заходит в COMMIT и комитит то что смоглода, или такое объяснение (наравне с тем, что транзакции в начале скрипта вообще не было)
Но тогда это ненормально.
Я понимаю, когда ошибка не влияет на статус транзакции.
Или когда она её откатывает.
Но когда ошибка делает коммит? Это нехорошо.
всё веселье в "** An error was encountered during execution of batch. Continuing." в слове Continuing
отвалило 9070, остальные потом прошли коммит
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870170
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
развлекайтесь
база:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
USE master;
GO
CREATE DATABASE FullLog
ON
( NAME = FullLog_data,
    FILENAME = 'E:\SQL\fulllog.mdf',
    SIZE = 10,
    MAXSIZE = 50,
    FILEGROWTH = 5 )
LOG ON
( NAME = FullLog_log,
    FILENAME = 'E:\SQL\fulllog.ldf',
    SIZE = 1MB,
    MAXSIZE = 1MB,
    FILEGROWTH = 0MB ) ;
GO
USE FullLog;
GO
CREATE TABLE dbo.test_XX(a int)
/*
USE Master;
GO
DROP DATABASE FullLog
*/


и заполнение

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
USE FullLog;
GO
SET NOCOUNT ON
BEGIN TRAN 

INSERT INTO  dbo.test_XX(a) VALUES(@@Trancount)
GO 1000

COMMIT 

SELECT @@TRANCOUNT
SELECT * FROM test_XX
--USE master
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870172
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgОткуда же в ней записи?

Разве что ТС перепутал, и транзакции не было.


Все что угодно
От "автор что-то сделал не так в процессе эксперимента"
До "автор где-то не там смотрит результаты эксперимента"

ошибка вставки могла быть любая, а не только та, что пишется в логи сервера, а "log full" осталось совсем других экспериментов
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870173
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKalexeyvgпропущено...
да, или такое объяснение (наравне с тем, что транзакции в начале скрипта вообще не было)
Но тогда это ненормально.
Я понимаю, когда ошибка не влияет на статус транзакции.
Или когда она её откатывает.
Но когда ошибка делает коммит? Это нехорошо.
всё веселье в "** An error was encountered during execution of batch. Continuing." в слове Continuing
отвалило 9070, остальные потом прошли коммитА, то есть был роллбак, а потом уже одиночные стейтменты коммитились полодиночке?

Такое могло бы быть, но к моменту отката большой транзакции в логе осталось 0 места (как я понимаю, так должно быть?), и даже одиночные уже пройти не могли...
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870176
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgTaPaKпропущено...

всё веселье в "** An error was encountered during execution of batch. Continuing." в слове Continuing
отвалило 9070, остальные потом прошли коммитА, то есть был роллбак, а потом уже одиночные стейтменты коммитились полодиночке?

Такое могло бы быть, но к моменту отката большой транзакции в логе осталось 0 места (как я понимаю, так должно быть?), и даже одиночные уже пройти не могли...
дошли до конца лога, все что дальше уже не может зарезервировать и нет уже ни новых в логе никаких, только те что успешные. Общей транзакции нет, всё откатывать нечему
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870179
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKОбщей транзакции нет, всё откатывать нечемуТак вот же, в скрипте: "begin tran"

То есть последовательность такая:
Сергей08-стартую транзакцию
----------------------------------- В логе место есть.
begin tran
-проверяю
select @@trancount
1
----------------------------------- Большая транзакция стартовала
-внутри транзакции:
insert into test values('aaaaaaaa')
go 100000
-в процессе выполнения 90030 вставилось и транзакция для этих 90030 Закомитилась без меня!
----------------------------------- После 90030 вставок в логе место закончилось.
для остальных строк ошибка:
(1 row affected)
----------------------------------- Места в логе нет, остальные 9970 строк не вставилисьместо закончилось.
** An error was encountered during execution of batch. Continuing.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870180
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ниже два скрипта , поведение которых должно быть похоже. Если rollback явно то всё идет правильно и если rollback из за полного лога то всё как то по другому.


begin tran
go
insert into test values('aaaaaa')
go 10
rollback tran
go
select count(*) from test where f='aaaaaa'
go

====================output

Beginning execution loop

(1 row affected)

......

(1 row affected)

(1 row affected)
Batch execution completed 10 times.

-----------
0

--------------------------------------------------------log full----------------------------------

begin tran
go
insert into test values('aaaaaa')
go 100000
---rollback due to full log ??
select count(*) from test where f='aaaaaa'
go

=======================================output
Beginning execution loop

(1 row affected)

...........

(1 row affected)
Msg 9002, Level 17, State 4, Line 40
The transaction log for database 'mydb1' is full due to 'ACTIVE_TRANSACTION'.
** An error was encountered during execution of batch. Continuing.

(1 row affected)
** An error was encountered during execution of batch. Continuing.

(1 row affected)
** An error was encountered during execution of batch. Continuing.

........


(1 row affected)
** An error was encountered during execution of batch. Continuing.
Batch execution completed 100000 times.

-----------
94779

(1 row affected
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870181
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08,

Прекращайте Смотреть в том же сеансе
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870227
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKСергей08,

Прекращайте Смотреть в том же сеансеПо крайней мере, нужно тогда навставлять select @@trancount, иначе действительно может быть подозрение, что это незакомиченные данные.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870228
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08Если rollback явно то всё идет правильно и если rollback из за полного лога то всё как то по другому.А где у вас "rollback из за полного лога", я не вижу такой команды?
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870249
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавил ролбек , что бы было видно, что ролбечить уже нечего. ROLLBACK TRANSACTION request has no corresponding
т.е. датасервер сам завершил начатую мной транзакцию.

--------------------
truncate table test
go
select count(*) as count_of_rows from test
go
select @@trancount as trancount
go
begin tran
go
select @@trancount as trancount
go
insert into test values('aaaaaa')
go 100000
select @@trancount as trancount
go
rollback tran
go
select count(*) count_of_rows from test where f='aaaaaa'
go


=======================================output==================

count_of_rows
-------------
0

(1 row affected)

trancount
-----------
0

(1 row affected)

trancount
-----------
1

(1 row affected)

Beginning execution loop

(1 row affected)
(1 row affected)

.............................................
.............................................
.............................................

(1 row affected)

Msg 9002, Level 17, State 13, Line 11
The transaction log for database 'mydb1' is full due to 'OLDEST_PAGE'.
** An error was encountered during execution of batch. Continuing.

(1 row affected)
** An error was encountered during execution of batch. Continuing.

.........................................
.........................................

(1 row affected)
** An error was encountered during execution of batch. Continuing.

(1 row affected)
** An error was encountered during execution of batch. Continuing.
Batch execution completed 100000 times.

trancount
-----------
0

(1 row affected)

Msg 3903, Level 16, State 1, Line 15
The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.
count_of_rows
-------------
92875

(1 row affected)
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870256
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей08Добавил ролбек , что бы было видно, что ролбечить уже нечего. ROLLBACK TRANSACTION request has no corresponding
т.е. датасервер сам завершил начатую мной транзакцию.В общем, выяснил.

Это сообщение: "** An error was encountered during execution of batch. Continuing." - некий баг клиента, связан с выполнением конструкции GO nnn
Команды после батча прекрасно выполняются.

То есть если поставить в конце скрипта
Код: sql
1.
2.
insert into test values('aaaaaa')
go 2

То будет вставлено 2 записи.

На самом деле после ошибки
Код: sql
1.
2.
Msg 9002, Level 17, State 13, Line 11
The transaction log for database 'mydb1' is full due to 'OLDEST_PAGE'.

большая транзакция откатывается, и вставляются оставшиеся строки, уже после отката, и вот их то и видно в запросе "select count(*) count_of_rows from test"

При этом после каждой успешной вставки строки сервер пишет " An error was encountered during execution of batch. Continuing."
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870261
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

А пишет не так? Ещё раз Continuing
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870267
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
Не будем использовать go nnn :)
попроовал использовать
while @@id <10000
begin
end
Работает как и должно работать
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870268
Сергей08
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
Похоже не стоит использовать go nnn
C while работает нормпльно
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870290
DbDude
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей08,
Посмотрите вот эту статью от Erland Sommarskog:
http://www.sommarskog.se/error_handling/Part2.html
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870295
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKalexeyvg,

А пишет не так? Ещё раз ContinuingВ каком смысле "не так"?
Да, было написано Continuing, и что происходит, я не понимал, потому что надпись не соответствовала происходящему (в итоге и оказалось, что происходит совсем не то).
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870347
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgTaPaKalexeyvg,

А пишет не так? Ещё раз ContinuingВ каком смысле "не так"?
Да, было написано Continuing, и что происходит, я не понимал, потому что надпись не соответствовала происходящему (в итоге и оказалось, что происходит совсем не то).
и что не то? сколоко транзакций не сложились, соклько то остались не commit где там загадка прям
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870354
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKalexeyvgпропущено...
В каком смысле "не так"?
Да, было написано Continuing, и что происходит, я не понимал, потому что надпись не соответствовала происходящему (в итоге и оказалось, что происходит совсем не то).
и что не то? сколоко транзакций не сложились, соклько то остались не commit где там загадка прямЗагадка в том, что 90 тыщ запросов insert были выполнены с сообщением " An error was encountered during execution of batch. Continuing.", однако никаких "An error" не было.

И это сообщение - именно сообщение конструкции go nnn
Если делать цикл, или просто писать insert-ы, то такого сообщения нет.

Я просто не знал о специальных сообщениях студии для конструкции go nnn, поэтому удивлялся, пока не сделал репро и не разобрался.

Вы же, наверное, тоже не знали, иначе зачем это: "Прекращайте Смотреть в том же сеансе", или "та то вы что-то придумываете, или весь скрипт показывайте или расскажите как у вас 1 выводит"?

Ещё вы вот это писали:
TaPaKСергей08,

а, там всё проще
GO валит всё в
** An error was encountered during execution of batch. Continuing.
и ошибку лога.

и всё, потом заходит в COMMIT и комитит то что смогло
Наверное, это правильное объяснение, но очень лаконичное, я не понял, что имеется в виду, что :
" заходит в COMMIT и комитит то что смогло "
- это значит:
" делает ROLLBACK, а потом исполняет одиночные стейтменты без большой транзакции, с автоматическим COMMIT-ом после каждого стейтмента ",
а сообщение "An error was ..." относится к последней ошибке, и практического смысла в её выводе на каждый инсёрт нет.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870364
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,
автор"делает ROLLBACK, а потом исполняет одиночные стейтменты без большой транзакции, с автоматическим COMMIT-ом после каждого стейтмента",

ТУТ нет никакго автоматического коммита после кажой транзакции. После всего имеем столько открытых транзакций сколько возможно закомитить
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870369
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то так
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870370
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKкак-то такВо втором варианте скрипта у автора перед инсертом стоит go, поэтому go 100000 у него повторяет только строку с инсертом, но не begin transaction. Поэтому явно запущенная транзакция откатилась при переполнении лога, и дальше строки вставлялись неявными транзакциями при выполнении в insert. Поэтому и @@trancount после всего этого процесса равен 0.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870371
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKalexeyvg,
автор"делает ROLLBACK, а потом исполняет одиночные стейтменты без большой транзакции, с автоматическим COMMIT-ом после каждого стейтмента",

ТУТ нет никакго автоматического коммита после кажой транзакции. После всего имеем столько открытых транзакций сколько возможно закомититьЯ имею в виду, что после отката с сообщеним об ошибке, большой транзакции нет, и каждый инсёрт выполняется в своей транзакции, которая потом коммитится.

Это была моя интерпретация ваших слов.
Я просто пытаюсь понять, что означала ваша фраза "и всё, потом заходит в COMMIT и комитит то что смогло"
Что это за COMMIT? Что в результате этот COMMIT зафиксировал, какую транзакцию? Сколько в этой транзакции было вставлено строк?
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870376
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinamotoTaPaKкак-то такВо втором варианте скрипта у автора перед инсертом стоит go, поэтому go 100000 у него повторяет только строку с инсертом, но не begin transaction. Поэтому явно запущенная транзакция откатилась при переполнении лога, и дальше строки вставлялись неявными транзакциями при выполнении в insert. Поэтому и @@trancount после всего этого процесса равен 0.
да, при разделении так, откатывает первую, потом вставляет всё что может, т.е. пропускает первые N которые были вызваны перполнением, потом неявной транзакцией сразу с комитом
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870404
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgЯ имею в виду, что после отката с сообщеним об ошибке, большой транзакции нет, и каждый инсёрт выполняется в своей транзакции, которая потом коммитится.

да ничего там не коммитится вообще.
и в таблице в результате ничего нет.
не знаю, что там у вас такое странное делается,
или вы не дожидаетесь завершения,
но вот мой эксперимент.
все те же исходные данные, 8Мб данных, 8Мб лога,
таблица слегка другая:
Код: sql
1.
create table dbo.test(id int identity, col char(8))


(ну вдруг бы что-то в таблицу попало, хоть посмотреть, что именно...
если верить всем тут отписавшимся, какие-то коммиты тут у вас...)

запрос:
Код: sql
1.
2.
3.
4.
5.
set nocount on;
begin tran

insert into test(col) values('aaaaaaaa')
go 100000



показываю, что ушло в лог.
надо сказать, 2016-ый после чекпойнта и бэкапа лога написал мне 12 записей в лог, из них
2 LOP_BEGIN_XACT и 2 LOP_COMMIT_XACT, их исключаю на картинке.

и вот кроме этих двух LOP_COMMIT_XACT никаких коммитов не было и нету.
сколько смог, вставил, лог переполнил, откатил.
заново транзакцию открыл, чтобы в ней вставлять, снова переполнил, снова откатил.
с каждой попыткой вставить получалось все меньше, т.к. лог закакан.
но все равно последнее, что сделал, это откат
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870414
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123, таблица слегка другая, запрос не совпадает, но результаты почему то другие - действительно, почему это :)
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870417
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сейчас переделаю с ровно той же таблицей.
а запрос как раз его и есть.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870424
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123сейчас переделаю с ровно той же таблицей.
а запрос как раз его и есть.
та всё у вас так. при таком запросе остаются все остаются незакомиченные.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870426
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123сейчас переделаю с ровно той же таблицей.
а запрос как раз его и есть.Не, про запрос показания путаются.
Вот тут: 21984346 уже стоит go между begin transaction и insert - и это как раз и дает разницу в поведении.
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870444
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123alexeyvgЯ имею в виду, что после отката с сообщеним об ошибке, большой транзакции нет, и каждый инсёрт выполняется в своей транзакции, которая потом коммитится.

да ничего там не коммитится вообще.
и в таблице в результате ничего нет.Вот, полный тест; сделал, что бы в таблице оставалось 5 строк
Код: sql
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.
37.
38.
39.
40.
41.
use master 
go
drop DATABASE [test_mydb1]
go
CREATE DATABASE [test_mydb1]
 ON  PRIMARY 
( NAME = N'test_mydb1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\test_mydb1.mdf' , SIZE = 8192KB , FILEGROWTH = 0)
 LOG ON 
( NAME = N'test_mydb1_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\test_mydb1_log.ldf' , SIZE = 1024KB , FILEGROWTH = 0)
GO
USE [test_mydb1]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [test] MODIFY FILEGROUP [PRIMARY] DEFAULT
GO
create table test (id int identity, val char(8000))
go
truncate table test
go
select count(*) as count_of_rows from test
go
select @@trancount as trancount1
go
begin tran
go
select @@trancount as trancount2
go

insert into test(val) values('aaaaaa')
go 70

select @@trancount as trancount3
go
select count(*) count_of_rows1 from test 
go
rollback tran
go
select @@trancount as trancount4
go
select count(*) count_of_rows2 from test 
select * from test 
go


...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870446
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinamotoYasha123сейчас переделаю с ровно той же таблицей.
а запрос как раз его и есть.Не, про запрос показания путаются.
Вот тут: 21984346 уже стоит go между begin transaction и insert - и это как раз и дает разницу в поведении.Ну понятно, нужно поставить go перед insert, а то что получается, 10 000 раз begin tran?
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870452
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да уж...

без identity делает так:
сперва все те же

LOP_ABORT_XACT NULL 1
LOP_BEGIN_XACT NULL 1
LOP_DELETE_ROWS dbo.test 19721
LOP_INSERT_ROWS dbo.test 19721


затем начинает постранично писать с коммитом:
LOP_BEGIN_XACT
LOP_COMMIT_XACT
LOP_FORMAT_PAGE
LOP_HOBT_DELTA
LOP_MODIFY_ROW

а потом с какого-то момента посточно
и тоже с коммитом:
LOP_BEGIN_XACT NULL 1
LOP_COMMIT_XACT NULL 1
LOP_INSERT_ROWS dbo.test 1

и теперь в таблице у меня 4885 строк
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870454
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MinamotoYasha123сейчас переделаю с ровно той же таблицей.
а запрос как раз его и есть.Не, про запрос показания путаются.
Вот тут: 21984346 уже стоит go между begin transaction и insert - и это как раз и дает разницу в поведении.
хоть и нет у меня go перед инсертом,
но выполняю я, выделив 2 строки:
Код: sql
1.
2.
insert into test values('aaaaaaaa')
go 100000


так что никаких многократных открытий транзакций в явном виде у меня нет
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870471
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123так что никаких многократных открытий транзакций в явном виде у меня нетЗначит, что то ещё не совпадает.

Надёжнее делать полный репро, возьмите мой, что бы посмотреть.

Ещё, может, у вас какие то установки студии другие...
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870475
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgYasha123так что никаких многократных открытий транзакций в явном виде у меня нетЗначит, что то ещё не совпадает.

Надёжнее делать полный репро, возьмите мой, что бы посмотреть.

Ещё, может, у вас какие то установки студии другие...
для полного совпадения нужно еще совпадение версий серверов.
в лог же разное пишется
...
Рейтинг: 0 / 0
Возможно неполное завершение транзакции?
    #39870497
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никогда не использовал GO NN. Однако, можно прикрутить к этому какую-то devops автоматизацию или отладку.
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Возможно неполное завершение транзакции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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