| Base de Datos vs Nombre Logico |
| Escrito por Javier García Quiroga | ||
|
Muchas veces nos hemos encontrados con bases de datos donde las mismas se adjuntaron a la instancia del motor mediante un restore de base de datos o mediante un attach_db Lo mas probable es que a la hora de realizar el restore se renombre la base y los archivos físicos ya sean los .mdf, .ndf y los .ldf (archivos de datos y archivos transaccionales), pero no modificando los archivos lógicos de la base. Voy a presentar los siguientes escenarios. Escenario 1: Los backups de base de datos se realizan de forma diaria, con lo cual tenemos los archivos de resguardo para realizar el restore de la base, ya que se necesita la misma estructura de la base y de los objetos para la nueva sucursal que se va abrir, con el Script 1 realizamos el backup de la Sucrusal_Callao Script 1: BACKUP DATABASE Sucursal_Callao Escenario 2: Se necesita realizar el restore de la nueva base llamada Sucursal_Florida, tengamos en cuenta que se debe contar con la nueva estructura de la base anterior, para ello usaremos el Script 2 Script 2: RESTORE DATABASE Sucursal_Florida El script 2 realiza el restore de la base Sucursal_Florida, el cual tiene dos archivos llamados (Sucursal_Callao_1.bkp, Sucursal_Callao_2.bkp) La sentencia MOVE asocia los archivos logicos 'Sucursal_Callao' y 'Sucursal_Callao_log' con los archivos fisicos TO'Sucursal_Florida.mdf' y 'Sucursal_Florida_log', los cuales se renombraron, ya que se puede realizar un restore con dos archivos fisicos iguales. Hasta aquí cerramos los dos escenarios que se presentaron, ahora que pasaria si modificamos los logical name en el Script 2 para la base Sucursal_Florida? El SQL Server arrojara el mensaje. Msg 3234, Level 16, State 2, Line 2 Esto se debe a que los arhivos físicos .bkp están relacionados con los logical name de la base. RESTORE FILELISTONLY
Bien realizaremos el restore de la base Sucursal_Florida, unicamente modificando el nuevo nombre de la base y los archivos de datos y del TRANSACTION LOG. Si ejecutamos el siguiente sp podremos observar que los logical name difieren al nombre de la base de datos SP_HELPDB Sucursal_Florida
Bien, esto lo podemos solucionar alterando la estructura de la base y para ello usaremos la siguiente sentencia: ALTER DATABASE Sucursal_Florida Si ejecutamos nuevamente el SP_HELPDB para la base Sucursal_Florida veremos que el logical name hace referencia a la base Sucursal_Florida. SP_HELPDB Sucursal_Florida
Escenario 3: Ahora supongamos que tenemos varias bases donde sus logical name son todos diferentes con sus nombre de base de datos, realizar esta tarea base por base se realiza bastante tedioso, con lo cual podremos utilizar el siguiente script, el cual permite realizar una ALTER de la base por cada archivo de datos y de transaction log dependiendo el tipo de archivo. Script 3: DECLARE @cmd nvarchar(max)
|
||


