Sp helpdb: примеры (SQL)
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: Получение списка всех баз данных экземпляра.
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
\l в psql или запрос к представлению pg_database.SELECT datname, datdba, encoding, datcollate FROM pg_database;DBA_DATAFILES, V$DATABASE или DBA_TABLESPACES. Концепция отличается, так как в Oracle база данных обычно одна на экземпляр, но есть множество табличных пространств.SELECT name, log_mode, created FROM v$database;.databases в утилите sqlite3 или выполнение запроса PRAGMA database_list;.PRAGMA database_list;seq | name | file 0 | main | /path/to/database.db
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 во временную таблицу для анализа.
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: Определение суммарного размера всех пользовательских баз данных на экземпляре.
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: Проверка параметров сортировки для нескольких баз.
EXEC sp_helpdb 'master';
-- В результатах будет отдельный набор, содержащий параметры сортировки для указанной базы.
-- Альтернативно можно использовать:
SELECT name, collation_name FROM sys.databases;Пример 4: Поиск баз данных с автоматическим сжатием файлов.
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;