sábado, 12 de diciembre de 2015

Creación y modificación de bases de datos SQL Server (Aumentar y reducir tamaño)


Crear una nueva base de datos

Antes de crear una nueva base de datos conviene tener en cuenta los siguientes aspectos: La base de datos a crear se inicializará como una copia de la base de datos model, que contendrá todos los objetos del catálogo model. Esto nos permite incluir de manera automática ciertos objetos y definiciones en todas las bases de datos nuevas.


SQL server

Antes de comenzar conviene conocer la lista de elementos que contendrá la base de datos, es bueno hacer un breve checklist  aunque sólo sea como orientación:

Tamaño de la base de datos y el log.
Ubicación de la base de datos y el log.
Preparación de la documentación de la creación.

Una vez sean conocidos los datos necesarios, y se ha decidido cual será el tamaño que reservaremos para la base de datos a crear, estamos preparados para proceder a la definición de esta. Esta decisión se reflejará considerablemente en el rendimiento del sistema, por lo que debe ser llevada a cabo con cuidado.


Nombre de la base de datos. Identificadores

Los nombres de las bases de datos deben cumplir las reglas generales para los identificadores de objetos en SQL Server:

Deben ser únicos.
No pueden tener más de 128 caracteres.
Se permite incluir letras, números y caracteres especiales.
Distingue entre mayúsculas y minúsculas.
No podrá coincidir con una palabra clave de SQL.
No podrá contener espacios.

Validez de los identificadores

El procedimiento almacenado sp_validname permite determinar si un identificador es válido. Su sintaxis es la siguiente: sp_validname (`nombre')[, enviar error] Si el parámetro enviar error devuelve 1 el nombre indicado no sirve y provocará errores.

exec sp_validname 'Nombre_a_validar'

Secuencia de creación

Al crear una base de datos se producen una serie de acciones:
Se asigna espacio en la ubicación física que se haya especificado.
Se crean los ficheros de datos de la base de datos y su transaction log.
Se crea la base de datos como una copia de la base de datos model.
Se añade una fila a la tabla sysdatabares de la base de datos master.
Se añade una fila a la tabla sysfiles de la propia base de datos para cada fichero de datos asociado.
Se añade una fila a la tabla sysfilegroups de la propia base de datos para cada grupo de ficheros asociado.

En una entrada anterior nos ocupamos de los aspectos de este comando asociados con los ficheros de datos. Ahora nos vamos a ocupar de las tareas relativas a la modificación de una base de datos.

Modificación de bases de datos

Las modificaciones en una base de datos pueden realizarse a través del Administrador Corporativo o mediante la sentencia Transact-SQL del tipo ALTER DATABASE.

Ampliar una base de datos a través del Administrador Corporativo

Ampliar una base de datos significa asignarle nuevo espacio en uno de sus ficheros, haciéndolo crecer, o en uno o varios ficheros de nueva creación. Del mismo modo que podemos aumentar el tamaño asignado al almacenamiento de datos, también es posible hacer crecer el transaction.log si la actividad transaccional de la base de datos rebasa su límite asignado.

Para proceder a la expansión de una base de datos a través del Administrador Corporativo deberemos elegir una base de datos y pulsar el botón derecho del ratón para elegir la pestaña propiedades.
modificar una base de datos


Y aparece la página de propiedades de la base de datos que queremos ampliar. La pestaña archivos permite modificar el número, tamaño y el nombre lógico de los ficheros de datos asociados a ella.


modificar una base de datos SQL


También en esta pestaña es posible especificar el nuevo comportamiento que deseamos tenga la base de datos con vista a su crecimiento. Si pulsamos en el botón de tres puntos … a la derecha del epígrafe crecimiento automático/Tamaño máximo (no mostrado en la imagen de arriba) sale el cuadro de diálogo que nos permite hacerlo.


modificar tamaño de una base de datos

 

Expansión mediante comandos Transact-SQL. ALTER DATABASE



Una vez la base de datos ya ha sido creada, es posible añadirle nuevos ficheros, o modificar el  tamaño de los existentes a través del comando ALTER DATABASE.

La cláusula FILEGROWTH permite indicar el incremento en el tamaño del archivo que añadirá SQL Server cuando añada nuevo espacio al fichero de datos. Es posible indicarlo en términos absolutos en KB o en porcentaje del tamaño del fichero a expandir. Los incrementos se llevarán a cabo siempre en porciones de 64 KB, tamaño que es el mínimo que es posible especificar. El valor por defecto es el 10 %.

Reducción del tamaño de bases de datos


En SQL Server las bases de datos se pueden configurar para reducir su tamaño automáticamente. Para ello liberan las páginas que ya no son necesarias. Sin embargo, las bases de datos también pueden reducirse manualmente a demanda, desde el Administrador Corporativo  o con comandos Transact-SQL.

Reducción mediante el Administrador Corporativo

Para reducir el tamaño de las bases de datos desde el Administrador Corporativo, se accede al menú contextual pulsando el botón derecho del ratón Tareas ->Reducir -> Base de Datos.

reducir el tamaño de una base de datos


En el cuadro de diálogo el sistema informa del tamaño actual de la base de datos y del espacio que realmente está ocupado.
reducir tamaño de una base de datos
Si queremos una reducción más exacta podemos optar por elegir la opción Tareas-> Reducir -> Archivos.
reducir tamaño de archivos de base de datos
Lo que abre un cuadro de diálogo similar al anterior.
reducir un fichero de base de datos
Solo que en este caso actúa sobre el archivo físico .mdf de la base de datos y permite más opciones, por ejemplo si elegimos Reorganizar páginas antes de liberar espacio no utilizado se habilitará la caja combinada de tamaño lo que nos permitirá elegir un tamaño exacto en MB siempre y cuando no rebasemos a la baja el tamaño mínimo indicado. Aquí también se han explicado otros métodos para reducir el archivo log de la Base de datos.

Reducción con comandos Transact-SQL

Existen dos maneras de reducir el tamaño de una base de datos con comandos de SQL: configurarla para la reducción automática, o reducirla manualmente y de manera explícita.

Configuración para reducción automática

Consiste en especificar el parámetro AUTOSHRINK a TRUE en el comando ALTER DATABASE
ALTER DATABASE { database_name  | CURRENT }
SET
AUTO_SHRINK { ON | OFF }
Si ponemos AUTO_SHRINK  a ON
Los archivos de la base de datos se pueden reducir periódicamente.
Pueden reducirse automáticamente los archivos de datos y los archivos de registro de transacciones. AUTO_SHRINK reducirá el tamaño del registro de transacciones sólo si el modelo de recuperación de la base de datos se establece en SIMPLE o si se realiza una copia de seguridad del registro.
La opción AUTO_SHRINK reduce los archivos si no utiliza más de un 25% del espacio del archivo.
No es posible reducir una base de datos de solo lectura.
Si ponemos AUTO_SHRINK  a OFF
La base de datos no se reducirá automáticamente durante las comprobaciones periódicas del espacio no utilizado.
Ejemplo.
ALTER DATABASE dbDesarrollo1800
SET AUTO_SHRINK  ON

Reducción manual

La reducción de la base de datos puede realizarse a través de los comandos Transact-SQL DBCC SHRINKDATABASE
La sintaxis de SHRINKDATABASE es la siguiente:
DBCC SHRINKDATABASE
( database_name | database_id | 0
     [ , target_percent ]
     [ , { NOTRUNCATE | TRUNCATEONLY } ]
)
[ WITH NO_INFOMSGS ]
El parámetro porcentaje permite especificar el tamaño que deseamos que tenga la base de datos una vez reducido su respecto al tamaño actual. Los ficheros no se podrán reducir a un tamaño inferior al que fue especificado en su creación con CREATE DATABASE.  Si queremos reducir por debajo de ese límite tenemos que usar la opción MODIFYFILE del comando ALTER DATABASE. Si especificamos NO TRUNCATE los datos de los ficheros serán redistribuidos, haciendo que el espacio libre quede al final de los mismos, pero no libera este espacio reduciendo tamaño de los ficheros desde d punto de vista del sistema operativo.
TRUNCATE ONLY realiza la tarea contraria, libera el espacio que sea posible pero sin producir ningún tipo de reordenación de los datos.
WITH NO_INFOMSGS  Suprime todos los mensajes informativos con niveles de gravedad entre 0 y 10.
Ejemplos:
Reducir una base de datos y especificar un porcentaje de espacio disponible.
DBCC
SHRINKDATABASE (dbDesarrollo, 10);
GO
Truncar una base de datos
DBCC SHRINKDATABASE (dbDesarrollo, TRUNCATEONLY);
Para reducir un archivo de datos o de registro cada vez para una base de datos específica, ejecutaremos DBCC SHRINKFILE que tiene la misma sintaxis.

Configuración de la base datos

Existen múltiples parámetros que pueden tomar varios valores, según la operatividad que se desee que tome la base de datos. Estas opciones son globales y afectan a la base de tos en su conjunto.
Los parámetros que se especificaron en la creación de la base de datos. Se pueden modificar para adaptar la base de datos a nuestras necesidades, para ello posicionados sobre la base de datos en el administrador corporativo con el botón derecho del ratón elegimos propiedades.
configurar una base de datos
Y del cuadro de diálogo que aparece elegimos la pestaña opciones.
propiedades de una base de datos

Entonces aparecen las opciones que se especificaron en el momento de la creación de la base de datos y los valores que toman, si lo deseamos podemos modificar estos valores.

Renombrando una base de datos

Sólo el administrador puede renombrar una base de datos. Para hacerlo se utiliza ALTER DATABASE del siguiente modo:
ALTER DATABASE dbDesarrollo
Modify Name = dbDesarrollo2;

Obtener información sobre bases de datos

Podernos recopilar información sobre numerosos aspectos de nuestra base de datos, utilizando ciertos procedimientos almacenados.
sp_helpdb 'nombre_base_datos'
ver información de una base de datos
Proporciona información acerca de todas las bases de datos o de una en particular. Devuelve el nombre, tamaño, propietario, identificador, fecha de creación y opciones.
Si no se proporciona un parámetro y se pone sólo.
sp_helpdb
Nos entregará información sobre todas las bases de datos del sistema.
La información sobre los ficheros de base de datos la obtenemos con
sp_helpfile 'nombre_fichero'
Devuelve información sobre uno o todos los ficheros de una base de datos, el nombre de los ficheros aparece marcado en rojo en la imagen anterior, un ejemplo concreto sería:
sp_helpfile 'dbNuevaBD_Data'
La información sobre el espacio de almacenamiento la podemos obtener con
sp_spaceused
Muestra la cantidad de espacio utilizado por una base de datos, si especificamos el objeto, nos indicará el espacio que ocupa un objeto, por ejemplo una tabla.
sp_spaceused 'dbo.tbNombre_Tabla'

Eliminación de bases de datos

Cuando se borra una base de datos se eliminan fisicamente los ficheros asociados a ella. Sólo el administrador y el propietario de una base de datos pueden borrarla. Existen algunas bases de datos que no pueden eliminarse, por ejemplo las bases de datos master, model y tempdb. Tampoco se puede eliminar las bases de datos que estén abiertas, o utilizadas en replicación. La eliminación de la base de datos puede realizarse mediante el Administrador Corporativo, pulsando el botón derecho del ratón sobre la base de datos y elegimos eliminar. Por comando utilizaremos DROP DATABASE.
DROP DATABASE dbDesarrollo

No hay comentarios:

Publicar un comentario