Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all articles
Browse latest Browse all 7251

Контроль размера базы данных сервера MS SQL 2008R2 средствами VBA/ T-SQL

$
0
0
WinXP, MS SQL 2008R2 Express, имеется база данных, состоящая из одной таблицы dbo.Statistic, (модель Simple, autogrowth отключен).
Задача - контролировать размер таблицы, и удалять самые старые записи, если размер больше предельного.
Решение:

Периодически вызываю макрос на VBA, где создаю коннекцию к базе и:
1. Определяю размер таблицы
автор
SELECT
SUM(a.total_pages) * 8 / 1024 AS TotalSpaceMB
FROM sys.tables t
INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.NAME LIKE 'Statistic' AND
i.index_id <= 1
GROUP BY
t.NAME


2. Удаляю записи, относящиеся самому последнему дню, если размер слишком большой.

автор
"DELETE FROM dbo.statistic WHERE dateandtime BETWEEN (SELECT MIN(dateandtime) FROM dbo.statistic) AND (SELECT MIN(dateandtime) FROM dbo.statistic) + 1"



Вроде всё должно работать. Но вопросы такие, хотелось бы упростить решение:

1. Можно ли создать процедуру/функцию в SQL Server Management Studio, чтобы она периодически (раз в час например) вызывалась, и выполняла эти действия средствами T-SQL и SQL Server, обойдясь без VBA. Или вызывать её с помощью Windows scheduler. Я никогда не создавал пользовательские процедуры или функции...(
2. SQL запрос для определения размера таблицы слишком наворочен, нет? Я просто нашел готовый универсальный запрос и адаптировал его под себя.

Спасибо.

Viewing all articles
Browse latest Browse all 7251

Trending Articles