sql >> Base de Datos >  >> RDS >> Database

Cómo automatizar tareas de mantenimiento de bases de datos SQL usando SQLCMD

Este artículo trata sobre la automatización de las tareas de mantenimiento de la base de datos SQL a través de la utilidad SQLCMD, que le permite ejecutar comandos T-SQL directamente desde el símbolo del sistema sin usar SSMS (SQL Server Management Studio).

Por lo general, la automatización de las tareas de la base de datos requiere SSMS (SQL Server Management Studio) para programar trabajos que ejecutan estas tareas, pero en este artículo, se usa un enfoque alternativo para automatizar las tareas de la base de datos sin tener que usar el tan necesario SSMS.

La utilidad SQLCMD puede ser un ahorro de tiempo real para los desarrolladores de bases de datos y administradores de bases de datos, ya que pueden ejecutar inmediatamente los scripts SQL necesarios desde la línea de comandos, y la automatización de las tareas de mantenimiento de la base de datos con la utilidad SQLCMD es una ventaja.

Conceptos básicos de la automatización de tareas de bases de datos SQL

Repasemos algunos conceptos básicos para automatizar tareas de mantenimiento de bases de datos SQL con la utilidad SQLCMD.

¿Qué es una tarea de mantenimiento de base de datos?

Una tarea de mantenimiento de base de datos, como su nombre lo indica, es una tarea que ayuda a administrar o mantener una base de datos para garantizar su buen funcionamiento.

Por ejemplo, crear copias de seguridad de la base de datos diariamente es una tarea de mantenimiento de la base de datos que garantiza que la base de datos esté respaldada, de modo que en caso de cualquier incidente, que termine corrompiendo la base de datos o haciéndola inestable, se pueda restaurar con éxito sin perder cualquier dato.

¿Quién realiza las tareas de mantenimiento de la base de datos?

Por lo general, los profesionales responsables del mantenimiento del sistema de bases de datos, como los administradores de bases de datos, realizan tareas de mantenimiento de bases de datos; sin embargo, esto puede cambiar en determinadas circunstancias.

¿Cómo se realiza una Tarea de Mantenimiento de Base de Datos?

Una tarea de mantenimiento de la base de datos normalmente la realiza manualmente un administrador de la base de datos de vez en cuando, o también se puede programar para que se ejecute automáticamente.

¿Qué significa automatizar una tarea de mantenimiento de base de datos?

Automatizar una tarea de mantenimiento de base de datos significa programar una tarea de mantenimiento de base de datos para que se ejecute automáticamente sin ninguna intervención manual.

¿Cuáles son los beneficios de la automatización de las tareas de mantenimiento de bases de datos?

Automatizar las tareas de mantenimiento de la base de datos ahorra tiempo y esfuerzo, ayuda a estandarizar el proceso y facilita su ejecución regular, y las alertas oportunas configuradas para una falla de trabajo automatizada también pueden acelerar el proceso de identificación de la causa de un problema si el la tarea falla.

¿Cómo puede automatizar la tarea de mantenimiento de la base de datos?

Uno de los usos avanzados de la utilidad SQLCMD es la automatización de las tareas de mantenimiento de la base de datos. Vamos a automatizar las tareas de mantenimiento de la base de datos sin usar SSMS (SQL Server Management Studio) en este artículo.

Programador de tareas de Windows

Vamos a aprovechar el Programador de tareas de Windows para automatizar las tareas de mantenimiento de la base de datos que no requieren SSMS (SQL Server Management Studio).

Requisitos

Este artículo asume que tiene conocimientos básicos de las tareas de mantenimiento de bases de datos realizadas mediante la ejecución de instrucciones T-SQL junto con una comprensión básica de la utilidad SQLCMD.

Consulte el artículo Fundamentos de la ejecución de declaraciones T-SQL desde la línea de comandos usando SQLCMD para obtener una comprensión sólida de los conceptos básicos de SQLCMD, antes de proceder a su uso avanzado.

Consulte también el artículo Ejecución de tareas de mantenimiento de bases de datos SQL mediante SQLCMD para obtener información sobre cómo realizar tareas de mantenimiento de bases de datos SQL.

Este artículo también asume que se ha creado una base de datos universitaria de muestra.

Consulte otro artículo Aspectos básicos de la ejecución de declaraciones T-SQL desde la línea de comandos usando SQLCMD para crear una base de datos de muestra o use el siguiente código T-SQL para configurar la base de datos de muestra llamada Universidad:

-- (1) Create University sample database
CREATE DATABASE University;
GO

USE University

-- (2) Create Course table
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES T WHERE T.TABLE_NAME='Course') 
DROP TABLE dbo.Course 

CREATE TABLE [dbo].[Course] (
    [CourseId] INT           IDENTITY (1, 1) NOT NULL,
    [Name]     VARCHAR (30)  NOT NULL,
    [Detail]   VARCHAR (200) NULL,
    CONSTRAINT [PK_Course] PRIMARY KEY CLUSTERED ([CourseId] ASC)
);

-- (3) Create Student table
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES T WHERE T.TABLE_NAME='Student') 
DROP TABLE dbo.Student 

CREATE TABLE [dbo].[Student] (
    [StudentId] INT           IDENTITY (1, 1) NOT NULL,
    [Name]      VARCHAR (30)  NULL,
    [Course]    VARCHAR (30)  NULL,
    [Marks]     INT           NULL,
    [ExamDate]  DATETIME2 (7) NULL,
    CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ([StudentId] ASC)
);

-- (4) Populate Course table
SET IDENTITY_INSERT [dbo].[Course] ON
INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (1, N'DevOps for Databases', N'This is about DevOps for Databases')
INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (2, N'Power BI Fundamentals', N'This is about Power BI Fundamentals')
INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (3, N'T-SQL Programming', N'About T-SQL Programming')
INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (4, N'Tabular Data Modeling', N'This is about Tabular Data Modeling')
INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (5, N'Analysis Services Fundamentals', N'This is about Analysis Services Fundamentals')
SET IDENTITY_INSERT [dbo].[Course] OFF

-- (5) Populate Student table
SET IDENTITY_INSERT [dbo].[Student] ON
INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (1, N'Asif', N'Database Management System', 80, N'2016-01-01 00:00:00')
INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (2, N'Peter', N'Database Management System', 85, N'2016-01-01 00:00:00')
INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (3, N'Sam', N'Database Management System', 85, N'2016-01-01 00:00:00')
INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (4, N'Adil', N'Database Management System', 85, N'2016-01-01 00:00:00')
INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (5, N'Naveed', N'Database Management System', 90, N'2016-01-01 00:00:00')
SET IDENTITY_INSERT [dbo].[Student] OFF
GO

Automatización de la tarea de copia de seguridad de la base de datos de la universidad

Echemos un vistazo al escenario en el que se debe automatizar la copia de seguridad de la base de datos.

Requisito:Automatizar el Respaldo de la Base de Datos de la Universidad

Se solicitó a un DBA que automatizara las copias de seguridad de la base de datos mostrando la fecha y la hora de la copia de seguridad para ahorrar tiempo y evitar confusiones sobre la última copia de seguridad y acelerar el proceso general.

Para cumplir con estos requisitos comerciales, se debe ejecutar un script SQLCMD que crea una copia de seguridad de la base de datos en el Programador de tareas de Windows.

Creación de carpetas para copias de seguridad de bases de datos y secuencias de comandos

Primero, cree una carpeta llamada Demo en la unidad C y luego cree las siguientes subcarpetas en la Demostración carpeta:

  1. Copias de seguridad
  2. Guiones

Tenga en cuenta que usamos la unidad C solo con fines de demostración, use una unidad de respaldo en el escenario en tiempo real.

Creación de secuencia de comandos de copia de seguridad de base de datos SQL

Cree un script de copia de seguridad de la base de datos SQL y guárdelo como 01-Backup-University-sql-script.sql en C:\Demo\Scripts que también contiene la información sobre la fecha y hora de la copia de seguridad de la siguiente manera:

-- Creating University database backup with date and time 
DECLARE @Backup NVARCHAR(400)
SET @Backup=CONCAT('C:\Demo\Backups\University-',(FORMAT(GETDATE(),'yyyy-MM-dd-hh-mm-ss-tt')),'.bak')
BACKUP DATABASE [University] TO  DISK = @Backup
WITH NOFORMAT, NOINIT,  NAME = N'University-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Guardar secuencia de comandos SQL en la carpeta de secuencias de comandos

Guarde el script de copia de seguridad de SQL en C:\Demo\Scripts carpeta.

Creación de secuencia de comandos de copia de seguridad SQLCMD

El script de copia de seguridad de la base de datos que hace referencia al script SQL que usa SQLCMD se crea de la siguiente manera:

Sqlcmd –S . –i c:\Demo\Scripts\01-Bakup-University-sql-script.sql

Donde "." (punto) es la instancia de SQL predeterminada sin nombre que se puede reemplazar por una instancia de SQL con nombre, como .\.

Prueba de ejecutar el script de copia de seguridad de SQLCMD

Ejecute el script SQLCMD anterior desde la línea de comandos para probar el script de copia de seguridad:

El script se ejecutó con éxito, por lo que estamos listos para comenzar.

Vaya a Copias de seguridad. carpeta y elimine la copia de seguridad que se crea como resultado de la ejecución de la prueba.

Crear un archivo por lotes para hacer referencia al script SQLCMD

Cree un archivo por lotes con el nombre 02-Run-Sqlcmd-Backup-script.bat usando el Bloc de notas y guárdelo como .bat:

@Echo off
sqlcmd -E -S . -i c:\Demo\Scripts\01-Bakup-University-sql-script.sql

Tenga en cuenta que hay un ligero cambio en el script SQLCMD :-E se agrega , que en realidad es la opción de autenticación predeterminada y no necesita especificarse de acuerdo con la documentación de Microsoft.

Esto se ilustra de la siguiente manera:

Programar una tarea de copia de seguridad de la base de datos en el Programador de tareas de Windows

Abra el Programador de tareas de Windows escribiendo Programador de tareas en la búsqueda de Windows y luego haga clic en Programador de tareas. :

Una vez que se abra el Programador de tareas de Windows, haga clic en Crear tarea básica... de las opciones a la derecha y escriba Tarea de copia de seguridad de la base de datos de la universidad en el Nombre cuadro de entrada y haga clic en Siguiente :

A continuación, configure la frecuencia de la tarea dejando la configuración predeterminada, que es diaria:

Establece la hora diaria a la que se activará esta tarea (se recomienda configurar el tiempo de dos a tres minutos más tu hora actual para comprobar al instante que está funcionando):

También debemos seleccionar Iniciar un programa cuando se nos pregunta qué queremos que realice esta tarea:

A continuación, señale el archivo por lotes que llama a SQLCMD para crear una copia de seguridad de la base de datos de la Universidad y haga clic en Siguiente. :

Haga clic en Finalizar para completar el proceso.

Es posible que dedique más tiempo a lo que se configuró en el cronograma del trabajo para completar la configuración del trabajo, lo que significa que debe esperar al día siguiente para ver si la tarea se está ejecutando o no.

Hay una solución:debe volver a programar la tarea 2 o 3 minutos antes de la hora actual para que se ejecute en 2 o 3 minutos en lugar de esperar todo el día:

Ahora espere a que la tarea se ejecute automáticamente y después del tiempo especificado, verifique la carpeta de respaldo que creamos en la Demostración carpeta en la unidad C:

Enhorabuena, la tarea de mantenimiento de la base de datos se ha automatizado correctamente mediante el Programador de tareas de Windows, que llama a un archivo por lotes que ejecuta el script SQLCMD para crear un archivo de copia de seguridad.

Elimine la tarea automatizada que se creó con fines de demostración una vez que haya terminado con el tutorial y no esté interesado en ejecutarla más.

Cosas que hacer

Ahora que está listo para automatizar las tareas de mantenimiento de la base de datos, como la copia de seguridad de una base de datos con la utilidad SQLCMD y el Programador de tareas de Windows después de leer este artículo, puede mejorar aún más sus habilidades probando lo siguiente:

  1. Intente configurar y automatizar la copia de seguridad de una base de datos de muestra SQLBookShop mencionado en el artículo Simplificación del procedimiento almacenado principal de pruebas unitarias que también llama a un procedimiento de utilidad.
  2. Intente crear varias bases de datos y automatice sus copias de seguridad mediante la utilidad SQLCMD con el Programador de tareas de Windows.
  3. Intente automatizar los procesos de copia de seguridad y restauración de la base de datos creando dos archivos por lotes, uno para la copia de seguridad y otro para restaurar la base de datos consultando los scripts SQLCMD y programando el trabajo en el Programador de tareas de Windows para que se ejecute diariamente.

Herramienta útil:

dbForge Studio para SQL Server:potente IDE para la gestión, administración, desarrollo, generación de informes y análisis de datos de SQL Server.