powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Загадочное и опасное поведение SSMS
12 сообщений из 12, страница 1 из 1
Загадочное и опасное поведение SSMS
    #39935115
Proox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Где-то 2-3 месяца назад стал наблюдать странное поведение: запускаю скрипт изменения ХП в SSMS (версия 17.9.1 + SQL Assistant 9.5), получаю сообщение об успешном выполнении, но по факту ни каких изменений не происходит. Когда такое случается, то, например, выполнение в том же окне команды «SELECT "ABC"» возвращает пустой датасет, а «PRINT "ABC"» вообще ничего не печатает. Такое ощущение, что в данном сеансе выполнилась команда SET FMTONLY ON. Пробовал даже добавлять SET FMTONLY OFF в начало скрипта, но стало хуже: код до GO выполняется (там дропается ХП), а оставшееся часть - нет.
Опрос небольшого числа коллег показал, что подобное иногда случается у одного сотрудника (тоже использующего SQL Assistant). По его словам, это случается, когда его код парсит XML. Мои ХП тоже парсят XML. Связано ли это как-то с проблемой я не знаю.
Но всё это пол беды. Недели 2-3 назад код стал сам частично выполняться! У нас все скрипты создания ХП состоят из трёх батчей: дропается ХП, создаётся ХП, а затем выдаются права. На базе есть триггер, который логриует изменения всех объектов. Однажды я просто смотрел несколько скриптов, а через пару часов сообщили об отсутствии ХП. В логе я обнаружил дроп двух хранимок с моей машины, без батчей создания. Сам я точно дроп не делал.
Бага не слишком часто повторяется, поэтому более детально изучить проблему не получается. Я уже несколько раз переставлял SSMS и SQL Assistant с удалением их попок. Я подозреваю, что вредит SQL Assistant, так как он постоянно проверяет код, выполняя его на сервере. С другой стороны, многолетнее использование SQL Assistant к таким чудесам не приводило.
Уже подумываю переставлять винду. Есть у кого-то идеи как отловить вредителя или избавиться от этой напасти?
...
Рейтинг: 0 / 0
Загадочное и опасное поведение SSMS
    #39935121
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Proox,
перестать пить до беспамятства на рабочем месте?
...
Рейтинг: 0 / 0
Загадочное и опасное поведение SSMS
    #39935131
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proox
У нас все скрипты создания ХП состоят из трёх батчей: дропается ХП, создаётся ХП, а затем выдаются права.


Чтобы не заставлять сервак заниматься хитрозакрученными переподвывертами, опробуйте процедуру ниже, которая пересоздает процедуру, только если реально поменялся её код.

Код: 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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
USE tempdb
GO 

CREATE PROCEDURE [dbo].[Create_if_not_exist] @proc_text NVARCHAR(max), @proc_name NVARCHAR(1000) 
AS 
    IF Object_id('tempdb.dbo.##t', 'U') IS NOT NULL 
      DROP TABLE ##t; 

    DECLARE @counter          INT, 
            @full_text        NVARCHAR(max) ='', 
            @proc_text_target NVARCHAR(max), 
            @sqlexectext      NVARCHAR(1000) 

    SET @sqlexectext= 
    N'set @counter  = (select COUNT(*) FROM syscomments where id = object_id(''' + @proc_name + '''))' 

    EXEC Sp_executesql @sqlexectext, 
						N'@counter int OUTPUT', 
						@counter=@counter output 

    EXEC( 
	'select  row_number() OVER(ORDER BY colid desc) as col_id , [text] into ##t FROM syscomments where id = object_id(''' + @proc_name + ''')') 

    IF @counter > 1 
      BEGIN 
          WHILE @counter != 0 
            BEGIN 
                SET @full_text=@full_text 
                               + (SELECT [text] FROM   ##t WHERE  col_id = @counter)
                SET @counter=@counter - 1 
            END 

          SET @proc_text_target=(SELECT Rtrim(Ltrim(@full_text))) 
      END 
    ELSE 
      SET @proc_text_target = (SELECT Rtrim(Ltrim(text)) 
                               FROM   syscomments 
                               WHERE  id = Object_id(@proc_name)) 

    IF @proc_text != @proc_text_target 
        OR @proc_text_target IS NULL 
      BEGIN 
          EXEC ('
	  IF OBJECT_ID('''+@proc_name+''', ''P'') IS NOT NULL 
	  drop procedure ' + @proc_name) 

          EXEC (@proc_text) 

		   PRINT 'Пересоздал или создал процедуру ' + @proc_name
      END; 
GO

EXEC [dbo].[Create_if_not_exist] 
'CREATE PROCEDURE [dbo].[MyGetdate] AS SELECT GETDATE() AS [Дата попойки]', '[dbo].[MyGetdate]'
GO 
EXEC [dbo].[MyGetdate]
GO 
EXEC [dbo].[Create_if_not_exist] 
'CREATE PROCEDURE [dbo].[MyGetdate] AS SELECT GETDATE() AS [Дата запоя]', '[dbo].[MyGetdate]'
GO 
EXEC [dbo].[MyGetdate]
GO 
EXEC [dbo].[Create_if_not_exist] 
'CREATE PROCEDURE [dbo].[MyGetdate] AS SELECT GETDATE() AS [Дата запоя]', '[dbo].[MyGetdate]'
GO 
EXEC [dbo].[MyGetdate]
GO 
EXEC [dbo].[Create_if_not_exist] 
'CREATE PROCEDURE [dbo].[MyGetdate] AS SELECT GETDATE() AS [Дата бодуна]', '[dbo].[MyGetdate]'
GO 
EXEC [dbo].[MyGetdate]
GO 

...
Рейтинг: 0 / 0
Загадочное и опасное поведение SSMS
    #39935135
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andy st
Proox,
перестать пить до беспамятства на рабочем месте?


Перед накатом скриптов надо взять бубен и усиленно тряся им произнести:

"Таратам барабам там-там, сервер бага'м не отдам! Да прибудем все там. Ду-дам!"
...
Рейтинг: 0 / 0
Загадочное и опасное поведение SSMS
    #39935180
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proox
Уже подумываю переставлять винду.
А SQL Assistant, и другие аддоны, не пробовали снести?
Proox
Есть у кого-то идеи как отловить вредителя или избавиться от этой напасти?
Кто ж знает, что там на самом деле.
Может, триггер логиролвания изменений кривой, может, дропает какеой то другой сотрудник, может, дропает какое то ваше приложение, может, вы сами случайно.
...
Рейтинг: 0 / 0
Загадочное и опасное поведение SSMS
    #39935193
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proox,

вероятно, у вас мешанина библиотек разных версий и номеров и много uninstall. Либо никогда не ставьте обновления, особенно .Net.
Лучше всего выполнить чистую установку системы и поставить сразу свежие версии софта.
...
Рейтинг: 0 / 0
Загадочное и опасное поведение SSMS
    #39935210
Proox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg
Может, триггер логиролвания изменений кривой, может, дропает какеой то другой сотрудник, может, дропает какое то ваше приложение, может, вы сами случайно.

Триггер много лет работает, и ни каких нареканий не вызывает. В таблицу записывается значение host_name() - так что явно с моей машины запрос был. Один раз случайно удалить - вполне допускаю, но тут слишком часто возникают странности.
...
Рейтинг: 0 / 0
Загадочное и опасное поведение SSMS
    #39935215
Proox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов
вероятно, у вас мешанина библиотек разных версий и номеров и много uninstall. Либо никогда не ставьте обновления, особенно .Net.
Лучше всего выполнить чистую установку системы и поставить сразу свежие версии софта.

Машина новенькая, в конце прошлого года винда поставлена. Софта не слишком много. Обновления регулярно накатываются. Антивирус стоит.
...
Рейтинг: 0 / 0
Загадочное и опасное поведение SSMS
    #39935217
Proox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg
А SQL Assistant, и другие аддоны, не пробовали снести?

Из аддонов только SQL Assistant стоит. Попробовал без него работать - как будто одной руки лишился :-(
На предыдущей машине работал с теми же версиями софта, и проблем не знал.
...
Рейтинг: 0 / 0
Загадочное и опасное поведение SSMS
    #39935272
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Proox
Из аддонов только SQL Assistant стоит. Попробовал без него работать - как будто одной руки лишился :-(
Я не призываю вас отрезать себе руки, я предлагаю найти причину ошибки.
Отключите SQL Assistant, если "внезапных удалений" не будет, значит, он. Ещё можно сохранять трейс запросов от вашей машины - что он там вообще делает, этот аддон? Конечно, если это не приведёт к недопустимой нагрузке.
...
Рейтинг: 0 / 0
Загадочное и опасное поведение SSMS
    #39935315
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Proox,
В студии есть фишка - выполнять по F5 только выделеный кусок скрипта.
Если в многострочном скрипте выделен пробел, то запускать скрипт на исполнение можно до посинения.
А если грамотный разработчик или умная софтина поразвлекались со стилями оформления, то выделение может быть незаметно.
Поведение "ничего не выполняется", "выполнился только drop" запросто может быть объяснено этим.

Тут даже
авторс удалением их попок
не поможет
...
Рейтинг: 0 / 0
Загадочное и опасное поведение SSMS
    #39935844
Proox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думаю причину дропов ХП я нашел: внезапно удалялись только те ХП, где в скрипте в начале я успел поставить SET FMTONLY OFF. В общем сам себе в ногу выстрелил. Пытался решить одну проблему, а получил еще хуже :-(.

andy st

Если в многострочном скрипте выделен пробел, то запускать скрипт на исполнение можно до посинения.

Это не мой случай. Я немного поэкспериментировал, когда у меня в окне код стал только имитировать выполнение. Я выполнял SELECT 1, и получал пустой датасет. Выполнял PRINT "123", и получал сообщение об успешном выполнении команды без текста "123". Лечится этот глюк либо переконнектом к базе, либо сменой текущей базы и возвратом обратно. Профайлер показывает, что SSMS в результате этих действий выполняет разный код, в том числе SET FMTONLY OFF. Именно из-за этого я решил выполнить SET FMTONLY OFF когда окно запросов оказалось опять в глючном состоянии. И о чудо! Код опять стал выполняться. Это навело меня на ложную мысль, что достаточно прописать SET FMTONLY OFF в начале скрипта, и проблема решится.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Загадочное и опасное поведение SSMS
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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