Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Возможно неполное завершение транзакции? / 25 сообщений из 49, страница 1 из 2
01.10.2019, 16:48
    #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
01.10.2019, 17:06
    #39870115
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно неполное завершение транзакции?
Не так то, что нет обработки ошибок или хотя бы set xact_on, как и нет явного commit / rollback.
...
Рейтинг: 0 / 0
01.10.2019, 17:24
    #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
01.10.2019, 17:32
    #39870133
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно неполное завершение транзакции?
TaPaKта то вы что-то придумываете, или весь скрипт показывайте или расскажите как у вас 1 выводитТак у вас же лог не переполнился.

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

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

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

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

и всё, потом заходит в COMMIT и комитит то что смогло
...
Рейтинг: 0 / 0
01.10.2019, 17:50
    #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
01.10.2019, 17:53
    #39870160
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно неполное завершение транзакции?
msLexalexeyvgНепонятно, какие это может вызвать эффекты...
С переполнение лога все просто, эта ошибка вызывает откат транзакций с записью undo операций в лог.
Чтобы для таких записей гарантировано хватило место в логе, в момент записи обычных операций, в логе сразу резервируется место под undo операции.Да, это понятно, но откуда взялись 90030 записей?
Вставка прервалась на этапе, когда свободного места в логе не осталось, undo записалось в зарезервированное место.
В таблице осталось 0 записей (вставка откатилась)
Откуда же в ней записи?

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

он же смотрит в этом же сеансе и видит незакоммиченные строки. Автооткат не срабатывает в такой ситуации, как я понимаю.
...
Рейтинг: 0 / 0
01.10.2019, 17:57
    #39870166
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно неполное завершение транзакции?
Владислав Колосовон же смотрит в этом же сеансе и видит незакоммиченные строки.Он же написал, что @@trancount = 0
...
Рейтинг: 0 / 0
01.10.2019, 17:57
    #39870167
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно неполное завершение транзакции?
alexeyvgTaPaKи всё, потом заходит в COMMIT и комитит то что смоглода, или такое объяснение (наравне с тем, что транзакции в начале скрипта вообще не было)
Но тогда это ненормально.
Я понимаю, когда ошибка не влияет на статус транзакции.
Или когда она её откатывает.
Но когда ошибка делает коммит? Это нехорошо.
всё веселье в "** An error was encountered during execution of batch. Continuing." в слове Continuing
отвалило 9070, остальные потом прошли коммит
...
Рейтинг: 0 / 0
01.10.2019, 17:59
    #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
01.10.2019, 18:00
    #39870172
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно неполное завершение транзакции?
alexeyvgОткуда же в ней записи?

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


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

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

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

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

Такое могло бы быть, но к моменту отката большой транзакции в логе осталось 0 места (как я понимаю, так должно быть?), и даже одиночные уже пройти не могли...
дошли до конца лога, все что дальше уже не может зарезервировать и нет уже ни новых в логе никаких, только те что успешные. Общей транзакции нет, всё откатывать нечему
...
Рейтинг: 0 / 0
01.10.2019, 18:11
    #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
01.10.2019, 18:11
    #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
01.10.2019, 18:12
    #39870181
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно неполное завершение транзакции?
Сергей08,

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

Прекращайте Смотреть в том же сеансеПо крайней мере, нужно тогда навставлять select @@trancount, иначе действительно может быть подозрение, что это незакомиченные данные.
...
Рейтинг: 0 / 0
01.10.2019, 19:30
    #39870228
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Возможно неполное завершение транзакции?
Сергей08Если rollback явно то всё идет правильно и если rollback из за полного лога то всё как то по другому.А где у вас "rollback из за полного лога", я не вижу такой команды?
...
Рейтинг: 0 / 0
01.10.2019, 20:36
    #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
01.10.2019, 21:13
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Возможно неполное завершение транзакции? / 25 сообщений из 49, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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