martes, 7 de agosto de 2018

Distribuir datos en diferentes archivos SQL SERVER

Buenas noches queridos lectores, el día de hoy les mostraré como crear una base de Datos en SQL Server, ya había escrito un post hace años sobre eso, pero creo que es momento de actualizarlo, y explicar algunos conceptos avanzados, así como otros ejemplos.
Comencemos.

Crear base de Datos con Transact SQL Server

Para crear una base de Datos mediante Transact SQL Server utilizaremos la sentencia Create Database, se puede utilizar de una manera muy simple sin parámetros y funciona de manera correcta, pero eso solo pasará en bases de datos pequeñas, imaginen una base de datos de varios Gigas, quiza cientos de Gigas, ¿Qué pasará? pues el archivo crecerá sin control y provocará que el sistema esté cada vez más lento, es por eso que se recomienda crear archivos secundarios aparte del archivo principal.

Cuando se crea una base de datos, se debe especificar el tamaño inicial de los datos y los archivos de registro o aceptar el tamaño predeterminado (el tamaño predeterminado será el tamaño que este pre configurado en la base de datos model). A medida que se agregan datos a la base de datos, los archivos se van llenando. sin embargo, debemos tener presente como va a crecer la base de datos.

De manera predeterminada queridos lectores, los archivos pueden crecer tanto como lo permita el espacio en disco, por lo tanto, si no queremos que la base y el archivo principal crezcan desproporcionadamente, debemos crearles límites.

SQL SERVER permite crear archivos de datos que pueden crecer automáticamente cuando se llenan, pero solo hasta un tamaño máximo predefinido. Con estas técnicas que les voy a mostrar se evitará que las unidades de disco se queden sin espacio.

Todas las bases de datos de SQL SERVER deben contener por lo menos dos archivos:

  • El archivo principal o maestro (mdf) Master data file. En él se concentran los datos de la base de Datos, si no se especifican archivos secundarios, ademas de guardar las estadísticas y las propiedades de la base de datos, guardará también los datos.
  • El archivo de log (ldf) Log Data File. En él se guardan todas las transacciones que se realizan, también nos sirve para crear respaldos transaccionales y poder recuperar nuestra información en un momento especifico de tiempo
De manera opcional podemos tener archivos secundario (ndf), los que sean necesarios para distribuir nuestra base en varios archivos e incluso en varios discos. Esto es lo que vamos a tratar en este post, crear una base de datos con algunas opciones avanzadas y con archivos secundarios para evitar que se llene nuestra base de datos.

Pero ya basta de teoría, pasemos a lo que nos gusta que es hacer.

Ejercicio 1: 

Crear una base de datos llamada Ventas, que contenga un solo archivo maestro, con su log, asignándole un nombre lógico tanto al archivo maestro, como al log. También se le va a asignar al archivo maestro un tamaño inicial de 10 MB, un tamaño máximo de 50Mb y un factor de crecimiento de 5MB.

Al archivo de Log, se le asignará un tamaño inicial de 5MB, tamaño máximo de 25MB y un factor de crecimiento de 5MB


USE MASTER;

GO
CREATE DATABASE VENTAS
ON
(
       NAME = VENTAS_PRUEBAS,
       FILENAME = 'C:\PruebasSQLSERVER\VENTAS_DATA.MDF',
       SIZE = 10,
       MAXSIZE=50,
       FILEGROWTH = 5
)
LOG ON
(
       NAME = VENTAS_PRUEBAS_LOG,
       FILENAME = 'C:\PruebasSQLSERVER\VENTAS_LOG.LDF',
       SIZE = 5MB,
       MAXSIZE = 25MB,
       FILEGROWTH = 5MB
)


El script se compone de dos partes, la primera estamos configurando el archivo maestro, le asignaremos un nombre lógico llamado VENTAS_PRUEBAS, y un nombre físico con su ruta incluída, en el FILENAME, nos encontramos la ruta física del archivo, como podemos ver estará en la carpeta PruebasSQLSERVER y se llamara VENTAS_DATA.mdf. El caso del SIZE, es el tamaño inicial que ocupará en la base de datos, debemos especificar un tamaño razonable, para evitar que el archivo esté agrandandose en todo momento, MAXSIZE, nos indica cual es el tamaño máximo de ese archivo, al momento de alcanzar el máximo utilizará los archivos secundarios o ya no podrá escribir datos, y la tasa de crecimiento. Esto es, si la base de datos llega a los 10MB iniciales, automáticamente se incrementará hasta los 15MB, para evitar que crezca a cada momento y dar un rendimiento optimo, al llegar a los 15MB, automáticamente se re dimensionará hasta los 20MB y así sucesivamente hasta alcanzar el tamaño máximo.

En la segunda parte es básicamente lo mismo pero para el archivo del log. 



Vemos como la ruta que le indicamos en el script esta vacía, ahora vamos a ejecutar el script para observar como queda la carpeta.


Como ven, se crearon correctamente los archivos, en la ruta indicada y con el tamaño indicado, de esta manera ya creamos una base de datos con parámetros un poco más avanzados. Pero hay más, aun no hemos llegado al punto de este post, como crear archivos secundarios para distribuir los datos, pues bien, esto nos lleva al segundo ejemplo

Ejercicio 2:

Crear una base de datos llamada Archivo que contenga el archivo maestro y dos archivos secundarios, en una ruta personalizada y con los siguientes parámetros:
Archivo maestro con nombre lógico Arch1,
con 100 MB iniciales y 200 MB de tamaño máximo, factor de crecimiento de 20MB.

Achivos secundarios con nombre logico Arch2 y Arch3, con los mismos parámetros que el maestro.

Dos archivos de LOG con nombre lógico de archlog1 y 2,
con 100MB iniciales, 200 de tamaño máxomo y un factor de crecimiento de 20MB.


USE MASTER;

GO
CREATE DATABASE ARCHIVO
ON PRIMARY
(
       NAME = ARCH1,
       FILENAME = 'C:\PruebasSQLSERVER\ARCH1.MDF',
       SIZE = 100,
       MAXSIZE = 200,
       FILEGROWTH = 20
),
(
       NAME = ARCH2,
       FILENAME = 'C:\PruebasSQLSERVER\ARCH2.NDF',
       SIZE = 100,
       MAXSIZE = 200,
       FILEGROWTH = 20
),
(
       NAME = ARCH3,
       FILENAME ='C:\PruebasSQLSERVER\ARCH3.NDF',
       SIZE = 100,
       MAXSIZE = 200,
       FILEGROWTH = 20
)
LOG ON
(
       NAME = ARCHLOG1,
       FILENAME = 'C:\PruebasSQLSERVER\ARCHLOG1.LDF',
       SIZE = 100,
       MAXSIZE = 200,
       FILEGROWTH = 20
),
(
       NAME = ARCHLOG2,
       FILENAME = 'C:\PruebasSQLSERVER\ARCHLOG2.LDF',
       SIZE = 100,
       MAXSIZE = 200,
       FILEGROWTH = 20
)
 


Como vemos en el script, tendremos ahora un archivo maestro y dos archivos secundarios que se llenará conforme vaya creciendo la base de datos y dos archivos de LOG, esto es una buena práctica para tener un óptimo rendimiento en nuestras bases de datos y evitar exista lentitud debido a la alta demanda de recursos que puede suponer una base de datos grande. Veamos como quedaron los archivos en el directorio especificado.

 Como ven, se crearon los archivos especificados con el tamaño especificado.

Hasta aquí el post queridos lectores, espero que haya sido de su agrado y utilidad, cualquier duda que tengan no vacilen en preguntar. Espero compartan, comenten, den +1 o clic a algún anuncio que les interese. 

Saludos

Banderas de Visitantes

Flag Counter