powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Или баг или я туплю. Кто то сталкивался с подобным?
7 сообщений из 7, страница 1 из 1
Или баг или я туплю. Кто то сталкивался с подобным?
    #39644419
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачу поставили - мониторить на серверах и оповещать если создание удаление изменение индексов и хранить историю изменений.
Реализовал по принципу - сделал табличку где хранится "слепок индекс", периодически (раз в час) читаю все индексы, сверяю с тем что уже сохранено в этой таблице, если есть изменения - на почту шлю оповещение.
табличка для хранения истории
Код: 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.
USE [msdb]
GO

CREATE TABLE [dbo].[index_list]
(
	[type_desc] [varchar](60) NOT NULL,
	[db] [varchar](128) NOT NULL,
	[object_name] [varchar](250) NOT NULL,
	[index_name] [varchar](128) NOT NULL,
	[index_column] [varchar](max) NULL,
	[include_column] [varchar](max) NULL,
	[filter_definition] [varchar](max) NULL,
	[is_primary_key] [bit] NULL,
	[is_unique_constraint] [bit] NULL,
	[is_unique] [bit] NOT NULL,
	[index_type] [varchar](60) NULL,
	[dt$] [datetime] NOT NULL,
	[oper$] [char](1) NOT NULL,
 CONSTRAINT [pk_index_list] PRIMARY KEY CLUSTERED 
(
	[db] ASC,
	[object_name] ASC,
	[index_name] ASC,
	[dt$] DESC
)
)
GO


тело JOB. Отладил - работает
Код: 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.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
if object_id('tempdb..#index_list') is not null drop table #index_list
create table #index_list
(
	db varchar(128) not null,
	type_desc varchar(60) null,
	is_primary_key bit null,
	is_unique_constraint bit null,
	is_unique bit null,
	index_type varchar(60) null,
	object_name varchar(250),
	index_name varchar(128) not null,
	index_column varchar(max) null,
	include_column varchar(max) null,
	filter_definition varchar(max) null,
	primary key (db,object_name,index_name)
)

insert #index_list
exec sp_msforeachdb 'use [?];
select
	 db_name() db
	,o.type_desc
	,i.is_primary_key
	,i.is_unique_constraint
	,i.is_unique
	,lower(i.type_desc) index_type
	,''[''+s.name collate Cyrillic_General_CI_AS+''].[''+o.name+'']'' object_name
	,''[''+i.name+'']'' index_name
	,case when i.type in (1,2) then
	stuff((
		select '',''+name+case when ic.is_descending_key=0 then '' asc'' else '' desc'' end
		from sys.columns c
		join sys.index_columns ic
			on c.column_id = ic.column_id
			and c.object_id = ic.object_id
			and c.object_id = i.object_id
			and ic.index_id = i.index_id
			and ic.is_included_column=0
		order by ic.key_ordinal
		for xml path('''')
	),1,1,'''')
	when i.type=5 then ''<CLUSTERED COLUMNSTORE>''
	else ''<UNKNOWN>''
	end index_column
	,coalesce(stuff((
		select '',''+name
		from sys.columns c
		join sys.index_columns ic
			on c.column_id = ic.column_id
			and c.object_id = ic.object_id
			and c.object_id = i.object_id
			and ic.index_id = i.index_id
			and ic.is_included_column=1
		order by ic.key_ordinal
		for xml path('''')
	),1,1,''''),''-'') include_column
	,coalesce(filter_definition,''-'') filter_definition
from sys.indexes i
join sys.objects o on i.object_id = o.object_id
join sys.schemas s on s.schema_id = o.schema_id
where 1=1
and i.type != 0
and o.type in (''U'',''V'')
and db_id() != 2'

declare @dt datetime = getdate()
--delete from dbo.index_list where dt$ = (select max(dt$) from dbo.index_list)

;with trg as
(
	select *
	from
	(
		select *,
			rn$ = row_number() over
			(
				partition by db,object_name,index_name
				order by dt$ desc
			)
		from dbo.index_list
	) t
	where rn$=1 and oper$ != 'D'
)
, recordset as
(
	select
		coalesce(src.type_desc, trg.type_desc) as type_desc,
		coalesce(src.db, trg.db) as db,
		coalesce(src.object_name, trg.object_name) as object_name,
		coalesce(src.index_name, trg.index_name) as index_name,
		coalesce(src.index_column, trg.index_column) as index_column,
		coalesce(src.include_column, trg.include_column) as include_column,
		coalesce(src.filter_definition, trg.filter_definition) as filter_definition,
		coalesce(src.is_primary_key, trg.is_primary_key) as is_primary_key,
		coalesce(src.is_unique_constraint, trg.is_unique_constraint) as is_unique_constraint,
		coalesce(src.is_unique, trg.is_unique) as is_unique,
		coalesce(src.index_type, trg.index_type) as index_type,
		@dt as dt$,
		oper$ = case
			when src.db is null then 'D'
			when trg.db is null then 'I'
			when	src.type_desc != trg.type_desc
				or	src.index_column != trg.index_column
				or	coalesce(src.include_column,'') != coalesce(trg.include_column,'')
				or	coalesce(src.filter_definition,'') != coalesce(trg.filter_definition,'')
				or	src.is_primary_key != trg.is_primary_key
				or	src.is_unique_constraint != trg.is_unique_constraint
				or	src.is_unique != trg.is_unique
				or	src.index_type != trg.index_type
								then 'U'
		end
	from trg full join #index_list as src
		on  trg.db = src.db
		and trg.object_name = src.object_name
		and trg.index_name = src.index_name
)
--insert dbo.index_list
select *
from recordset
where oper$ is not null
return
--- формируем оповещение на емэйл
--select @dt = max(dt$) from dbo.index_list
if not exists (select * from dbo.index_list where dt$ = @dt) return

if object_id('tempdb..#curr') is not null drop table #curr
select *
into #curr
from dbo.index_list
where dt$ = @dt

if object_id('tempdb..#prev') is not null drop table #prev
select *
into #prev
from dbo.index_list
where dt$ in (
select max(dt$)
from dbo.index_list
where dt$ < @dt
)

if object_id('tempdb..#res') is not null drop table #res
select 
	 type_desc
	,db
	,object_name
	,index_name
	,index_column
	,isnull(include_column,'') include_column
	,isnull(filter_definition,'') filter_definition
	,case
		when is_primary_key=1 then 'primary key '
		when is_unique_constraint=1 then 'unique constraint '
		when is_unique=1 then 'unique index '
		else ''
	end+index_type as index_type
	,dt$
	,'drop index' oper$
into #res
from #curr
where oper$='D'
union all
select 
	 type_desc
	,db
	,object_name
	,index_name
	,index_column
	,include_column
	,filter_definition
	,case
		when is_primary_key=1 then 'primary key '
		when is_unique_constraint=1 then 'unique constraint '
		when is_unique=1 then 'unique index '
		else ''
	end+index_type
	,dt$
	,'create index'
from #curr
where oper$='I'
union all
select 
	 case when c.type_desc!=p.type_desc
		then 'old: ('+p.type_desc+'); new: ('+c.type_desc+')'
		else c.type_desc
	end
	,c.db
	,c.object_name
	,c.index_name
	,c.index_column cix
	--,p.index_column pix
	,case when c.include_column!=p.include_column
		then 'old: ('+p.include_column+'); new: ('+c.include_column+')'
		else c.include_column
	end
	,case when c.filter_definition!=p.filter_definition
		then 'old: ('+p.filter_definition+'); new: ('+c.filter_definition+')'
		else c.filter_definition
	end
	,case when	c.is_primary_key!=p.is_primary_key or
				c.is_unique_constraint!=p.is_unique_constraint or
				c.is_unique!=p.is_unique or
				c.index_type!=p.index_type
		then 'old: ('+
				case
					when c.is_primary_key=1 then 'primary key '
					when c.is_unique_constraint=1 then 'unique constraint '
					when c.is_unique=1 then 'unique index '
					else ''
				end+c.index_type+'); new: ('+
				case
					when p.is_primary_key=1 then 'primary key '
					when p.is_unique_constraint=1 then 'unique constraint '
					when p.is_unique=1 then 'unique index '
					else ''
				end+p.index_type+')'
		else
				case
					when c.is_primary_key=1 then 'primary key '
					when c.is_unique_constraint=1 then 'unique constraint '
					when c.is_unique=1 then 'unique index '
					else ''
				end+c.index_type
	end
	,convert(nvarchar,c.dt$,120)
	,'modify index'
--select c.*, p.*
from #curr c join #prev p	on	c.db = p.db
							and	c.object_name = p.object_name
							and c.index_name = p.index_name
where c.oper$='U'


DECLARE @tableHTML nvarchar(max) = N'<style type="text/css">
#box-table
{
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
font-size: 12px;
text-align: center;
border-collapse: collapse;
border-top: 7px solid #9baff1;
border-bottom: 7px solid #9baff1;
}
#box-table th
{
font-size: 13px;
font-weight: normal;
background: #b9c9fe;
border-right: 2px solid #9baff1;
border-left: 2px solid #9baff1;
border-bottom: 2px solid #9baff1;
color: #039;
}
#box-table td
{
border-right: 1px solid #aabcfe;
border-left: 1px solid #aabcfe;
border-bottom: 1px solid #aabcfe;
color: #669;
}
tr:nth-child(odd) { background-color:#eee; }
tr:nth-child(even) { background-color:#fff; } 
</style>'+ 
N'<table id="box-table" >' +
N'
<th>Object Type</th>
<th>Database Name</th>
<th>Object Name</th>
<th>Index Name</th>
<th>Index Colum</th>
<th>Include Column</th>
<th>Filter Definition</th>
<th>Index Type</th>
<th>DateTime</th>
<th>Operation</th>'
+
coalesce(cast ( (
select 
	 td=type_desc, ''
	,td=db, ''
	,td=object_name, ''
	,td=index_name, ''
	,td=index_column, ''
	,td=include_column, ''
	,td=filter_definition, ''
	,td=index_type, ''
	,td=dt$, ''
	,td=oper$, ''
from #res
order by oper$, dt$
for xml path('tr'), type
) as nvarchar(max) ),'')+
N'</table>';

print @tableHTML
declare @sub nvarchar(200)
set @sub = 'Index changed on[' + @@servername+']'
EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'AlertSystem',
@recipients = 'dba@myemail',
@subject = @sub,
@body = @tableHTML,
@body_format = 'HTML'



Но! Начал периодически получать оповещения, что все индексы удалены, то все индексы заново созданы!!!! Не могу понять как выловить ошибку! Похоже ошибка в том, что во временную таблицу ниче не записывается процедурой sp_msforeachdb - это пока предположение. Даже если это выясню - тоже не понятно что с этим делать? Баг?

Сервер - SQL 2008R2 Enterprise x64. Странно, то что то сутки двое норм работает без ошибок, после иногда фигакс и вываливает что индексы удалены, после созданы...

Кто может сталкивался с подобным? Есть какие то идеи что с этим сделать можно?
...
Рейтинг: 0 / 0
Или баг или я туплю. Кто то сталкивался с подобным?
    #39644423
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дед-Папыхтет,

Работающий скрипт конечно такой
Код: 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.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
if object_id('tempdb..#index_list') is not null drop table #index_list
create table #index_list
(
	db varchar(128) not null,
	type_desc varchar(60) null,
	is_primary_key bit null,
	is_unique_constraint bit null,
	is_unique bit null,
	index_type varchar(60) null,
	object_name varchar(250),
	index_name varchar(128) not null,
	index_column varchar(max) null,
	include_column varchar(max) null,
	filter_definition varchar(max) null,
	primary key (db,object_name,index_name)
)

insert #index_list
exec sp_msforeachdb 'use [?];
select
	 db_name() db
	,o.type_desc
	,i.is_primary_key
	,i.is_unique_constraint
	,i.is_unique
	,lower(i.type_desc) index_type
	,''[''+s.name collate Cyrillic_General_CI_AS+''].[''+o.name+'']'' object_name
	,''[''+i.name+'']'' index_name
	,case when i.type in (1,2) then
	stuff((
		select '',''+name+case when ic.is_descending_key=0 then '' asc'' else '' desc'' end
		from sys.columns c
		join sys.index_columns ic
			on c.column_id = ic.column_id
			and c.object_id = ic.object_id
			and c.object_id = i.object_id
			and ic.index_id = i.index_id
			and ic.is_included_column=0
		order by ic.key_ordinal
		for xml path('''')
	),1,1,'''')
	when i.type=5 then ''<CLUSTERED COLUMNSTORE>''
	else ''<UNKNOWN>''
	end index_column
	,coalesce(stuff((
		select '',''+name
		from sys.columns c
		join sys.index_columns ic
			on c.column_id = ic.column_id
			and c.object_id = ic.object_id
			and c.object_id = i.object_id
			and ic.index_id = i.index_id
			and ic.is_included_column=1
		order by ic.key_ordinal
		for xml path('''')
	),1,1,''''),''-'') include_column
	,coalesce(filter_definition,''-'') filter_definition
from sys.indexes i
join sys.objects o on i.object_id = o.object_id
join sys.schemas s on s.schema_id = o.schema_id
where 1=1
and i.type != 0
and o.type in (''U'',''V'')
and db_id() != 2'

declare @dt datetime = getdate()
--delete from dbo.index_list where dt$ = (select max(dt$) from dbo.index_list)

;with trg as
(
	select *
	from
	(
		select *,
			rn$ = row_number() over
			(
				partition by db,object_name,index_name
				order by dt$ desc
			)
		from dbo.index_list
	) t
	where rn$=1 and oper$ != 'D'
)
, recordset as
(
	select
		coalesce(src.type_desc, trg.type_desc) as type_desc,
		coalesce(src.db, trg.db) as db,
		coalesce(src.object_name, trg.object_name) as object_name,
		coalesce(src.index_name, trg.index_name) as index_name,
		coalesce(src.index_column, trg.index_column) as index_column,
		coalesce(src.include_column, trg.include_column) as include_column,
		coalesce(src.filter_definition, trg.filter_definition) as filter_definition,
		coalesce(src.is_primary_key, trg.is_primary_key) as is_primary_key,
		coalesce(src.is_unique_constraint, trg.is_unique_constraint) as is_unique_constraint,
		coalesce(src.is_unique, trg.is_unique) as is_unique,
		coalesce(src.index_type, trg.index_type) as index_type,
		@dt as dt$,
		oper$ = case
			when src.db is null then 'D'
			when trg.db is null then 'I'
			when	src.type_desc != trg.type_desc
				or	src.index_column != trg.index_column
				or	coalesce(src.include_column,'') != coalesce(trg.include_column,'')
				or	coalesce(src.filter_definition,'') != coalesce(trg.filter_definition,'')
				or	src.is_primary_key != trg.is_primary_key
				or	src.is_unique_constraint != trg.is_unique_constraint
				or	src.is_unique != trg.is_unique
				or	src.index_type != trg.index_type
								then 'U'
		end
	from trg full join #index_list as src
		on  trg.db = src.db
		and trg.object_name = src.object_name
		and trg.index_name = src.index_name
)
insert dbo.index_list
select *
from recordset
where oper$ is not null

--- формируем оповещение на емэйл
--select @dt = max(dt$) from dbo.index_list
if not exists (select * from dbo.index_list where dt$ = @dt) return

if object_id('tempdb..#curr') is not null drop table #curr
select *
into #curr
from dbo.index_list
where dt$ = @dt

if object_id('tempdb..#prev') is not null drop table #prev
select *
into #prev
from dbo.index_list
where dt$ in (
select max(dt$)
from dbo.index_list
where dt$ < @dt
)

if object_id('tempdb..#res') is not null drop table #res
select 
	 type_desc
	,db
	,object_name
	,index_name
	,index_column
	,isnull(include_column,'') include_column
	,isnull(filter_definition,'') filter_definition
	,case
		when is_primary_key=1 then 'primary key '
		when is_unique_constraint=1 then 'unique constraint '
		when is_unique=1 then 'unique index '
		else ''
	end+index_type as index_type
	,dt$
	,'drop index' oper$
into #res
from #curr
where oper$='D'
union all
select 
	 type_desc
	,db
	,object_name
	,index_name
	,index_column
	,include_column
	,filter_definition
	,case
		when is_primary_key=1 then 'primary key '
		when is_unique_constraint=1 then 'unique constraint '
		when is_unique=1 then 'unique index '
		else ''
	end+index_type
	,dt$
	,'create index'
from #curr
where oper$='I'
union all
select 
	 case when c.type_desc!=p.type_desc
		then 'old: ('+p.type_desc+'); new: ('+c.type_desc+')'
		else c.type_desc
	end
	,c.db
	,c.object_name
	,c.index_name
	,c.index_column cix
	--,p.index_column pix
	,case when c.include_column!=p.include_column
		then 'old: ('+p.include_column+'); new: ('+c.include_column+')'
		else c.include_column
	end
	,case when c.filter_definition!=p.filter_definition
		then 'old: ('+p.filter_definition+'); new: ('+c.filter_definition+')'
		else c.filter_definition
	end
	,case when	c.is_primary_key!=p.is_primary_key or
				c.is_unique_constraint!=p.is_unique_constraint or
				c.is_unique!=p.is_unique or
				c.index_type!=p.index_type
		then 'old: ('+
				case
					when c.is_primary_key=1 then 'primary key '
					when c.is_unique_constraint=1 then 'unique constraint '
					when c.is_unique=1 then 'unique index '
					else ''
				end+c.index_type+'); new: ('+
				case
					when p.is_primary_key=1 then 'primary key '
					when p.is_unique_constraint=1 then 'unique constraint '
					when p.is_unique=1 then 'unique index '
					else ''
				end+p.index_type+')'
		else
				case
					when c.is_primary_key=1 then 'primary key '
					when c.is_unique_constraint=1 then 'unique constraint '
					when c.is_unique=1 then 'unique index '
					else ''
				end+c.index_type
	end
	,convert(nvarchar,c.dt$,120)
	,'modify index'
--select c.*, p.*
from #curr c join #prev p	on	c.db = p.db
							and	c.object_name = p.object_name
							and c.index_name = p.index_name
where c.oper$='U'


DECLARE @tableHTML nvarchar(max) = N'<style type="text/css">
#box-table
{
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
font-size: 12px;
text-align: center;
border-collapse: collapse;
border-top: 7px solid #9baff1;
border-bottom: 7px solid #9baff1;
}
#box-table th
{
font-size: 13px;
font-weight: normal;
background: #b9c9fe;
border-right: 2px solid #9baff1;
border-left: 2px solid #9baff1;
border-bottom: 2px solid #9baff1;
color: #039;
}
#box-table td
{
border-right: 1px solid #aabcfe;
border-left: 1px solid #aabcfe;
border-bottom: 1px solid #aabcfe;
color: #669;
}
tr:nth-child(odd) { background-color:#eee; }
tr:nth-child(even) { background-color:#fff; } 
</style>'+ 
N'<table id="box-table" >' +
N'
<th>Object Type</th>
<th>Database Name</th>
<th>Object Name</th>
<th>Index Name</th>
<th>Index Colum</th>
<th>Include Column</th>
<th>Filter Definition</th>
<th>Index Type</th>
<th>DateTime</th>
<th>Operation</th>'
+
coalesce(cast ( (
select 
	 td=type_desc, ''
	,td=db, ''
	,td=object_name, ''
	,td=index_name, ''
	,td=index_column, ''
	,td=include_column, ''
	,td=filter_definition, ''
	,td=index_type, ''
	,td=dt$, ''
	,td=oper$, ''
from #res
order by oper$, dt$
for xml path('tr'), type
) as nvarchar(max) ),'')+
N'</table>';

print @tableHTML
declare @sub nvarchar(200)
set @sub = 'Index changed on[' + @@servername+']'
EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'AlertSystem',
@recipients = 'здесь емаил для рассылки',
@subject = @sub,
@body = @tableHTML,
@body_format = 'HTML'

...
Рейтинг: 0 / 0
Или баг или я туплю. Кто то сталкивался с подобным?
    #39644459
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дед-Папыхтет,

мой пост может покажется вам оффтопом: а чем ddl-триггер не угодил?
...
Рейтинг: 0 / 0
Или баг или я туплю. Кто то сталкивался с подобным?
    #39644465
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ffДед-Папыхтет,

мой пост может покажется вам оффтопом: а чем ddl-триггер не угодил?
Да скорее всего буду переделывать на триггер... Только вот именно в этой ситуации пока не понятна ошибка. Ща пробовал локально. Этот код запускать во время ребилда индекса, во время реорганайз во время create index with(drop_existing=on), работает корректно. Не понятно когда он может ерунду выдавать.... И в чем причина.

А так... Может сложиться ситуация, когда разрабы сами не поставив в известность других создадут новую БД без триггера, и на такой БД, не будет работать подобный мониторинг создания удаления индексов... Вроде так проще - работает и работает...
...
Рейтинг: 0 / 0
Или баг или я туплю. Кто то сталкивался с подобным?
    #39644490
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дед-ПапыхтетДа скорее всего буду переделывать на триггер...Есть еще server audit и event notification.
Данные механизмы позволяют организовать аудит прозрачно, без создания в БД дополнительных сущностей.
...
Рейтинг: 0 / 0
Или баг или я туплю. Кто то сталкивался с подобным?
    #39644523
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Млин, все как обычно )))))
Вижу ошибку, пытаюсь понять в чем проблема - накидывают пути обхода - забей на ошибку.
Да понятно, что есть и аудиты и профайлер с фильтрами и триггера ))))
...
Рейтинг: 0 / 0
Или баг или я туплю. Кто то сталкивался с подобным?
    #39644525
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дед-ПапыхтетМлин, все как обычно )))))
Вижу ошибку, пытаюсь понять в чем проблема - накидывают пути обхода - забей на ошибку.
Да понятно, что есть и аудиты и профайлер с фильтрами и триггера ))))
изобретение велосипеда наше всё ?

на вскидку

Код: sql
1.
2.
3.
4.
5.
6.
7.
declare @dt datetime = getdate()
.... 

select *
into #curr
from dbo.index_list
where dt$ = @dt


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


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