Sp helpdb: примеры (SQL)

Использование процедуры sp_helpdb для анализа баз данных в SQL Server
Раздел: Системные административные функции, Метаданные
sp_helpdb([@dbname =] 'name'): N/A

Описание функции sp_helpdb

Системная хранимая процедура sp_helpdb в Microsoft SQL Server предназначена для возврата сведений об одной или всех базах данных на экземпляре сервера. Она часто применяется администраторами для быстрого получения сводной информации о конфигурации, размере, состоянии и параметрах баз данных.

Процедура может вызываться без параметров для вывода списка всех баз данных или с указанием конкретного имени базы данных в качестве аргумента.

Аргументы

  • [@dbname =] 'dbname' — имя базы данных, по которой запрашивается информация. Аргумент является необязательным, имеет тип sysname и значение по умолчанию NULL. Если указан, возвращаются детальные сведения о заданной базе. Если аргумент опущен или равен NULL, данные выводятся для всех баз данных экземпляра.

Возвращаемые значения

Процедура возвращает несколько результирующих наборов.

Первый набор (при запросе всех баз) содержит столбцы:

  • name — имя базы данных.
  • db_size — общий размер базы данных.
  • owner — владелец базы (обычно 'sa').
  • dbid — идентификатор базы данных.
  • created — дата создания.
  • status — текстовое описание параметров базы данных, разделенных запятыми.
  • compatibility_level — уровень совместимости.

Второй и последующие наборы (при запросе конкретной базы) включают:

  1. Тот же набор, что и для всех баз, но для одной указанной.
  2. Список файлов базы данных с атрибутами: имя, идентификатор, тип (данные/журнал), файловая группа, размер, макс. размер, приращение, путь.
  3. Сведения о параметрах сортировки базы.

Примеры использования

Пример 1: Получение списка всех баз данных экземпляра.

EXEC sp_helpdb;
name         | db_size | owner | dbid | created   | status                                           | compatibility_level
master       | 6.94 MB | sa    | 1    | 2003-04-08 | Status=ONLINE, Updateability=READ_WRITE, ...     | 160
model        | 4.69 MB | sa    | 3    | 2003-04-08 | Status=ONLINE, Updateability=READ_WRITE, ...     | 160
msdb         | 16.06 MB| sa    | 4    | 2022-01-10 | Status=ONLINE, Updateability=READ_WRITE, ...     | 160
AdventureWorks| 237.56 MB| sa   | 5    | 2022-05-15 | Status=ONLINE, Updateability=READ_WRITE, ...     | 160

Пример 2: Запрос информации о конкретной базе данных.

EXEC sp_helpdb 'AdventureWorks';
name         | db_size | owner | dbid | created   | status                                           | compatibility_level
AdventureWorks| 237.56 MB| sa   | 5    | 2022-05-15 | Status=ONLINE, Updateability=READ_WRITE, ...     | 160

(Далее второй результирующий набор с файлами)
name       | fileid | filename                 | filegroup | size    | maxsize   | growth | usage
AdventureWorks_Data| 1 | E:\Data\AdventureWorks.mdf | PRIMARY   | 216064 KB| Unlimited | 65536 KB | data only
AdventureWorks_Log | 2 | E:\Log\AdventureWorks.ldf | NULL      | 221184 KB| 2097152 KB| 65536 KB | log only

Похожие функции в MS SQL

  • sys.databases — системное представление, предоставляющее наиболее полную информацию о базах данных. Позволяет гибко фильтровать и сортировать данные через WHERE и ORDER BY. Часто предпочтительнее для программного использования в скриптах.
  • DATABASEPROPERTYEX() — скалярная функция для получения значения конкретного свойства базы данных, например, уровня совместимости или параметров сортировки.
  • sys.database_files — представление с детальной информацией о файлах текущей базы данных. Аналог второго набора sp_helpdb.
  • sp_databases — системная процедура, которая возвращает список баз данных, видимых из текущего сеанса. Более ограниченная, чем sp_helpdb.

Для детального анализа и автоматизации предпочтительнее использовать sys.databases и другие системные представления, так как они предоставляют структурированные данные. Процедура sp_helpdb удобна для быстрого интерактивного просмотра в среде SSMS.

Аналоги в других СУБД

  • MySQL: Команда SHOW DATABASES выводит список баз. Для детальной информации используется запрос к схеме INFORMATION_SCHEMA.SCHEMATA или команда SHOW CREATE DATABASE db_name.
  • SHOW DATABASES;
    SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_name';
    Database
    information_schema
    mysql
    performance_schema
    testdb
  • PostgreSQL: Команда \l в psql или запрос к представлению pg_database.
  • SELECT datname, datdba, encoding, datcollate FROM pg_database;
  • Oracle: Запрос к представлениям DBA_DATAFILES, V$DATABASE или DBA_TABLESPACES. Концепция отличается, так как в Oracle база данных обычно одна на экземпляр, но есть множество табличных пространств.
  • SELECT name, log_mode, created FROM v$database;
  • SQLite: Команда .databases в утилите sqlite3 или выполнение запроса PRAGMA database_list;.
  • PRAGMA database_list;
    seq | name    | file
    0   | main    | /path/to/database.db
  • Sybase ASE: Имеет одноименную процедуру sp_helpdb, синтаксис и функциональность которой очень похожи на MS SQL, что обусловлено общими историческими корнями.

Типичные ошибки

Ошибка 1: Указание несуществующей базы данных.

EXEC sp_helpdb 'NonExistentDB';
Сообщение 15010, уровень 16, состояние 1, процедура sp_helpdb, строка 51
База данных 'NonExistentDB' не существует. Укажите допустимое имя базы данных.

Ошибка 2: Недостаточные права доступа. Пользователь должен иметь как минимум разрешение VIEW ANY DATABASE или быть членом предопределенных ролей, таких как public.

Ошибка 3: Попытка использования в контексте базы данных, которая находится в офлайн-режиме или недоступна. Процедура может не вернуть данные или выдать ошибку.

Изменения в последних версиях

Значительных изменений в синтаксисе или основных возвращаемых данных процедуры sp_helpdb в последних версиях SQL Server (2016, 2017, 2019, 2022) не произошло. Однако содержимое столбца status может расширяться с появлением новых свойств баз данных (например, ускоренное восстановление). Также в очень старых версиях SQL Server (до 2000) процедура могла иметь несколько отличающийся формат вывода. Рекомендуется для получения наиболее точной информации сверяться с документацией для используемой версии.

Расширенные примеры применения

Пример 1: Использование результатов sp_helpdb во временную таблицу для анализа.

Пример sql
CREATE TABLE #DbInfo (
    name sysname,
    db_size nvarchar(50),
    owner sysname,
    dbid smallint,
    created datetime,
    status nvarchar(500),
    compatibility_level tinyint
);
INSERT INTO #DbInfo
EXEC sp_helpdb;
SELECT name, db_size, created FROM #DbInfo WHERE dbid > 4;
DROP TABLE #DbInfo;

Пример 2: Определение суммарного размера всех пользовательских баз данных на экземпляре.

Пример sql
CREATE TABLE #DbSizes (name sysname, size_mb float);
INSERT INTO #DbSizes
EXEC sp_MSforeachdb 'USE [?]; SELECT DB_NAME(), SUM(size)*8/1024.0 FROM sys.database_files';
SELECT SUM(size_mb) AS TotalSizeMB FROM #DbSizes WHERE name NOT IN ('master','model','msdb','tempdb');
DROP TABLE #DbSizes;

Пример 3: Проверка параметров сортировки для нескольких баз.

Пример sql
EXEC sp_helpdb 'master';
-- В результатах будет отдельный набор, содержащий параметры сортировки для указанной базы.
-- Альтернативно можно использовать:
SELECT name, collation_name FROM sys.databases;

Пример 4: Поиск баз данных с автоматическим сжатием файлов.

Пример sql
CREATE TABLE #DbFiles (DBName sysname, FileName sysname, FileGroup sysname, Growth int);
INSERT INTO #DbFiles
EXEC sp_MSforeachdb 'USE [?]; SELECT DB_NAME(), name, filegroup_name(groupid), growth FROM sysfiles';
SELECT DISTINCT DBName FROM #DbFiles WHERE Growth > 100; -- Growth в страницах
DROP TABLE #DbFiles;

MS SQL sp_helpdb function comments

En
Sp helpdb Reports information about a specified database or all databases