Данные скрипты оставляю здесь, чтобы не потерялись в дальнейшем.
MS SQL Managment studio
Этот SQL-запрос выполняет резервное копирование и восстановление базы данных в Microsoft SQL Server. Он включает в себя несколько ключевых шагов:
-
Объявление переменных: Переменные используются для хранения имен баз данных, путей к файлам резервных копий и команд SQL, необходимых для выполнения операций.
-
Установка значений переменных: Переменные инициализируются значениями, такими как имя базы данных, которую нужно скопировать, и имя базы данных, в которую нужно восстановить данные.
-
Создание базы данных, если она не существует: Проверяется наличие базы данных назначения, и если она отсутствует, создается новая база данных.
-
Создание резервной копии: Выполняется резервное копирование исходной базы данных в указанный файл.
-
Переключение базы данных в одиночный режим: База данных назначения переводится в одиночный режим, чтобы избежать конфликтов соединений во время восстановления.
-
Восстановление базы данных: База данных назначения восстанавливается из файла резервной копии, с указанием перемещения файлов данных и логов.
-
Переключение базы данных обратно в многопользовательский режим: После восстановления база данных переводится обратно в многопользовательский режим.
-
Удаление файла резервной копии: Проверяется наличие файла резервной копии, и если он существует, файл удаляется.
-
Удаление записи о резервной копии из msdb: Из системной базы данных
msdb
удаляется запись о выполненной резервной копии, если она существует.
Дополнительные операции:
-
Уменьшение данных журнала (SHRINK): Процедура уменьшения размера журнала транзакций для освобождения неиспользуемого пространства.
-
Уменьшение данных журнала всех баз MSSQL: Выполнение операции SHRINK для всех баз данных на сервере.
-
Переименование базы данных: Изменение имени существующей базы данных.
-
Сжатие базы данных и лог файла: Уменьшение размера базы данных и лог файла, а также установка максимального размера лог файла.
-
Перевод всех баз в режим SIMPLE: Изменение режима восстановления всех баз данных на SIMPLE, что упрощает управление журналом транзакций, с последующим сжатием.
Эти операции помогают в управлении базами данных, обеспечивая их резервное копирование, восстановление, оптимизацию и настройку.
-- Объявление переменных
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
Этот SQL-запрос выполняет изменение режима восстановления базы данных и уменьшение размера журнала транзакций в Microsoft SQL Server. Вот что делает каждый шаг:
-
Изменение режима восстановления на SIMPLE:
ALTER DATABASE [ИмяБазы] SET RECOVERY SIMPLE GO
- Переводит базу данных в режим восстановления SIMPLE. В этом режиме журнал транзакций не сохраняет все транзакции, что позволяет уменьшить его размер и упростить управление. Это полезно для баз данных, где не требуется точное восстановление до определенного момента времени.
-
Уменьшение размера файла журнала транзакций:
DBCC SHRINKFILE ([ИмяБазы_log], 1) GO
- Уменьшает размер файла журнала транзакций до минимально возможного размера (в данном случае 1 МБ). Это освобождает неиспользуемое пространство в файле журнала.
-
Изменение режима восстановления обратно на FULL:
Возвращает базу данных в режим восстановления FULL. В этом режиме журнал транзакций сохраняет все транзакции, что позволяет выполнять точное восстановление до любого момента времени, если у вас есть полные и логические резервные копии.
Применение:
- Когда использовать: Этот процесс полезен, когда необходимо временно уменьшить размер журнала транзакций, например, перед выполнением больших операций, которые могут значительно увеличить журнал.
- Предостережения: После изменения режима восстановления на SIMPLE и обратно на FULL, необходимо выполнить полное резервное копирование базы данных, чтобы обеспечить возможность восстановления с использованием журнала транзакций.
ALTER DATABASE ['ИмяБазы']
SET RECOVERY SIMPLE
GO
DBCC SHRINKFILE ([ИмяБазы_log], 1)
GO
ALTER DATABASE [ИмяБазы]
SET RECOVERY FULL
Этот SQL-скрипт выполняет операции по уменьшению размера всех баз данных, которые находятся в состоянии ONLINE, в Microsoft SQL Server. Вот что делает каждый шаг:
-
Объявление переменных:
DECLARE @DBName varchar(255); DECLARE @SQLCommand nvarchar(500);
Переменные
@DBName
и@SQLCommand
используются для хранения имени текущей базы данных и команды SQL, которую нужно выполнить. -
Создание курсора для перебора всех баз данных
-
Курсор
DB_Cursor
инициализируется для перебора всех баз данных, которые находятся в состоянии ONLINE. -
Открытие курсора и начало цикла:
OPEN DB_Cursor; FETCH NEXT FROM DB_Cursor INTO @DBName;
Курсор открывается, и первая база данных извлекается в переменную
@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;
Для каждой базы данных выполняется:
- Перевод базы данных в одиночный режим (
SINGLE_USER
) с немедленным откатом всех активных транзакций. Это необходимо для освобождения всех соединений и предотвращения конфликтов. - Уменьшение размера базы данных с помощью команды
DBCC SHRINKDATABASE
, которая освобождает неиспользуемое пространство. - Возвращение базы данных в многопользовательский режим (
MULTI_USER
), чтобы снова разрешить доступ нескольким пользователям.
- Перевод базы данных в одиночный режим (
-
Закрытие и освобождение курсора:
CLOSE DB_Cursor; DEALLOCATE DB_Cursor;
Курсор закрывается и освобождается, что завершает процесс.
Применение:
- Когда использовать: Этот скрипт полезен для автоматического уменьшения размера всех баз данных на сервере, что может быть необходимо для управления дисковым пространством.
- Предостережения: Перевод базы данных в одиночный режим может прервать активные соединения и транзакции, поэтому этот скрипт следует использовать с осторожностью, особенно в производственных средах. Убедитесь, что у вас есть резервные копии перед выполнением таких операций.
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;
Этот SQL-скрипт выполняет три основные операции с базой данных в Microsoft SQL Server:
Перевод базы данных в однопользовательский режим:
ALTER DATABASE dev_zup_pilot SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
Переводит базу данных dev_zup_pilot в однопользовательский режим. Это означает, что только одно соединение может быть активно в данный момент. Параметр WITH ROLLBACK IMMEDIATE немедленно завершает все текущие транзакции и соединения, чтобы освободить базу данных для дальнейших операций. Это необходимо для выполнения операций, которые требуют эксклюзивного доступа к базе данных, таких как переименование.
Переименование базы данных:
ALTER DATABASE dev_zup_pilot MODIFY NAME = zup_pilot;
Изменяет имя базы данных с dev_zup_pilot на zup_pilot. Это может быть полезно для приведения имен баз данных в соответствие с новыми стандартами именования или для отражения изменений в их назначении.
Переключение базы данных обратно в многопользовательский режим:
ALTER DATABASE zup_pilot SET MULTI_USER;
Возвращает базу данных zup_pilot в многопользовательский режим, позволяя множеству соединений одновременно подключаться к базе данных. Это необходимо для нормальной работы базы данных в среде, где доступ к ней требуется нескольким пользователям или приложениям.
Применение:
Когда использовать: Этот скрипт полезен, когда необходимо изменить имя базы данных, что требует эксклюзивного доступа к ней. Перевод в однопользовательский режим гарантирует, что никакие другие операции не будут мешать процессу переименования.
Предостережения: Перевод базы данных в однопользовательский режим может прервать активные соединения и транзакции, поэтому этот скрипт следует использовать с осторожностью, особенно в производственных средах. Убедитесь, что у вас есть резервные копии и что вы уведомили пользователей о предстоящих изменениях.
-- Перевод базы данных в однопользовательский режим.
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;
Этот SQL-скрипт выполняет операции по управлению файлами данных и журналов транзакций для всех пользовательских баз данных, которые находятся в состоянии ONLINE, в Microsoft SQL Server. Он исключает системные базы данных (master
, tempdb
, model
, msdb
). Вот что делает каждый шаг:
-
Объявление переменных:
DECLARE @dbname NVARCHAR(128); DECLARE @logname NVARCHAR(128); DECLARE @datafile NVARCHAR(128); DECLARE @sql NVARCHAR(MAX);
- Переменные используются для хранения имен баз данных, лог-файлов, файлов данных и SQL-запросов.
-
Объявление курсора:
Получение имен файлов: Извлекаются имена лог-файла и файла данных.
-
- Очистка журнала транзакций: Выполняется команда
BACKUP LOG ... WITH TRUNCATE_ONLY
, которая очищает журнал транзакций. (Примечание: эта команда устарела и не рекомендуется для использования в новых версиях SQL Server.) - Сжатие лог-файла: Уменьшает размер лог-файла до минимально возможного.
- Сжатие файла данных: Уменьшает размер файла данных до минимально возможного.
- Установка максимального размера лог-файла: Ограничивает максимальный размер лог-файла до 100 МБ.
- Очистка журнала транзакций: Выполняется команда
-
-
Для каждой базы данных выполняются следующие действия:
-
-
Закрытие и освобождение курсора:
CLOSE db_cursor; DEALLOCATE db_cursor;
Курсор закрывается и освобождается, завершая процесс.
Применение:
- Когда использовать: Этот скрипт может быть полезен для управления дисковым пространством, особенно если необходимо уменьшить размер файлов данных и журналов транзакций для всех пользовательских баз данных.
- Предостережения: Использование
WITH TRUNCATE_ONLY
может привести к потере возможности восстановления базы данных до определенного момента времени, так как журнал транзакций будет очищен. Этот скрипт следует использовать с осторожностью и только в тех случаях, когда это действительно необходимо. Убедитесь, что у вас есть актуальные полные резервные копии перед выполнением таких операций.
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; -- Освобождение ресурсов, занятых курсором
Этот SQL-скрипт выполняет две основные операции для всех пользовательских баз данных в Microsoft SQL Server, исключая системные базы данных (master
, model
, msdb
, tempdb
). Вот что делает каждый шаг:
-
Перевод всех баз данных в режим восстановления SIMPLE:
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;
- Генерация команд: Создает команды
ALTER DATABASE
для перевода каждой пользовательской базы данных в режим восстановления SIMPLE. В этом режиме журнал транзакций не сохраняет все транзакции, что упрощает управление и уменьшает его размер. - Выполнение команд: Выполняет сгенерированные команды для изменения режима восстановления всех пользовательских баз данных.
- Генерация команд: Создает команды
-
Сжатие всех баз данных:
-- Очистка переменной @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;
- Генерация команд: Создает команды
DBCC SHRINKDATABASE
для уменьшения размера каждой пользовательской базы данных. Параметр10
указывает на целевой процент свободного пространства, который должен остаться после сжатия. - Выполнение команд: Выполняет сгенерированные команды для сжатия всех пользовательских баз данных.
- Генерация команд: Создает команды
Применение:
- Когда использовать: Этот скрипт полезен для управления дисковым пространством и упрощения управления журналами транзакций, особенно если необходимо уменьшить размер всех пользовательских баз данных и их журналов транзакций.
- Предостережения: Перевод баз данных в режим восстановления SIMPLE может повлиять на возможность восстановления до определенного момента времени, так как журнал транзакций будет очищен. Убедитесь, что у вас есть актуальные полные резервные копии перед выполнением таких операций. Также, сжатие баз данных может временно увеличить нагрузку на сервер, поэтому его следует выполнять в периоды низкой активности.
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;
Postgres
см пункт 1
@echo off
setlocal
rem Установите переменные
set PGUSER=your_username
set PGPASSWORD=your_password
set PGHOST=localhost
set PGPORT=5432
set FROM_DB=ИмяБазыОткуда
set TO_DB=ИмяБазыКуда
set BACKUP_FILE=C:\path\to\backup\ИмяБазыОткуда.bak
rem Создание резервной копии
echo Creating backup of %FROM_DB%...
pg_dump -U %PGUSER% -h %PGHOST% -p %PGPORT% -F c -b -v -f %BACKUP_FILE% %FROM_DB%
rem Проверка успешности создания резервной копии
if %ERRORLEVEL% neq 0 (
echo Backup failed!
exit /b %ERRORLEVEL%
)
rem Восстановление базы данных
echo Restoring database to %TO_DB%...
pg_restore -U %PGUSER% -h %PGHOST% -p %PGPORT% -d %TO_DB% -v %BACKUP_FILE%
rem Проверка успешности восстановления
if %ERRORLEVEL% neq 0 (
echo Restore failed!
exit /b %ERRORLEVEL%
)
rem Удаление файла резервной копии
echo Deleting backup file...
del %BACKUP_FILE%
rem Проверка успешности удаления
if %ERRORLEVEL% neq 0 (
echo Failed to delete backup file!
exit /b %ERRORLEVEL%
)
echo Operation completed successfully!
endlocal
#!/bin/bash
# Установите переменные
PGUSER="your_username"
PGPASSWORD="your_password"
PGHOST="localhost"
PGPORT="5432"
FROM_DB="ИмяБазыОткуда"
TO_DB="ИмяБазыКуда"
BACKUP_FILE="/path/to/backup/ИмяБазыОткуда.bak"
# Экспорт переменных окружения для аутентификации
export PGPASSWORD
# Создание резервной копии
echo "Creating backup of $FROM_DB..."
pg_dump -U "$PGUSER" -h "$PGHOST" -p "$PGPORT" -F c -b -v -f "$BACKUP_FILE" "$FROM_DB"
# Проверка успешности создания резервной копии
if [ $? -ne 0 ]; then
echo "Backup failed!"
exit 1
fi
# Восстановление базы данных
echo "Restoring database to $TO_DB..."
pg_restore -U "$PGUSER" -h "$PGHOST" -p "$PGPORT" -d "$TO_DB" -v "$BACKUP_FILE"
# Проверка успешности восстановления
if [ $? -ne 0 ]; then
echo "Restore failed!"
exit 1
fi
# Удаление файла резервной копии
echo "Deleting backup file..."
rm "$BACKUP_FILE"
# Проверка успешности удаления
if [ $? -ne 0 ]; then
echo "Failed to delete backup file!"
exit 1
fi
echo "Operation completed successfully!"
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