powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите доработать запрос MSSQL
10 сообщений из 10, страница 1 из 1
Помогите доработать запрос MSSQL
    #39842032
Mayro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, Коллеги!

Есть такой запрос (см. ниже), который показывает когда последний раз входили в базы (last_user_read), вносили изменения (last_user_update) и дату создания базы (db_create_date).

Подскажите как изменить запрос чтобы он отображал только те базы, которые в названии содержат слово "accounting" и в которые не заходили более 5 дней?


Код: 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.
SELECT 
  DB_NAME(db.database_id) DatabaseName, 
  MAX(CASE WHEN ISNULL(s.last_user_seek, '1900-01-01') > ISNULL(s.last_user_scan, '1900-01-01') 
      THEN 
        CASE WHEN ISNULL(s.last_user_seek, '1900-01-01') > ISNULL(s.last_user_lookup, '1900-01-01') 
        THEN 
          s.last_user_seek
        ELSE
          s.last_user_lookup
        END
      ELSE 
        CASE WHEN ISNULL(s.last_user_scan, '1900-01-01') > ISNULL(s.last_user_lookup, '1900-01-01') 
        THEN 
          s.last_user_scan
        ELSE
          s.last_user_lookup
        END          
      END) AS last_user_read,
  MAX(last_user_update) AS last_user_update,
  db.create_date AS db_create_date
FROM sys.databases db
  LEFT JOIN sys.dm_db_index_usage_stats AS s ON s.database_id = db.database_id
GROUP BY DB_NAME(db.database_id), db.create_date
ORDER BY last_user_read, last_user_update
...
Рейтинг: 0 / 0
Помогите доработать запрос MSSQL
    #39842062
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трехэтажный кейс для получения максимального значения просто великолепен.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT 
    DB_NAME(db.database_id) DatabaseName, 
    max (last_user_read) as last_user_read, 
    MAX(last_user_update) AS last_user_update,
    db.create_date AS db_create_date
FROM sys.databases db
LEFT JOIN sys.dm_db_index_usage_stats AS s ON s.database_id = db.database_id
outer apply (
    select
        last_user_read = max ( isnull (s.last_user_read, '19000101' ) )
    from (
                  select s.last_user_seek
        union all select s.last_user_lookup
        union all select s.last_user_scan
    ) s ( last_user_read )    
) r
GROUP BY DB_NAME(db.database_id), db.create_date
having ( DB_NAME(db.database_id) like '%accounting%' and datediff ( dd, max (last_user_read), getdate() ) > 5 )
ORDER BY last_user_read, last_user_update
...
Рейтинг: 0 / 0
Помогите доработать запрос MSSQL
    #39842063
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, да, в sys.databases есть поле name, если что.
...
Рейтинг: 0 / 0
Помогите доработать запрос MSSQL
    #39842095
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

old school :) Новое поколение выбирает values :)
...
Рейтинг: 0 / 0
Помогите доработать запрос MSSQL
    #39842117
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

У меня от скобок в глазах рябит :-/
...
Рейтинг: 0 / 0
Помогите доработать запрос MSSQL
    #39842120
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич,

В данном запросе, к счастью, всё довольно эстетично, но согласен, порой скобок много:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECT 
    DB_NAME(db.database_id) DatabaseName, 
    max (last_user_read) as last_user_read, 
    MAX(last_user_update) AS last_user_update,
    db.create_date AS db_create_date
FROM sys.databases db
LEFT JOIN sys.dm_db_index_usage_stats AS s ON s.database_id = db.database_id
outer apply (
    select
        last_user_read = max ( isnull (s.last_user_read, '19000101' ) )
    from (values (s.last_user_seek),
                 (s.last_user_lookup),
                 (s.last_user_scan)
	 ) s ( last_user_read )    
) r
GROUP BY DB_NAME(db.database_id), db.create_date
having ( /*DB_NAME(db.database_id) like '%accounting%' and*/ datediff ( dd, max (last_user_read), getdate() ) > 5 )
ORDER BY last_user_read, last_user_update
...
Рейтинг: 0 / 0
Помогите доработать запрос MSSQL
    #39842412
Mayro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,
Владислав Колосов,

Большое спасибо за помощь! Скрипт работает!
...
Рейтинг: 0 / 0
Помогите доработать запрос MSSQL
    #39889217
Mayro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, Коллеги.

Что-то скрипт поработал некоторое время и перестал, показывает что в базы никто не заходил, хотя это не так.
Что это может быть? Откуда скрипт берёт информацию о последнем изменении базы?
Все базы показывают "last_user_read 1900-01-01 00:00:00.000" "last_user_update NULL"
...
Рейтинг: 0 / 0
Помогите доработать запрос MSSQL
    #39889225
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mayro,

После рестарта сервера/базы даты сбрасываются.
...
Рейтинг: 0 / 0
Помогите доработать запрос MSSQL
    #39889556
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mayro,

Может вот это вам полезней будет

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT OBJECT_NAME(IX.OBJECT_ID) Table_Name
	   ,IX.name AS Index_Name
	   ,IX.type_desc Index_Type
	   ,SUM(PS.[used_page_count]) * 8 IndexSizeKB
	   ,IXUS.user_seeks AS NumOfSeeks
	   ,IXUS.user_scans AS NumOfScans
	   ,IXUS.user_lookups AS NumOfLookups
	   ,IXUS.user_updates AS NumOfUpdates
	   ,IXUS.last_user_seek AS LastSeek
	   ,IXUS.last_user_scan AS LastScan
	   ,IXUS.last_user_lookup AS LastLookup
	   ,IXUS.last_user_update AS LastUpdate
FROM sys.indexes IX
INNER JOIN sys.dm_db_index_usage_stats IXUS ON IXUS.index_id = IX.index_id AND IXUS.OBJECT_ID = IX.OBJECT_ID
INNER JOIN sys.dm_db_partition_stats PS on PS.object_id=IX.object_id
WHERE OBJECTPROPERTY(IX.OBJECT_ID,'IsUserTable') = 1
GROUP BY OBJECT_NAME(IX.OBJECT_ID) ,IX.name ,IX.type_desc ,IXUS.user_seeks ,IXUS.user_scans ,IXUS.user_lookups,IXUS.user_updates ,IXUS.last_user_seek ,IXUS.last_user_scan ,IXUS.last_user_lookup ,IXUS.last_user_update
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите доработать запрос MSSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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