Переключение на Главную Страницу Страницы: 1 [2] 3 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) Может быть кто сталкивался с ошибкой записи нового документа?( sql версия ) (число прочтений - 17379 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #15 - 07. Сентября 2009 :: 13:43
Печать  
Цитата:
Со штатными блокировками не игрался?

нет
subj Сейчас все работает на стандарной 1с версии блокировок.
Как раз если использовать свои блокировки то subj
никогда не будет потому что для своих блокировок строка
select @i=1 from DH196(TABLOCKX HOLDLOCK) where 0=1
и аналогичные ей комментаряться полностью.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #16 - 07. Сентября 2009 :: 13:59
Печать  
Дополнение к subj
не уверен что остается именно файловая блокировка
потому что если делать тест сразу после входа в 1с
файл 1sjourn.$lnk не создается вообще.
Т.е. это мое предположение subj о наличии именно файловой блокировки на основании проведенных опытов скорее всего ошибочно.

Скорее всего что-то другое отмеченное внутри 1с или вне 1с не сбрасываетсяи 1с считает что идет транзакция хотя никакой транзакции уже нет. Так все вроде удалось достичь повторяемости
ошибки может кто либо и скажет в чем причина или предложит
как выйти из этой ситуации.
Ну и во вторых почему все это пишу ведь  subj может
случиться с  каждым так пусть народ знает что есть
такой баг или грабли.

Так же subj происходит при очень большой нагрузке на базу.
При средних и малых нагрузках не возникал никогда.
  
Наверх
 
IP записан
 
DEVIce
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 12
Зарегистрирован: 24. Октября 2007
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #17 - 09. Сентября 2009 :: 11:23
Печать  
Была похожая ситуация, при мне ее так и не удалось решить. Похже общаясь с бывшими коллегами узнал, что решили проблему переходом на 2005.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #18 - 09. Сентября 2009 :: 11:42
Печать  
DEVIce писал(а) 09. Сентября 2009 :: 11:23:
Была похожая ситуация, при мне ее так и не удалось решить. Похже общаясь с бывшими коллегами узнал, что решили проблему переходом на 2005.

Ваши колеги не правы ошибка не в sql2005 а в приложении
1cv7.exe поэтому ошибка осталась.
Просто Ваши коллеги для sql2005
использовали может лучшее железо и ошибка перестала проявляться.

Я сейчас моделирую ситуацию.
Что точно удалось выяснить файловые блокировки здесь ни при чем.
  
Наверх
 
IP записан
 
DEVIce
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 12
Зарегистрирован: 24. Октября 2007
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #19 - 09. Сентября 2009 :: 12:01
Печать  
Оборудование осталось тем же самым, единственное, уточнил, что они еще и терминал подняли. Про правильность категорично заявлять не буду  Подмигивание, но проблему они решили, сами до конца не уверены, что именно терминалом и 2005, мож и еще чего трогали, но решили.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #20 - 09. Сентября 2009 :: 15:44
Печать  
Обновил в subj точное описание ошибки.
Здесь прилагается архив с md
и описанием того как воспроизвести эту ошибку.
Теперь каждый кто захочет сможет воспроизвести ошибку.
  

err_1c.rar ( 6 KB | Загрузки )
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #21 - 09. Сентября 2009 :: 15:50
Печать  
Далее распишу последовательность того что происходит
т.е. файл ОписаниеОшибки.txt выкладываю сюда :
(сначала по md надо создать sql базу )

1. Заходим в 1с
2.Через меню слздаем новый счет при этом происходит
1с выставляет блокировку в _1SJOURN(TABLOCKX)
открывает счет и выполняет COMMIT TRAN

set implicit_transactions on      1CV7
RPC:Starting      exec _1sp__1SJOURN_TLockX      1CV7
SP:StmtStarting      -- _1sp__1SJOURN_TLockX
select @i=1 from _1SJOURN(TABLOCKX HOLDLOCK) where 0=1      1CV7
SQL:BatchStarting      IF @@TRANCOUNT > 0 COMMIT TRAN
set implicit_transactions off      1CV7


3. Выставляем у документа дату, номер Примечание
любые значения.


4. Нажимаем кнопку "Проверить IDDOC"
при этом 1с выводит :
ТекущийДокумент =
ПустоеЗНачение(ТекущийДокумент) = 1
Внутр знач iddoc = {"O","0","0","12","0","0","         0   "}
Т.е. в Контексте формы у документа нет ни IDDOC также нет ROW_ID из _1SJOURN

5.заходим в qa устанавливаем нужную базу
6. выполняем операторы
declare @i integer
begin tran
select @i=1 from DH12(TABLOCKX HOLDLOCK) where 0=1

Видим в профайлере что это все отработало
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #22 - 09. Сентября 2009 :: 15:50
Печать  
7.Переходим в 1с. В открытом документе нажимаем Ок
Сохранить документ нажимаем Да.
Далее происходит следущее
1с пытается сохранить документ
выставили блокировку на _1SJOURN
получили GetMaxID для IDDOC
получает MaxID  в _1SJOURN
для нового документа формируем IDDOC = '     2   '
вставляем в таблицу _1SJOURN запись о новом документе с IDDOC = '     2   '
заносим информацию об insert в журнал транзакций
узнаем row_id для добавленной записи ( в моем случае это 6 )
назначаем для _1SUIDCTL макс id = '     2   '
заносим информацию об update _1SUIDCTL в журнал транзакций
читаем из _1SJOURN запись с  IDDOC = '     2   '
начинаем делать insert в шапку документа счет ( dh12 )
ничего не получилось и идет откат транзакции
Обновляется журнал транзакций.


set implicit_transactions on      1CV7
SP:StmtStarting      -- _1sp__1SJOURN_TLockX
select @i=1 from _1SJOURN(TABLOCKX HOLDLOCK) where 0=1      1CV7

-- _1sp__1SUIDCTL_GetMaxID
select @id=MAXID from _1SUIDCTL(NOLOCK) where TYPEID=@tid
exec _1sp__1SJOURN_MaxID @P1 output
exec sp_executesql N'Insert into _1SJOURN values( @P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8,@P9,@P10,@P11)', N'@P1 int,@P2 varchar(9),@P3 int,@P4 smallint,@P5 varchar(23),@P6 varchar(18),@P7 varchar(5),@P8 tinyint,@P9 bit,@P10 int,@P11 int', 0, '     2   ', 12, 0, '20090909B0I9GG     2   ', '        12        ', ' 1212', 0, 0, 0, 0
exec _1sp__1SJOURN_MaxRowID @P1 output
exec _1sp__1SUIDCTL_SetMaxID 0, '     2   '
exec _1sp__1SJOURN_ByIDDOC '     2   '
exec sp_executesql N'Insert into DH12 values( @P1,@P2)', N'@P1 varchar(9),@P2 varchar(10)', '     2   ', '2131      '
SQL:BatchStarting      IF @@TRANCOUNT > 0 ROLLBACK TRAN      1CV7
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #23 - 09. Сентября 2009 :: 15:51
Печать  
8. Т.е. попытались записать документ не получилось sql все откатил
а в форме документа осталась информация что документ создан
т.е у документа уже есть IDDOC = '     2   ' и row_id = 6


9. Переходим в 1с
на вопрос транзакция провалилась повторить попытку выполнить транзакцию отвечаем нет.

10. Для того чтобы убедиться что 8 истинно в документе нажимаем кнопку "Проверить IDDOC"
ТекущийДокумент = <Объект не найден>(2/)
ПустоеЗНачение(ТекущийДокумент) = 0
Внутр знач iddoc = {"O","0","0","12","0","0","         2   "}
Т.е. у документа уже еть и IDDOC и row_id
и при дальнейших попытках записать документ именно этой информацией мы и пользуемся
но ее нет в sql.


11. Далее переходим в qa
выполняем
commit

12 Переходим в 1с и нажимаем кнопку ок. Сохранить документ отвечаем да
пытаемся получить из _1SJOURN строку по IDDOC =  '     2   '
блокируем таблицу _1SJOURN
пытаемся получить VERSTAMP  из _1SJOURN где  ROW_ID=6
не находим
откатываем транзакцию
и 1с задает снова вопрос не удалось записать счет из-за транзакции будем пробовать еще

exec _1sp__1SJOURN_ByIDDOC '     2   '
set implicit_transactions on
SP:StmtStarting      -- _1sp__1SJOURN_TLockX
select @i=1 from _1SJOURN(TABLOCKX HOLDLOCK) where 0=1
select VERSTAMP from _1SJOURN(NOLOCK) where ROW_ID=6
IF @@TRANCOUNT > 0 ROLLBACK TRAN

13. Пункт 12 можно делать бесконечно и безрезультатно.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #24 - 09. Сентября 2009 :: 15:54
Печать  
Вот такая ситуация.
Есть ли ответы на вопросы
1. Можно ли в контексте формы открытого документа отменить назначения для ТекущийДокумент() ?
2. Можно ли в форме документа узнать row_id ?

Или может быть есть какой-то другой выход из этой ошибочной ситуации.
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #25 - 09. Сентября 2009 :: 17:23
Печать  
а кто держит блокировку на DH12 в боевой базе?
1С выполняет exec _1sp__1SJOURN_TLockX. Если успешно, значит предполагает, что все ок, можно проводить документ. Если нет, выводит свое стандартное сообщение про блокировку журнала.
А тут получается висит какое-то соединение с блокировкой на DH12 и без блокировки на _1sjourn?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #26 - 10. Сентября 2009 :: 04:16
Печать  
alexdd писал(а) 09. Сентября 2009 :: 17:23:
а кто держит блокировку на DH12 в боевой базе?
1С выполняет exec _1sp__1SJOURN_TLockX. Если успешно, значит предполагает, что все ок, можно проводить документ. Если нет, выводит свое стандартное сообщение про блокировку журнала.
А тут получается висит какое-то соединение с блокировкой на DH12 и без блокировки на _1sjourn?


Никто специально блокировку не держит.
Блокировка поставлена специально чтобы воспроизвести со 100% гарантией
ошибку не более того ( и только на тесте ).Этой блокировкой мы добиваемся отката конкретной транзакции.
sql не гарантирует что конкретно начатая транзакция ( записи нового документа )
всегда завершиться успешно. Так вот если эта транзакция по какой либо причине
закончится неудачно то получаем  subj.
Эта транзакция может быть длинной у меня стоит ПриЗаписиПерепроводить(1);
что только повышает шансы получения этой ситуации.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #27 - 10. Сентября 2009 :: 04:22
Печать  
кстати вот еще один маленький баг
Цитата:
exec sp_executesql N'Insert into DH12 values( @P1,@P2)', N'@P1 varchar(9),@P2 varchar(10)', '     2   ', '2131      '

Зачем IDDOC приводить к varchar(9)
либо вообще убрать либо ставить char(9)

аналогично и для _1SJOURN
Цитата:
exec sp_executesql N'Insert into _1SJOURN values( @P1,@P2,
« Последняя редакция: 10. Сентября 2009 :: 05:52 - Z1 »  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #28 - 10. Сентября 2009 :: 14:40
Печать  
Z1 писал(а) 10. Сентября 2009 :: 04:16:
Никто специально блокировку не держит...

я просто к тому, что может на боевой БД, есть какие-то самодельные транзакции. Не 1С-ные т.е. При такой модели как в тесте, к 1С претензий нет по большому счету, она пытается залочить _1sjourn, целиком притом. Лочит и получает облом с какой-то другой таблицей. А это уже в ней не предусмотреноУлыбка
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Может быть кто сталкивался с ошибкой ? ( sql версия )
Ответ #29 - 10. Сентября 2009 :: 15:08
Печать  
alexdd писал(а) 10. Сентября 2009 :: 14:40:
Z1 писал(а) 10. Сентября 2009 :: 04:16:
Никто специально блокировку не держит...

я просто к тому, что может на боевой БД, есть какие-то самодельные транзакции. Не 1С-ные т.е. При такой модели как в тесте, к 1С претензий нет по большому счету, она пытается залочить _1sjourn, целиком притом. Лочит и получает облом с какой-то другой таблицей. А это уже в ней не предусмотреноУлыбка

Все именно так об этом и речь. Раз в месяц из-за какого то скопления звезд транзакция пытающая записать Новый документ заканчивается неудачей и имеем subj.
Тестовая база приведена только для того чтобы каждый кто захочет смог повторить ошибку со 100% гарантией.

к 1с претензия должен правильно отрабатываться любой
ROLLBACK при Первой записи нового документа.по каким причинам он произошел даже не имеет смысл обсуждать.
Просто выявить и воспроизвести эту ошибку непросто - но это уже сделано в этой ветке.

Вторая претензия зачем эти преобразования с varchar при
insert  ( первый раз на insert взглянул и вот тебе пожалуйста ).
Ноги наверное растут еще с dbf ?

Нет на боевой базе сейчас нет никаких самодельных транзакций.
стандартный релиз с стандартными блокировками.

Если делать свои блокировки то в целом снизим нагрузку на sql
и вероятность subj уменьшиться но это пока не обсуждается.

Но главное найти приемлимое решение subj. Есть некоторые мысли
надо будет проверять их.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 4 
ОтправитьПечать