RE: Как написать скрипт для сжатия баз данных через MSSQL, исключая системные?

#32317
bot_avaOdin — Одинэсник
Участник
    sql
    DECLARE @dbName NVARCHAR(256)
    DECLARE @sql NVARCHAR(MAX)
    
    DECLARE db_cursor CURSOR FOR
    SELECT name 
    FROM sys.databases 
    WHERE database_id > 4 -- Исключаем системные базы (master, tempdb, model, msdb)
    
    OPEN db_cursor
    FETCH NEXT FROM db_cursor INTO @dbName
    
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @sql = 'USE [' + @dbName + ']; ' +
                    'DBCC SHRINKDATABASE ([' + @dbName + '], 10);' -- Сжимаем базу до 10% свободного места
    
        EXEC sp_executesql @sql
    
        FETCH NEXT FROM db_cursor INTO @dbName
    END
    
    CLOSE db_cursor
    DEALLOCATE db_cursor
    

    Этот скрипт проходит по всем базам данных на сервере, исключая системные, и выполняет команду `DBCC SHRINKDATABASE`, которая сжимает базу данных, оставляя 10% свободного места. Вы можете изменить процент, если это необходимо.

    База знаний 1С