Данные скрипты оставляю здесь, чтобы не потерялись в дальнейшем.
MS SQL Managment studio
-- Объявление переменных
DECLARE @from NVARCHAR(MAX);
DECLARE @from_log NVARCHAR(MAX);
DECLARE @to NVARCHAR(MAX);
DECLARE @to_mdf NVARCHAR(MAX);
DECLARE @to_log NVARCHAR(MAX);
DECLARE @backup_result NVARCHAR(MAX);
DECLARE @backup_folder NVARCHAR(MAX);
DECLARE @BackupSetID INT;
DECLARE @alterSingle NVARCHAR(MAX);
DECLARE @alterMulti NVARCHAR(MAX);
DECLARE @restoreCmd NVARCHAR(MAX);
-- Установка значений переменных
SET @from = N'ИмяБазыОткуда'; -- что бэкапим
SET @to = N'ИмяБазыКуда'; -- куда восстанавливаем
SET @from_log = @from + '_log'; -- имя лог файла источника
SET @backup_folder = N'D:\Base\MSSQL14.MSSQLSERVER\MSSQL\Backup\'; -- каталог бэкапа
SET @backup_result = @backup_folder + @from + '.bak'; -- имя бэкап файла
SET @to_mdf = @backup_folder + @to + '.mdf'; -- имя файла базы приемника
SET @to_log = @backup_folder + @to + '_log.ldf'; -- имя лог файла базы приемника
SET @alterSingle = N'ALTER DATABASE ' + QUOTENAME(@to) + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE;';
SET @alterMulti = N'ALTER DATABASE ' + QUOTENAME(@to) + ' SET MULTI_USER;';
-- Создаем базу данных если она не найдена
IF NOT EXISTS (SELECT name FROM master.sys.databases WHERE name = @to)
BEGIN
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'CREATE DATABASE ' + QUOTENAME(@to);
EXEC sp_executesql @sql;
END
-- Создание файла бэкапа
BACKUP DATABASE @from TO DISK = @backup_result;
-- Изменение на одиночный режим базы приемника для избежания ошибки соединения с базой
EXEC sp_executesql @alterSingle;
-- Восстановление базы приемника
SET @restoreCmd = 'RESTORE DATABASE ' + QUOTENAME(@to) + ' FROM DISK = ''' + @backup_result + ''' WITH MOVE ''' + @from + ''' TO ''' + @to_mdf + ''', MOVE ''' + @from_log + ''' TO ''' + @to_log + ''', REPLACE, RECOVERY';
EXEC sp_executesql @restoreCmd;
-- Изменение базы приемника на многопользовательский режим
EXEC sp_executesql @alterMulti;
-- Проверка существования файла перед удалением
IF EXISTS (SELECT * FROM sys.master_files WHERE physical_name = @backup_result)
BEGIN
-- Удаление файла бекапа с диска
EXEC master.dbo.xp_delete_file 0, @backup_result;
END
ELSE
BEGIN
PRINT 'Файл бэкапа не найден: ' + @backup_result;
END
-- Получение ID из msdb и удаление записи о файле бекапа из msdb
SELECT @BackupSetID = backup_set_id FROM msdb.dbo.backupset AS history WHERE database_name = @from AND recovery_model = 'SIMPLE';
IF ISNUMERIC(@BackupSetID) = 1
BEGIN
DECLARE @BackupSetIDInt INT = CAST(@BackupSetID AS INT);
EXEC msdb.dbo.sp_delete_backuphistory @BackupSetIDInt;
END
ELSE
BEGIN
PRINT 'Переменная @BackupSetID не содержит числовое значение.';
END
ALTER DATABASE ['ИмяБазы']
SET RECOVERY SIMPLE
GO
DBCC SHRINKFILE ([ИмяБазы_log], 1)
GO
ALTER DATABASE [ИмяБазы]
SET RECOVERY FULL
DECLARE @DBName varchar(255);
DECLARE @SQLCommand nvarchar(500);
-- Создаем курсор для перебора всех баз данных
DECLARE DB_Cursor CURSOR FOR
SELECT name FROM master.sys.databases WHERE state = 0 -- Состояние ONLINE
OPEN DB_Cursor;
FETCH NEXT FROM DB_Cursor INTO @DBName;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLCommand = 'ALTER DATABASE [' + @DBName + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC SHRINKDATABASE([' + @DBName + ']);
ALTER DATABASE [' + @DBName + '] SET MULTI_USER;';
EXEC (@SQLCommand);
FETCH NEXT FROM DB_Cursor INTO @DBName;
END;
CLOSE DB_Cursor;
DEALLOCATE DB_Cursor;
-- Перевод базы данных в однопользовательский режим.
ALTER DATABASE dev_zup_pilot SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- Переименование базы данных.
ALTER DATABASE dev_zup_pilot MODIFY NAME = zup_pilot;
-- Переключение базы данных обратно в многопользовательский режим.
ALTER DATABASE zup_pilot SET MULTI_USER;
DECLARE @dbname NVARCHAR(128); -- Объявление переменной для имени базы данных
DECLARE @logname NVARCHAR(128); -- Объявление переменной для имени лог-файла
DECLARE @datafile NVARCHAR(128); -- Объявление переменной для имени файла данных
DECLARE @sql NVARCHAR(MAX); -- Объявление переменной для SQL-запроса
-- Объявление курсора для перебора всех онлайн баз данных, кроме системных
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE state_desc = 'ONLINE'
AND name NOT IN ('master', 'tempdb', 'model', 'msdb');
OPEN db_cursor; -- Открытие курсора
FETCH NEXT FROM db_cursor INTO @dbname; -- Получение следующей базы данных в курсор
WHILE @@FETCH_STATUS = 0 -- Пока есть базы данных для обработки
BEGIN
-- Получение имени лог-файла
SET @logname = (SELECT name FROM sys.master_files WHERE type_desc = 'LOG' AND database_id = DB_ID(@dbname));
-- Получение имени файла данных
SET @datafile = (SELECT name FROM sys.master_files WHERE type_desc = 'ROWS' AND database_id = DB_ID(@dbname));
-- Транзакция лог-файла
SET @sql = 'BACKUP LOG [' + @dbname + '] WITH TRUNCATE_ONLY;';
EXEC sp_executesql @sql;
-- Сжатие лог-файла
SET @sql = 'USE [' + @dbname + ']; DBCC SHRINKFILE (' + @logname + ', 1);';
EXEC sp_executesql @sql;
-- Сжатие файла данных
SET @sql = 'USE [' + @dbname + ']; DBCC SHRINKFILE (' + @datafile + ', 1);';
EXEC sp_executesql @sql;
-- Установка максимального размера для лог-файла
SET @sql = 'ALTER DATABASE [' + @dbname + '] MODIFY FILE (NAME = ' + @logname + ', MAXSIZE = 100MB);';
EXEC sp_executesql @sql;
FETCH NEXT FROM db_cursor INTO @dbname; -- Получение следующей базы данных в курсор
END
CLOSE db_cursor; -- Закрытие курсора
DEALLOCATE db_cursor; -- Освобождение ресурсов, занятых курсором
DECLARE @sql NVARCHAR(MAX) = N'';
-- Генерация команд ALTER DATABASE для каждой базы данных, кроме системных баз данных
SELECT @sql += 'ALTER DATABASE [' + name + '] SET RECOVERY SIMPLE; ' + CHAR(13)
FROM sys.databases
WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb');
-- Выполнение сгенерированных команд
EXEC sp_executesql @sql;
-- Очистка переменной @sql для повторного использования
SET @sql = N'';
-- Генерация команд DBCC SHRINKDATABASE для каждой базы данных, кроме системных баз данных
SELECT @sql += 'DBCC SHRINKDATABASE ([' + name + '], 10); ' + CHAR(13)
FROM sys.databases
WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb');
-- Выполнение сгенерированных команд
EXEC sp_executesql @sql;
CMD
msg * /server:localhost "Ваше сообщение"
Power Shell
# Получаем список всех профилей пользователей
$profiles = Get-WmiObject Win32_UserProfile | Where-Object { $_.Special -eq $false }
foreach ($profile in $profiles) {
$localAppDataPath = Join-Path $profile.LocalPath "AppData\Local\1C"
if (Test-Path $localAppDataPath) {
Write-Host "Удаление содержимого папки: $localAppDataPath"
Remove-Item "$localAppDataPath\*" -Recurse -Force
} else {
Write-Host "Папка не найдена: $localAppDataPath"
}
}
WMI
C:\Windows\system32>Winmgmt /salvagerepository
C:\Windows\system32>net stop Winmgmt
C:\Windows\system32>net start Winmgmt
C:\Windows\system32>Winmgmt /resetrepository
C:\Windows\system32>sc config winmgmt start= auto
C:\Windows\system32>net start winmgmt
C:\Windows\system32>wmiprvse /regserver