Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Загадочное и опасное поведение SSMS / 12 сообщений из 12, страница 1 из 1
06.03.2020, 11:48
    #39935115
Proox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадочное и опасное поведение SSMS
Всем привет!
Где-то 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
06.03.2020, 11:58
    #39935121
andy st
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадочное и опасное поведение SSMS
Proox,
перестать пить до беспамятства на рабочем месте?
...
Рейтинг: 0 / 0
06.03.2020, 12:24
    #39935131
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадочное и опасное поведение SSMS
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
06.03.2020, 12:26
    #39935135
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загадочное и опасное поведение SSMS
andy st
Proox,
перестать пить до беспамятства на рабочем месте?


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

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

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

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

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

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

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

andy st

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

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


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