Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / как программно узнать, валидны ли некоторые мои триггеры (до сих пор)? / 20 сообщений из 20, страница 1 из 1
17.05.2019, 12:16
    #39814533
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
пока известное мне не даёт ответа на вопрос:

Код: sql
1.
2.
3.
select * from INFORMATION_SCHEMA.ROUTINES
	select * from sys.all_objects where type = 'TR' order by create_date desc
	EXEC sp_helptext 'dbo.TR_MYTAXLIST';  



в наших краях (Oracle)это узнаётся "как 2 пальца"! (
Код: plsql
1.
select * from dba_objects where object_type = 'TRIGGER' and status != 'VALID' 

)
Но "сегодня сам попал в чужую деревню" ;-) Помогите плиз! )))
...
Рейтинг: 0 / 0
17.05.2019, 12:20
    #39814536
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
DBAshnikв наших краях (Oracle)это узнаётся "как 2 пальца"!А что в Оракле означает статус VALID?
...
Рейтинг: 0 / 0
17.05.2019, 12:22
    #39814537
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
В "чужой деревне" надо начинать с версии сервера.

select * from sys.triggers

https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-triggers-transact-sql?view=sql-server-2017
...
Рейтинг: 0 / 0
17.05.2019, 12:23
    #39814538
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
alexeyvgDBAshnikв наших краях (Oracle)это узнаётся "как 2 пальца"!А что в Оракле означает статус VALID?

валидный
...
Рейтинг: 0 / 0
17.05.2019, 12:25
    #39814540
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
alexeyvgА что в Оракле означает статус VALID?
Показывает есть ли в скриптовом обьекте ссылки на какие-то невалидные обьекты. Скажем в тригере юзалась таблица. Ее удалили при вызове триггера рейтится ошибка и в системном представлении статут обьекта триггера меняется на INVALID. Если мне память не изменяет так в Оракле этот функционал работает.

DBAshnik Помогите плиз!
Давно писал что-то в таком духе. Правда реализация не ахти, но вдруг выручит:
https://habr.com/en/post/222397/
...
Рейтинг: 0 / 0
17.05.2019, 12:25
    #39814541
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
Ролг ХупинalexeyvgА что в Оракле означает статус VALID?

валидный
А, то есть в MSSQL аналог is_disabled?
Или имеется в виду, что код триггера соответствует бизне-логике из ТЗ? :-)
...
Рейтинг: 0 / 0
17.05.2019, 12:34
    #39814547
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
DBAshnik,

Прямого аналога в MSSQL нет.

Можно выполнить
Код: sql
1.
select * from sys.dm_sql_referenced_entities('dbo.TR_MYTAXLIST', 'object');

Если выполнилось без ошибок - значит валиден.
Если же в триггере есть DSQL, то гарантированно верный ответ получить нельзя.
...
Рейтинг: 0 / 0
17.05.2019, 12:47
    #39814554
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
Вот так можно выбрать все несуществующие объекты, на которые ссылаются триггер в базе

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select 
	trigger_name = t.name
	, invalid_object_name = '[' + referenced_schema_name + '].[' + referenced_entity_name + ']'
from sys.triggers t
inner join sys.sql_expression_dependencies d on t.object_id = d.referencing_id
where 
	d.referenced_class = 1 
	and OBJECT_ID('[' + referenced_schema_name + '].[' + referenced_entity_name + ']') IS NULL




PS
Это без учета crossdb и crossserver связей

Первые приделать не сложно, со вторыми нужно будет помучаться.
...
Рейтинг: 0 / 0
17.05.2019, 13:03
    #39814560
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
-- ссылки в объектах на отсутствующие объекты
select SCHEMA_NAME(t2.schema_id) as [Схема],
object_name(t1.referencing_id) as [Объект],
t1.referenced_class_desc as [Вид связи],
t1.referenced_server_name,
t1.referenced_database_name,
t1.referenced_schema_name as [Схема ссылочного объекта],
t1.referenced_entity_name as [Имя ссылочного объекта],
t3.object_id as [ID ссылочного объекта]
from sys.sql_expression_dependencies as t1
left join sys.objects as t2 on t2.object_id = t1.referencing_id
left join sys.objects as t3 on SCHEMA_NAME(t3.schema_id) = t1.referenced_schema_name and
t3.name = t1.referenced_entity_name
where t3.object_id is null and
len(t1.referenced_schema_name) > 2 and -- исключаем всякие with и прочее
len(t1.referenced_entity_name) > 3 and -- исключаем всякие with и прочее
t1.referenced_schema_name is not null and -- исключаем, если схема не указана
t1.referenced_database_name is null and -- исключаем ссылки на другие базы данных
t1.referenced_class_desc <> 'TYPE' and -- исключаем табличные типы
object_name(t1.referencing_id) <> 'sp_upgraddiagrams' and
object_name(t1.referencing_id) not like '%for_del%'
...
Рейтинг: 0 / 0
17.05.2019, 14:03
    #39814604
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
Критик,

похоже, запрос не учитывает XML_SCHEMA_COLLECTION.
...
Рейтинг: 0 / 0
17.05.2019, 14:14
    #39814610
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
Критик,

Интересно. что реагирует на конструкцию

params.exist('/row[@IsDisable eq "0"]'), где params - столбец XML типа.

OBJECT_OR_COLUMN params exist
...
Рейтинг: 0 / 0
17.05.2019, 16:26
    #39814724
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
Sergey SyrovatchenkoalexeyvgА что в Оракле означает статус VALID?
Показывает есть ли в скриптовом обьекте ссылки на какие-то невалидные обьекты. Скажем в тригере юзалась таблица. Ее удалили при вызове триггера рейтится ошибка и в системном представлении статут обьекта триггера меняется на INVALID. Если мне память не изменяет так в Оракле этот функционал работает.

Естественно он работает!!!!!! Я В ЖИЗНИ не мог предположить что можно обойтись без этого!!!! Жесть!!!! :-(
А как же вы разруливаете следующее: В большой системе какие то олухи изменили какой-то обьект (скажем таблицу), который юзается где-то СОООООВСЕМ в другом месте! (они об этом не знали). Если ввести правило, что до и после изменения проверять (напр. автоматической рутиной), не появились ли где т.н. INVALIDы в результате каких-то манипуляций, то это значительно увеличивает стабильность системы и т.н. "защиту от дурака"!!!! Как же вы без этого живёте то, люди?!?!?
...
Рейтинг: 0 / 0
17.05.2019, 16:37
    #39814727
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
invmDBAshnik,

Прямого аналога в MSSQL нет.

Можно выполнить
Код: sql
1.
select * from sys.dm_sql_referenced_entities('dbo.TR_MYTAXLIST', 'object');

Если выполнилось без ошибок - значит валиден.

Спасибо! Попытался обернуть это функцией, и прикрутить её к селект запросу "select * from sys.triggers"
НО!!!!!!! Медленно и с ПОЛНЫМ УЖАСОМ(!!!) убеждаюсь что в function на MS-Sql оказывается нельзя встроить обработку EXCEPTION!!!
(типа дай мне 'VALID' если выполняется ок. и 'INVALID' в случае ошибки) (или таки можно?! version.2016)) Нахожусь в глубочайшем а*уе по этому поводу!!!! :-( ЖЕСТЬ КАК ОНА ЕСТЬ!!!!! :-( :-( :-( (это даже покруче будет, чем отсутствие "row-based"-триггеров! :-( )

invmЕсли же в триггере есть DSQL, то ...
...то это уже на совести тех кто излишне ваял DSQL! Кстати в Оракле та же проблема! (именно поэтому многие Oracle-DBA гоняют сцаными тряпками проггеров за излишний DSQL!)

P.S. сегодня я cтал гораздо отчётливее понимать, ПОЧЕМУ Оракл стОит своих денег....................... ;-)
...
Рейтинг: 0 / 0
17.05.2019, 16:39
    #39814728
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
Ролг ХупинВ "чужой деревне" надо начинать с версии сервера.

select * from sys.triggers

https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-triggers-transact-sql?view=sql-server-2017

2016
...
Рейтинг: 0 / 0
17.05.2019, 17:25
    #39814748
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
[quot DBAshnik]invmDBAshnik,


P.S. сегодня я cтал гораздо отчётливее понимать, ПОЧЕМУ Оракл стОит своих денег....................... ;-)

да ладно
...
Рейтинг: 0 / 0
17.05.2019, 17:27
    #39814750
DBAshnik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
ах ты чёёёёрт:
YouTube Video
...
Рейтинг: 0 / 0
17.05.2019, 18:27
    #39814766
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
DBAshnikSergey Syrovatchenkoпропущено...

Показывает есть ли в скриптовом обьекте ссылки на какие-то невалидные обьекты. Скажем в тригере юзалась таблица. Ее удалили при вызове триггера рейтится ошибка и в системном представлении статут обьекта триггера меняется на INVALID. Если мне память не изменяет так в Оракле этот функционал работает.

Естественно он работает!!!!!! Я В ЖИЗНИ не мог предположить что можно обойтись без этого!!!! Жесть!!!! :-(
А как же вы разруливаете следующее: В большой системе какие то олухи изменили какой-то обьект (скажем таблицу), который юзается где-то СОООООВСЕМ в другом месте! (они об этом не знали). Если ввести правило, что до и после изменения проверять (напр. автоматической рутиной), не появились ли где т.н. INVALIDы в результате каких-то манипуляций, то это значительно увеличивает стабильность системы и т.н. "защиту от дурака"!!!! Как же вы без этого живёте то, люди?!?!?
Заставляем олухов тесты писать, прикинь :)
...
Рейтинг: 0 / 0
17.05.2019, 18:31
    #39814769
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
DBAshnik,

авторА правило, что до и после изменения проверять (напр. автоматической рутиной), не появились ли где т.н. INVALIDы в результате каких-то манипуляций, то это значительно увеличивае
Schemabinding
...
Рейтинг: 0 / 0
17.05.2019, 20:05
    #39814790
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
Владислав КолосовКритик,

Интересно. что реагирует на конструкцию

params.exist('/row[@IsDisable eq "0"]'), где params - столбец XML типа.

OBJECT_OR_COLUMN params exist

вполне возможно,
запрос писался для DWH, где xml просто не было
...
Рейтинг: 0 / 0
18.05.2019, 16:43
    #39814891
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как программно узнать, валидны ли некоторые мои триггеры (до сих пор)?
DBAshnikSergey Syrovatchenkoпропущено...

Показывает есть ли в скриптовом обьекте ссылки на какие-то невалидные обьекты. Скажем в тригере юзалась таблица. Ее удалили при вызове триггера рейтится ошибка и в системном представлении статут обьекта триггера меняется на INVALID. Если мне память не изменяет так в Оракле этот функционал работает.

Естественно он работает!!!!!! Я В ЖИЗНИ не мог предположить что можно обойтись без этого!!!! Жесть!!!! :-(
А как же вы разруливаете следующее: В большой системе какие то олухи изменили какой-то обьект (скажем таблицу), который юзается где-то СОООООВСЕМ в другом месте! (они об этом не знали). Если ввести правило, что до и после изменения проверять (напр. автоматической рутиной), не появились ли где т.н. INVALIDы в результате каких-то манипуляций, то это значительно увеличивает стабильность системы и т.н. "защиту от дурака"!!!! Как же вы без этого живёте то, люди?!?!?Ведем разработку БД в SSDT, в тамошнем database project есть dependency tracking, который такие вещи сразу показывает.

Более того, оные "олухи" могут сначала проверить все зависимости таблицы, и по результатам уже попытаться понять, сломают их изменения что-нибудь где-нибудь, или нет.

Ну и триггеров по минимуму, но это для вас, похоже, религиозный вопрос
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / как программно узнать, валидны ли некоторые мои триггеры (до сих пор)? / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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