Перейти к содержимому

Mssql

Все по MSsql

Как восстановить базы данных SQL Server автоматически с уведомлениями по email с помощью PowerShell

Описание:
В статье представлен готовый PowerShell-скрипт для автоматического восстановления баз данных SQL Server из резервных копий. Скрипт использует модуль dbatools, выполняет параллельное восстановление нескольких баз, автоматически определяет пути для файлов данных и логов, а также отправляет подробные email-отчёты о ходе и результатах операции. Подходит для регулярных задач обновления тестовых сред или восстановления после сбоев. Так же добавляет к имени базы DEV

# ======================================================================
# Автоматическое восстановление баз данных с уведомлениями по email
# ======================================================================
# Требуется: модуль dbatools, доступ к бэкапам и целевому SQL Server
# ======================================================================

# Подключаем модуль dbatools
Import-Module dbatools -ErrorAction Stop

# === Параметры (настраиваемые) ===
Читать далее

Как пересоздать индексы mssql в новую файловую группу с помощью PowerShell и dbatools с логированием и бэкапом.

Описание:
Представляю вашему вниманию PowerShell-скрипт для автоматизации сложной процедуры переноса индексов между файловыми группами в Microsoft SQL Server.
Скрипт решает задачу пересоздания индексов в целевой файловой группе (или ФГ по умолчанию) с учетом всех «подводных камней»: он автоматически пропускает индексы, связанные с полнотекстовым поиском или XML-индексами, создаёт резервные копии (скрипты CREATE) для каждого изменяемого индекса и ведёт детальный лог как в файловой системе, так и в таблице базы данных.

Ключевые возможности:

  • Избирательность: Пересоздаёт только те индексы, которые физически находятся не в целевой файловой группе.

  • Безопасность: Автоматическое создание CREATE-скриптов для быстрого отката. Очистка старых бэкапов (>7 дней).

  • Интеллектуальность: Пропуск индексов

Читать далее

Как сделать проверку бэкапов mssql через Powershell 7 и dbatools.

Задача автоматизировать проверку бэкапов mssql . 

Основные возможности:

  1. Сканирование структуры бэкапов — автоматическое обнаружение резервных копий баз данных в заданной папке

  2. Гибкая настройка именования — возможность переименования баз при восстановлении

  3. Управление дисковым пространством — автоматическое освобождение места при необходимости

  4. Параллельное восстановление — одновременное восстановление нескольких баз для ускорения процесса

  5. Проверка целостности — автоматическая проверка восстановленных баз (DBCC CHECKDB)

  6. Логирование и отчетность — детальное логирование и отправка отчетов по email

  7. Удаление старых баз — различные стратегии удаления существующих баз перед восстановлением

Режимы управления пространством:

  • Calculate/Smart — удаляет только минимально необходимые базы

  • All — удаляет все базы (кроме системных)

  • None — не

Читать далее

Как сделать скрипт для восстановления баз данных из шары.

Задача раз 2 недели восстанавливать базы данных на dev сервер. Бэкап сделаны с помощью ola.hallengren

-- В ночь с субботы на воскресение
--if(datepart(weekday, getdate()) = 1)
-- Для миграции на АГ сметили создание резервных копий для того что бы использовать верфицированые фулл бэкапы в процессе работ
-- В ночь с Пятницу на субботу  (В Субботу в 01.00 создать фулл бекап)

if(datepart(weekday, getdate()) = 7)
begin
    EXECUTE [dbo].[DatabaseBackup]
    @Databases = 'USER_DATABASES,-%_restore',
    @Directory = N'\\ARC03.adminbd.ru\sql_backup$',
    @BackupType = 'FULL',
    @Verify = 'Y',
    @Compress = 'Y',
    @CleanupTime = 312,
    @CleanupMode = 'AFTER_BACKUP',
    @CheckSum = 'Y',
    @LogToTable = 'Y',
    @DatabasesInParallel= 'Y';
end

Скрипт восстановления

# 
Читать далее

Как вывести размер всех баз mssql

SELECT 
    DB_NAME(database_id) AS 'Database Name',
    REPLACE(CONVERT(VARCHAR, CAST(SUM(size) * 8.0 / 1024 AS DECIMAL(10,2)), 111), '.', ',') AS 'Size_MB',
    REPLACE(CONVERT(VARCHAR, CAST(SUM(size) * 8.0 / 1048576 AS DECIMAL(10,2)), 111), '.', ',') AS 'Size_GB',
    REPLACE(CONVERT(VARCHAR, CAST(SUM(size) * 8.0 / 1073741824 AS DECIMAL(10,2)), 111), '.', ',') AS 'Size_TB'
FROM sys.master_files
GROUP BY database_id
ORDER BY SUM(size) * 8.0 / 1024 DESC;

 

Как пересоздать индексы для новой файловой группы mssql.

Задача пересоздать индексы для новой файловой группы что бы распределить данные.

Если версия mssql до 2016

Создайте пользовательскую функцию (если нет)

IF OBJECT_ID('dbo.SplitString', 'TF') IS NOT NULL
    DROP FUNCTION dbo.SplitString;
GO

CREATE FUNCTION dbo.SplitString
(
    @Input NVARCHAR(MAX),
    @Delimiter NCHAR(1)
)
RETURNS @Output TABLE (
    Value NVARCHAR(4000)
)
AS
BEGIN
    IF @Input IS NULL RETURN;

    DECLARE @Start INT = 1, @End INT;

    WHILE @Start <= LEN(@Input)
    BEGIN
        SET @End = CHARINDEX(@Delimiter, @Input, @Start);
        IF @End = 0 
            SET @End = LEN(@Input) + 1;

        INSERT INTO @Output (Value)
        VALUES (LTRIM(RTRIM(SUBSTRING(@Input, @Start, @End - @Start))));

        SET @Start = @End + 1;
    END

    RETURN;
Читать далее

Как вывести в mssql какие права имеет пользователь или группа ad на базы данных .

Задача сделать ревизию какие права имеют доменные группы и пользователи права на базы данных

-- Удаляем временную таблицу, если существует
IF OBJECT_ID('tempdb..#Permissions') IS NOT NULL
    DROP TABLE #Permissions;

-- Создаём временную таблицу для результатов
CREATE TABLE #Permissions (
    DatabaseName SYSNAME,
    LoginName NVARCHAR(256),
    UserInDB NVARCHAR(256),
    DatabaseRole NVARCHAR(256)
);

-- Динамически проверяем все базы данных
EXEC sp_MSforeachdb '
USE [?];
INSERT INTO #Permissions (DatabaseName, LoginName, UserInDB, DatabaseRole)
SELECT 
    ''?'' AS DatabaseName,
    sp.name AS LoginName,
    dp.name AS UserInDB,
    ISNULL(dr.name, ''Public role or no role'') AS DatabaseRole
FROM sys.database_principals dp
JOIN sys.server_principals sp ON dp.sid = sp.sid
LEFT JOIN sys.database_role_members drm ON dp.principal_id = 
Читать далее

Как в always on mssql синхронизировать логины и пароль на вторичной реплики и удалять логины когда удалили на первичной c проверкой хэш паролей

Первый скрипт 

Задача сделать синхронизацию логинов с праймери реплики в mssql на секондори реплики с проверкой паролей совпадают или нет . если не совпадают то скопировать логин с правильным паролем. Сделал проверку по хэшу паролей. Лог будет удаляться из папки старше 7 дней

Set-DbatoolsInsecureConnection -SessionOnly
# Параметры
$AGListenerName = "db01" # Имя листенера группы доступности
$LogFolder = "D:\DBA_scripts_AG\log"
$MaxLogAge = 7 # Максимальный возраст логов в днях

# Создаем папку для логов если не существует
if (-not (Test-Path $LogFolder)) {
    New-Item -ItemType Directory -Path $LogFolder -Force | Out-Null
}

# Удаляем старые логи (старше 7 дней)
Get-ChildItem -Path $LogFolder  | 
Читать далее

Как в Mssql сделать новый файл файловой группы на новом диске H .

Задача в mssql добавить новый файл файловой группы на базах на новый диск H

Проверяем какие базы не имеют файлов на диске

SELECT
    DB_NAME(database_id) AS DatabaseName
FROM
    sys.master_files
WHERE
    database_id > 4 -- исключаем системные базы
GROUP BY
    database_id
HAVING
    SUM(CASE WHEN LEFT(physical_name, 1) = 'H' THEN 1 ELSE 0 END) = 0;

Создать команды для создания файла по всем базам.

-- Объявление переменных
DECLARE @Sql NVARCHAR(MAX);
DECLARE @DbName NVARCHAR(128);

-- Удаление временных таблиц, если они уже существуют
IF OBJECT_ID('tempdb..#DatabaseFG') IS NOT NULL DROP TABLE tempdb..#DatabaseFG;
IF OBJECT_ID('tempdb..#SysFiles') IS NOT NULL DROP TABLE tempdb..#SysFiles;
IF OBJECT_ID('tempdb..#DatabaseList') IS NOT NULL DROP 
Читать далее

Как сделать скрипт для бэкапа mssql что бы следить что фуул лежит в том же месте что и новое место.

Задача сделать скрипт который будет проверять если ли фулл бэкап в заданной директории .

Процедура используется SQL Server Backup ola.hallengren

 

-- Объявляем переменные
DECLARE @BackupDirectory NVARCHAR(500) = N'\\ARC03\sql_backup$';
DECLARE @DatabaseList NVARCHAR(MAX) = ''; -- Список баз для бэкапа
DECLARE @DatabaseName NVARCHAR(128);
DECLARE @LastFullBackupPath NVARCHAR(500);
DECLARE @LastFullBackupDate DATETIME;

-- Курсор для перебора всех пользовательских баз данных
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE database_id > 4 -- Исключаем системные базы данных
AND state = 0; -- Только базы в режиме ONLINE

-- Открываем курсор
OPEN db_cursor;

-- Перебираем базы данных
FETCH NEXT FROM db_cursor INTO @DatabaseName;

WHILE @@FETCH_STATUS 
Читать далее
Яндекс.Метрика