Last active
March 30, 2022 11:30
-
-
Save rmorenobello/de726f06ccb29757204cdbc9b07ba0b5 to your computer and use it in GitHub Desktop.
MS SQL Server - backup and restore scripts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Consultamos el servidor (entorno) de la conexión actual (nombre Windows): | |
declare @currentServerName as varchar(150) = ( SELECT CONVERT(sysname, SERVERPROPERTY('servername')) ); | |
PRINT '@currentServerName = ' + @currentServerName; | |
-- Definimos el entorno en que debe ser ejecutado el script actual. | |
declare @requiredServerName as varchar(150) = N'SRV-PRODUCCION\SKYNET'; | |
PRINT '@requiredServerName = ' + @requiredServerName; | |
-- definimos la ruta y nombre de archivo del backup (C:\Temp\yyyymmdd-PRO-DATABASE_NAME.bak) | |
declare @backupPath as varchar(256); | |
-- lo informamos con el dia de hoy: | |
set @backupPath = ( select 'C:\Temp\' + convert(varchar,getDate(),112) + '-PRO-DATABASE_NAME.bak' ); | |
PRINT '@backupPath = ' + @backupPath; | |
-- ********************************************************************************* | |
-- CONFIRMEM que estem connectats a la instància de PRO !!! (SRV-PRODUCCION\SKYNET) | |
-- ********************************************************************************* | |
-- RaiseError si nos hemos equivocado de conexión: | |
if @currentServerName <> @requiredServerName | |
begin | |
-- Severity 16: "Indica errores generales que pueden ser corregidos por el usuario." | |
raiserror(N'Cuidado! Ejecutar sólo contra la instancia de servidor "%s".', 16, 1, @requiredServerName) | |
set noexec on; | |
end; | |
-- ******************************************************************************************* | |
-- Guardem el backup al disc dur del servidor a la ruta C:\Temp\yyyymmdd-PRO-DATABASE_NAME.bak | |
-- ******************************************************************************************* | |
USE master; | |
/* | |
Backup en mode copy-only per no afectar l'estat dels backups periódics, amb verificació de la qualitat del backup i checksum previ. | |
Sobreescribim l'arxiu (INIT option), ens carreguem la còpia anterior si existia. | |
*/ | |
-- Creem l'arxiu de backup | |
BACKUP DATABASE [DATABASE_NAME] TO DISK = @backupPath WITH COPY_ONLY, DESCRIPTION = N'One-time per sincronitzar i informar PRE', NOFORMAT, INIT, NAME = N'DATABASE_NAME-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM | |
declare @backupSetId as int | |
select @backupSetId = position from msdb..backupset where database_name=N'DATABASE_NAME' | |
and backup_set_id = ( select max(backup_set_id) from msdb..backupset where database_name=N'DATABASE_NAME' ) | |
if @backupSetId is null begin raiserror(N'Verify failed. Backup information for database ''DATABASE_NAME'' not found.', 16, 1) end | |
-- Validem l'arxiu de backup generat: | |
RESTORE VERIFYONLY FROM DISK = @backupPath WITH FILE = @backupSetId, NOUNLOAD, NOREWIND; | |
GO | |
set noexec off -- Turn execution back on; only needed in SSMS, so as to be able | |
-- to run this script again in the same session. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- ******** | |
-- COMPTE!! Expulsará sense avís a tots els usuaris actuals de la BDD de la instància de servidor a la que estem connectats. | |
-- ******** | |
-- Escollir el FILE que volem carregar del backup (l'obtenim al fer el backup); el més recent: | |
declare @fileNumber int = ( select position from msdb..backupset where database_name=N'DATABASE_NAME' and backup_set_id= | |
(select max(backup_set_id) from msdb..backupset where database_name=N'DATABASE_NAME') ); | |
-- Consultamos el servidor (entorno) de la conexión actual (nombre Windows): | |
declare @currentServerName as varchar(150) = ( SELECT CONVERT(sysname, SERVERPROPERTY('servername')) ); | |
PRINT '@currentServerName = ' + @currentServerName; | |
-- definimos el entorno en que debe ser ejecutado el script actual. | |
declare @requiredServerName as varchar(150) = 'SRV-PRODUCCION\DWHPRE'; | |
PRINT '@requiredServerName = ' + @requiredServerName; | |
-- recuperamos la ruta y nombre de archivo del backup: | |
declare @backupPath as varchar(256); | |
-- si lo hemos creado hoy | |
set @backupPath = ( select 'C:\Temp\' + convert(varchar,getDate(),112) + '-PRO-DATABASE_NAME.bak' ); | |
-- si recuperamos uno de otro día: | |
-- set @backupPath = 'C:\Temp\20211217-PRO-DATABASE_NAME.bak'; | |
PRINT '@backupPath = ' + @backupPath; | |
-- ********************************************************************************* | |
-- CONFIRMEM que estem connectats a la instància de PRE !!! (SRV-PRODUCCION\DWHPRE) | |
-- ********************************************************************************* | |
-- RaiseError si nos hemos equivocado de conexión: | |
if @currentServerName <> @requiredServerName | |
begin | |
-- Severity 16: "Indica errores generales que pueden ser corregidos por el usuario." | |
raiserror(N'Cuidado! Ejecutar sólo contra la instancia de servidor "%s".', 16, 1, @requiredServerName) | |
set noexec on; | |
end; | |
-- ******** | |
-- COMPTE!! Expulsará sense avís a tots els usuaris actuals de la BDD de la instància de servidor a la que estem connectats. | |
-- ******** | |
/* Posem la base de dades en mode single_user per tal que expulsi a tothom sense avís, | |
WITH ROLLBACK IMMEDIATE per tal que faci rollback de tota transacció que s'hagués quedat a mitges. | |
Cal executar el restore database a ser possible al mateix batch (Abans del go) per tal que ningú es conecti entre les dues sentencies. | |
Al acabar el restore cal tornar a setejar MULTI_USER amb ALTER DATABASE [DATABASE_NAME] SET MULTI_USER; | |
*/ | |
USE [master] | |
ALTER DATABASE [DATABASE_NAME] | |
SET SINGLE_USER | |
WITH ROLLBACK IMMEDIATE; | |
-- MOVE importante para que coloque los datos y el log en la carpeta de la instancia de PRE "DWHPRE"! | |
-- Sino creo que daria error al intentar usar los archivos ya existentes con los datos de PRO (por suerte no permite que dos instancias usen los mismos archivos de datos) | |
RESTORE DATABASE [DATABASE_NAME] FROM DISK = @backupPath | |
WITH FILE = @fileNumber | |
, MOVE N'DATABASE_NAME' TO N'C:\Program Files\Microsoft SQL Server\MSSQL15.DWHPRE\MSSQL\DATA\DATABASE_NAME.mdf' | |
, MOVE N'DATABASE_NAME_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL15.DWHPRE\MSSQL\DATA\DATABASE_NAME_log.ldf' | |
, NOUNLOAD, REPLACE, STATS = 5; | |
GO | |
-- Un cop acabat el restore tornem a activar el mode multi_user: | |
ALTER DATABASE [DATABASE_NAME] SET MULTI_USER; | |
GO | |
set noexec off -- Turn execution back on; only needed in SSMS, so as to be able | |
-- to run this script again in the same session. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment