Alter Database – Escenario disco duro lleno

Modificación de base de datos

En este post aprenderemos como solucionar el problema cuando uno de los discos donde se encuentra la base de datos llena el mismo. La idea es que se tenga espacio para poder crear un archivo en otro disco que haya espacio, dar la posibilidad que la información de los sistemas en uso se pueda guardar y luego proceder a corregir el problema.

Es necesario anotar que este post muestra una de las posibles soluciones, existe otra forma que se incluirá en otro post. La otra forma de corregir es problema de un disco duro lleno es que se transfiera la información del archivo de la base de datos que está llenando el disco a otro archivo del mismo grupo ubicado en un disco duro diferente. Para este proceso se utiliza DBCC Shrinkfile con la opción EmptyFile.

Primero creamos la base de datos

La base de datos SistemasE será repartida en los discos C: y D: (Ver Create Database)

xp_create_subdir ‘C:\BD’
go
xp_create_subdir ‘D:\Data\Respaldo’
go
Create Database SistemasE
on Primary
(Name=’S01′,Filename=’C:\BD\S01.mdf’, Size = 10MB, Maxsize= 200GB,
Filegrowth= 5MB),
(Name=’S02′,Filename=’D:\Data\S02.ndf’),
filegroup VENTAS
(Name=’S03′,Filename=’D:\Data\Respaldo\S03.ndf’)
LOG ON
(Name=’L01′,Filename=’C:\BD\L01.ldf’)
go

Escenario: Base de datos está en C: y el disco está lleno.
Solución:

1. Crear un grupo de archivos nuevo, agregar un archivo al grupo nuevo creado ubicado en un disco donde haya espacio y hacer el grupo nuevo por defecto.
2. Cambiar la ubicación de los archivos

Parte 1: se supone que en la unidad D: hay espacio, crear un grupo, agregar un archivo y hacerlo el grupo por defecto.

xp_create_subdir ‘D:\Temporal’
go
alter database SistemasE add filegroup Emergencia
alter database SistemasE add file (name=’E01′,filename=’D:\Temporal\E01.ndf’)
to filegroup Emergencia
alter database SistemasE modify filegroup Emergencia Default
go

Parte 2: Cambiar la ubicación de los archivos del disco C:  El archivo que se debe cambiar de ubicación es S01.mdf

Cambiar Olimpiadas01 a E:\Temporal

Alter database SistemasE
modify file (name=’S01′,
filename=’D:\Temporal\S01.mdf’)
go

Note en negrita la nueva ubicación.

Mensaje: Se ha modificado el archivo «S01»  en el catálogo del sistema. La nueva ruta se usará la próxima vez que se inicie la base de datos.

Los pasos finales son como sigue:

1. Poner sin conexión la base de datos, para esto desde el Management Studio de SQL Server pulsar botón derecho en la BD, seleccionar Tareas y luego Poner sin conexión
2. Separa la BD, pulsar botón derecho en la BD, luego seleccionar Tarea y luego Separar.
— Se puede usar el procedimiento almacenado:  sp_detach NombreBD
3. Copiar el archivo a la nueva ubicación. Desde el Explorador de Windows copiar el archivo de la unidad C: ubicado en la carpeta C:\BD a la nueva ubicación D;\Temporal
4. Para finalizar, Adjuntar la base de datos, se debe especificar la nueva ubicación del archivo movido

use master
go
Adjuntar BD

USE master
GO
CREATE DATABASE SistemasE ON
( FILENAME = ‘D:\Temporal\S01.mdf’ ),
( FILENAME = ‘C:\BD\L01.ldf’ ),
( FILENAME = ‘D:\Data\S02.ndf’ ),
( FILENAME = ‘D:\Data\Respaldo\S03.ndf’ ),
( FILENAME = ‘C:\BD\Datos01.ndf’ ),
( FILENAME = ‘C:\BD\Datos02.ndf’ ),
( FILENAME = ‘C:\bd\Pasos.ldf’ )
FOR ATTACH
GO