Получение размера базы данных MS SQL T-sql запросом к MS SQL Server

Опубликовал Павел (d0dger) в раздел Программирование - Практика программирования

Получение размера базы sql

Не считаю себя гуру t-sql, но уже не первый раз приходится отвечать на вопрос "как узнать размер базы на сервере ms-sql?".

Для этого предлагается воспользоваться простым скриптом t-sql:

SELECT
  LTRIM(STR((CONVERT (dec (15,2),dbsize) + CONVERT(dec (15,2),logsize)) * 8192 / 1048576, 15, 2) + ' MB') РазмерБазы
FROM
(
 SELECT SUM(CONVERT(BIGINT,CASE WHEN status & 64 = 0 THEN size ELSE 0 END)) dbsize
 , SUM(CONVERT(BIGINT,CASE WHEN status & 64 <> 0 THEN size ELSE 0 END)) logsize
 FROM dbo.sysfiles
) big

Он позволяет определить размер базы в текущем соединении, при необходимости можно воспользоваться командой useи получить размер другой базы данных

Пример использования для 1С 7.7 можно скачать из аттача. Используется 1С++

Пример использование для 1С 8.2 предполагает наличие строки соединения с 1С, используется ADO

Скачать файлы

Наименование Файл Версия Размер
Получение размера базы 7.7
.ert 58,00Kb
13.01.12
18
.ert 58,00Kb 18 Скачать
Получение размера базы 8.2
.epf 6,68Kb
13.01.12
22
.epf 6,68Kb 22 Скачать

См. также

Комментарии
1. Ёпрст (Ёпрст) 1015 13.01.12 11:23 Сейчас в теме
По-уму, добваь еще в скрипт use databasename
И это, это не только для клюшек сойдет - а для любых баз.

ЗЫ: Модеры, уберите нахрен гамнокнопку - "подписаться на новые каменты", иначе никаких каментов к поделкам вы не увидите никогда, идиотизм это!
2. Павел (d0dger) 77 13.01.12 11:57 Сейчас в теме
(1) Можно конечно извратиться - получить список всех баз, вывести их в список, а потом показывать свободной место выбранной, вот только кому это нужно будет :)
А по-поводу для любой платформы - да, надо поменять и выложить обработку для 8, спс...
3. Гость 20.01.12 13:45 Сейчас в теме
после первого же запуска 1с-ка вылетела наглухо
4. Павел (d0dger) 77 20.01.12 13:47 Сейчас в теме
(3) Гость, интересно на какой именно инструкции вылетело, какая версия 1с++?
5. olga pt (pt_olga) 58 06.12.12 11:26 Сейчас в теме
блин, мне нужно было получить размер каждой из таблиц базы SQL, а не Игого :( деньги на ветер
6. Павел (d0dger) 77 06.12.12 11:47 Сейчас в теме
create table #t(name varchar(255), row varchar(255), reserved varchar(255), data varchar(255), inxex_size varchar(255), unused varchar(255))

insert into #t
exec sp_msforeachtable N'exec sp_spaceused ''?'''

select * from #t
drop table #t
7. Иван (newgluk) 72 13.11.14 13:07 Сейчас в теме
а что это за странная арифметика?) " 8192 / 1048576 "
иначе говоря, в каких единицах в dbo.sysfiles хранится размер файлов?
8. Павел (d0dger) 77 13.11.14 14:19 Сейчас в теме
(7) newgluk, MS SQL Server хранит данные в страницах по 8 Кб, соответственно. Умножаем на 8192 - размер в байтах, делим на 1048576 (1024 * 1024) - получаем размер в мегабайтах.