Полный план обслуживания для SQL Server 2008
Оптимизация баз данных
Этот раздел посвящен оптимизации баз данных. В этом примере мы собираемся настроить код, чтобы сделать следующее (см. Примерную схему подключения серверов);
- Резервная база данных с живого сервера в общую папку резервного копирования
- База данных переиндекса
- Убейте все соединения и восстановите базу данных на сервере отчетов.
- Связанные серверы скоро будут опубликованы в отдельной статье
- В ближайшее время будет отправлен товар
При выполнении кросс-сервера вам необходимо разрешить учетную запись, с которой SQL Server работает от доступа к файловой системе целевых серверов.
Все SQL-код запускается из базы данных утилит, а схема установлена на «maint»,
Ниже приведено множество других статей, которые могут вас заинтересовать.
Полный план обслуживания
Теперь мы можем управлять всеми этими отдельными сегментами кода с помощью другой процедуры, которая будет вызывать их в правильном порядке, это будет помещено в живой сервер. Код работает следующим образом;
- Разработайте время
- Если это вечерняя переиндексация базы данных
- Запустите резервную копию базы данных (добавьте туда, где вам нужно)
- Если это вечер назад, резервные копии других баз данных (добавьте, где вам нужно)
- Убейте соединения и восстановите базу данных (добавьте туда, где вам нужно)
Этот код проверен и протестирован и работает в течение нескольких месяцев без каких-либо проблем.
Обратите внимание, что сокращение файлов журналов и файлов базы данных должно быть сведено к минимуму, запустив резервную копию, которую вы освобождаете журнал (хотя он сохранит используемое пространство). Если это необходимо, когда оно должно работать за пределами обычного рабочего времени.
SQL Code
GO
CREATE PROC [maint].MaintenancePlan AS BEGIN
DECLARE @BackupType VARCHAR(1)='E'
IF DATEPART(HOUR,GETDATE()) BETWEEN 5 AND 21 BEGIN
SET @BackupType='D'
END
--EXEC ('USE TempDb; DBCC SHRINKFILE(templog, 0)');--This is only needed when space is at a premium!
--Re-index Live
IF @BackupType='E' EXEC [maint].DatabaseReIndex 'dbname'
--Create Backup
BACKUP DATABASE TO DISK=N'{backuplocation}{dbname}.bak'
WITH NOFORMAT, INIT, NAME =N'{dbname}', SKIP, NOREWIND, NOUNLOAD, STATS= 10;
--EXEC ('USE ; DBCC SHRINKFILE(_log, 0)');--This is only needed when space is at a premium!
--Backup Other Files at Night
IF @BackupType='E' BEGIN
EXEC [maint].DatabaseReIndex 'dbname'
--Backup Others
BACKUP DATABASE [databasename] TO DISK=N'{backuplocation}{dbname2}.bak'
WITH FORMAT,INIT, NAME =N'{dbname2}',SKIP, NOREWIND, NOUNLOAD, STATS= 10
END
--Restore Backups on other server
EXEC [server].[utilities].[maint].KillConnections 'dbname';
IF @BackupType='E' BEGIN
EXEC [server].[utilities].[maint].KillConnections 'dbname2';
GO
Резервная база данных
Чтобы получить код для резервного копирования вашей базы данных, проще всего запустить код из SSMS.
Следуйте процессу, который вы обычно используете, а затем выберите «Действие сценария в окне нового запроса».
Скопируйте этот код в план обслуживания.
База данных переиндекса
Затем мы можем добавить код для переиндексации нашей базы данных, это снова является хранимой процедурой общего доступа, где вам нужно только указать системе имя.
Чтобы избежать дублирования кода, вы можете прочитать об этом по ссылке ниже.
Убить соединения
При выполнении восстановления в базе данных у вас может быть только одно соединение с ним (процесс, выполняющий восстановление), поэтому мы можем создать хранимую процедуру, чтобы закрыть все соединения, кроме текущего процесса. Для этого мы снова создали отдельную статью.
Восстановить базу данных
Этот код также можно создать из SQL Server Management Studio. Если вы добавите этот код в хранимую процедуру, вы можете легко вызвать его из других процессов и даже других серверов. Мы переместили это в отдельную статью, чтобы охватить больше возможностей.