Процедура от Ola Hallengren — DatabaseIntegrityCheck, позволяет проверить базу, файловую группу или таблицу. Если используется полноценный SQL Server, то можно использовать его в Maintains Paln. Если SQL Express, то можно использовать данную процедуру в планировщике, так как агент-SQL в этой редакции отсутствует. Проверка необходима перед архивацией базы. Нет смысла архивировать разрушенную базу!!! поэтому перед архивацией необходим проверить целостность данных. В качестве параметров можно указать список баз данных, время блокировки, объекты проверки и некоторые другие параметры. Данную процедуру удобно использовать при большом количестве баз данных или при обслуживании баз разработчиков, которые постоянно плодят новые ветки и заливают в новые базы. Полный список параметров и примеры использования ниже
Параметры
В качестве аргументов, отвечающих за выбор объектов проверки можно передать SYSTEM_DATABASES, USER_DATABASES, ALL_DATABASES и AVAILABILITY_GROUP_DATABASES, если поддерживается. Знак (-) используется для исключения базы, а знак процента (%) выполняет роль символа подстановки. Все используемые параметры могут быть разделены занятой (,)
Databases
Переменная | Описание |
---|---|
SYSTEM_DATABASES | Все системные базы (master, msdb, and model) |
USER_DATABASES | Все пользовательские базы |
ALL_DATABASES | Все базы |
AVAILABILITY_GROUP_DATABASES | Все базы и группы доступности |
USER_DATABASES, -AVAILABILITY_GROUP_DATABASES | Все пользовательские базы, исключая группы доступности |
Db1 | Ваза Db1 |
Db1, Db2 | Базы Db1 и Db2 |
USER_DATABASES, -Db1 | Все пользовательские базы, за исключением Db1 |
%Db% | Все базы, имеющие в названии Db |
%Db%, -Db1 | Все базы имеющие в названии Db, за исключением базы Db1 |
ALL_DATABASES, -%Db% | Все базы, за исключением тех, которые имеют в названии Db |
CheckCommands
Использование данного параметра может ускорить скорость проверки путем исключения не нужных объектов или разделить задание на два этапа.
Переменная | Описание |
---|---|
CHECKDB | Проверяет логическую и физическую целостность всех объектов. По умолчанию |
CHECKFILEGROUP | Проверяет распределение и структуру целостности всех таблиц и индексированных представлений в файловой группе |
CHECKTABLE | Проверяет целостность всех страниц и структур, составляющих таблицу или индексированное представление |
CHECKALLOC | Проверяет согласованность структур выделения места на диске |
CHECKCATALOG | Проверяет согласованность каталогов в указанной базе данных |
CHECKALLOC,CHECKCATALOG | Совмещает два параметра — проверку таблиц и представлений |
CHECKFILEGROUP,CHECKCATALOG | Проверяет представления и таблицы для файловых групп |
CHECKALLOC,CHECKTABLE,CHECKCATALOG | Проверяет параметры свободного места для таблиц и индексов, а также согласованность каталогов |
При составлении команд использовалось описание для SQL Server: DBCC CHECKDB проверка баз данных, DBCC CHECKFILEGROUP проверка фаловых групп, DBCC CHECKTABLE проверка таблиц и индексных представлений, DBCC CHECKALLOC проверка свободного места в таблицах и DBCC CHECKCATALOG проверка согласованности каталогов.
PhysicalOnly
Ограничиться только физической проверкой структуры базы
Переменная | Описание |
---|---|
Y | Ограничиться только физической проверкой структуры базы |
N | Не ограничиться только физической проверкой структуры базы. По умолчанию |
Параметр PHYSICAL_ONLY использует опции следующих команд DBCC CHECKDB, DBCC CHECKFILEGROUP и DBCC CHECKTABLE
NoIndex
Не проверять не кластеризированные индексы
Переменная | Описание |
---|---|
Y | Не проверять |
N | Проверять. По умолчанию |
Параметр NoIndex использует опции следующих команд DBCC CHECKDB, DBCC CHECKFILEGROUP, DBCC CHECKTABLE и DBCC CHECKALLOC
ExtendedLogicalChecks
Упрощенная проверка логической структуры
Переменная | Описание |
---|---|
Y | Провести простую проверку |
N | Не проводить простую проверку. По умолчанию |
Параметр ExtendedLogicalChecks использует опции следующих команд EXTENDED_LOGICAL_CHECKS и команды SQL Server DBCC CHECKDB
Нельзя комбинировать параметры PhysicalOnly и ExtendedLogicalChecks.
TabLock
Позволяет использовать внешний снапшот
Переменная | Описание |
---|---|
Y | Использовать блокировку, для проверки |
N | Использовать снапшот. По умолчанию |
Параметр TabLock использует опции следующих команд DBCC CHECKDB, DBCC CHECKFILEGROUP, DBCC CHECKTABLE и DBCC CHECKALLOC
FileGroups
Выбор файловых групп. Данный параметр поддерживает выборку по словам. Знак минус (-) позволяет исключить файловую группу, а знак процента (%) позволяет задать маску. Все операторы могут быть объединены запятой (,)
Переменная | Описание |
---|---|
ALL_FILEGROUPS | Все файловые группы |
Db1.FileGroup1 | Файловая группа FileGroup1 в базе Db1 |
Db1.FileGroup1, Db2.FileGroup2 | Файловая группа FileGroup1 в базе Db1 и фаловая группа FileGroup2 в базе Db2 |
ALL_FILEGROUPS, -Db1.FileGroup1 | Все файловые группы, за исключением FileGroup1 в базе Db1 |
Db1.%FileGroup% | Все файловые группы в базе Db1 имеющие в своем имени “FileGroup” |
Используются только специфические опции CHECKFILEGROUPS.
Objects
Выбор объектов. Параметр ALL_OBJECTS поддерживает выбор по маске. Знак минус (-) позволяет исключить файловую группу, а знак процента (%) позволяет задать маску. Все операторы могут быть объединены запятой (,)
Переменная | Описание |
---|---|
ALL_OBJECTS | Все объекты |
Db1.Schema1.Tbl1 | Объект Schema1.Tbl1 в базе Db1 |
Db1.Schema1.Object1, Db2.Schema2.Object2 | Объект Schema1.Tbl1 в базе Db1 и объект Schema2.Tbl2 б базе данных Db2 |
ALL_OBJECTS, -Db1.Schema1.Object1 | Все объекты, кроме Schema1.Object1 в базе Db1 |
Db1.Schema1.% | Все объекты в схеме Schema1 находящейся в базе Db1 |
Данный параметр можно использовать только совместно с параметром CHECKTABLE
MaxDOP
Количество ядер процессора выделенных для проверки базы, файловой группы или таблицы. Если данный параметр не задан, будут использоваться максимальное значение степени параллелизма.
Данный параметр может быть использован совместно с параметрами DBCC CHECKDB, DBCC CHECKFILEGROUP и DBCC CHECKTABLE
AvailabilityGroups
выбор групп доступности. Параметр ALL_AVAILABILITY_GROUPS разрешает использование маски. Знак минус (-) позволяет исключить файловую группу, а знак процента (%) позволяет задать маску. Все операторы могут быть объединены запятой (,)
Переменная | Описание |
---|---|
ALL_AVAILABILITY_GROUPS | Все группы доступности |
AG1 | Группа доступности AG1 |
AG1, AG2 | Группа доступности AG1 и AG1 |
ALL_AVAILABILITY_GROUPS, -AG1 | Все группы доступности, за исключением группы AG1 |
%AG% | Все группы доступности содержащие в своем имени “AG” |
%AG%, -AG1 | Все группы доступности содержащие в своем имени “AG” за исключением группы AG1 |
ALL_AVAILABILITY_GROUPS, -%AG% | Все группы доступности не содержащие в своем имени “AG” |
AvailabilityGroupReplicas
Выбор реплики для необходимости проверки.
Переменная | Описание |
---|---|
ALL | Проверяжтся все реплики. По умолчанию |
PRIMARY | Проверяется только первичная реплика |
SECONDARY | Проверяется только вторичная реплика |
Updateability
Задает режим для базы данны READ_ONLY/READ_WRITE
Переменная | Описание |
---|---|
ALL | READ_ONLY и READ_WRITE — база данных. До умолчанию |
READ_ONLY | READ_ONLY — только чтение |
READ_WRITE | READ_WRITE — чтение запись |
Переменная READ_ONLY в sys.databases используется если база в режиме READ_ONLY или READ_WRITE (Трудности перевода, пока не разбирался с данной переменной)
LockTimeout
Устанавливает время блокировки, после которого необходимо освободить захваченный объект. По умолчанию лимит отсутствует.
Параметр LockTimeout в хранимой процедуре IndexOptimize использует SET LOCK_TIMEOUT в терминологии SQL Server.
LogToTable
Логирование команд в таблицу dbo.CommandLog
Переменная | Описание |
---|---|
Y | Логировать команды в таблицу |
N | Не логировать команды. По умолчанию |
Execute
Выполнение команд. По умолчанию команды отправляются на выполнение. Если установлено значение N, то команды будут выведены без выполнения.
Переменная | Описание |
---|---|
Y | Выполнять команды. По умолчанию |
N | Только вывеси команды |
Примеры использования вложенной процедуры
A. Проверка целостности во всех пользовательских базах
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = ‘USER_DATABASES’,
@CheckCommands = ‘CHECKDB’
B. Проверка физической целостности данных во всех пользовательских базах
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = ‘USER_DATABASES’,
@CheckCommands = ‘CHECKDB’,
@PhysicalOnly = ‘Y’
C. Проверка целостности данных во всех пользовательских базах, с использованием опции исключающей проверку не кластеризованных индексов
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = ‘USER_DATABASES’,
@CheckCommands = ‘CHECKDB’,
@NoIndex = ‘Y’
D. Проверка целостности данных во всех пользовательских базах, с использованием опции упрощенной проверки логической структуры
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = ‘USER_DATABASES’,
@CheckCommands = ‘CHECKDB’,
@ExtendedLogicalChecks = ‘Y’
E. Проверка целостности данных в файловой группе PRIMARY базы данных AdventureWorks
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = ‘AdventureWorks’,
@CheckCommands = ‘CHECKFILEGROUP’,
@FileGroups = ‘AdventureWorks.PRIMARY’
F. Проверка целостности данных во всех файловых группах, за исключением файловой группы PRIMARY базы данных AdventureWorks
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = ‘USER_DATABASES’,
@CheckCommands = ‘CHECKFILEGROUP’,
@FileGroups = ‘ALL_FILEGROUPS, -AdventureWorks.PRIMARY’
G. Проверка целостности данных в таблице Production.Product базы данных AdventureWorks
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = ‘AdventureWorks’,
@CheckCommands = ‘CHECKTABLE’,
@Objects = ‘AdventureWorks.Production.Product’
H. Проверка целостности данных всех таблиц за исключение таблицы Production.Product базы данных AdventureWorks
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = ‘USER_DATABASES’,
@CheckCommands = ‘CHECKTABLE’,
@Objects = ‘ALL_OBJECTS, -AdventureWorks.Production.Product’
I. Проверка дискового места во всех пользовательских базах
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = ‘USER_DATABASES’,
@CheckCommands = ‘CHECKALLOC’
Выполнение
Для выполнения хранимой процедуры, необходимо использовать sqlcmd и опцию -b. Вызов процедуры происходит по имени
1 2 3 |
sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d master -Q "EXECUTE dbo.DatabaseIntegrityCheck @Databases = 'USER_DATABASES'" -b |