Utilidades de Sql Server con ADO.NET – Cambiar el nombre de archivos lógicos de una base de datos

Hola ¿Qué tal?…


Continuando con las utilidades de SQL Server con ADO.NET  toca el turno a una nueva funcionalidad que puede ser de gran ayuda al momento de cambiar de nombre a una base de datos de SQL Server.


Esta funcionalidad podrá ser utilizada con bases de datos de SQL Server 2000 y 2005, aunque en ocasiones tendré que especificar si es posible en versiones anteriores a SQL Server 2005 ya que estaré publicando estas utilidades principalmente para funcionar en SQL Server 2005.


Cambiar el Nombre de Archivos Lógicos de una Base de Datos con T-SQL


Aquí modificaremos los nombres lógicos de los archivos para que quede en congruencia con el nuevo nombre de la base de datos. Así pues, utilizaremos nuevamente la instrucción ALTER DATABASE para esta tarea, quedando de esta manera:

ALTER DATABASE NewAdventureWorks
      MODIFY FILE(
            NAME = ‘AdventureWorks_Data’,
            NEWNAME = ‘NewAdventureWorks_Data’)
GO
ALTER DATABASE NewAdventureWorks
      MODIFY FILE(
            NAME = ‘AdventureWorks_Log’,
            NEWNAME = ‘NewAdventureWorks_Log’)
GO



Como comentaba anteriormente, será necesario utilizar la instrucción GO del analizador de consultas de SQL Server para separa la ejecución de las instrucciones ALTER DATABASE. Bien, con esto hemos cambiado el nombre de archivos lógicos de la base de datos. Aun cuando hemos podido cambiar el nombre de la base de datos y el nombre de los archivos lógicos de la base de datos, aún queda un problema qué resolver, y este es, cambiar el nombre de los archivos físicos de la aplicación. Aquí es donde está el problema, ya que podremos cambiar el nombre lógico del archivo y el nombre a la base de datos, pero , hay un problema… el nombre físico de los archivos no podrá cambiarse debido a la dependencia de los archivos con el servidor de base de datos. La mejor manera podría ser, primeramente, separa los archivos de la base de datos y eliminar la historia de la base de datos, luego, renombrar los archivos físicos al nombre que deseamos, hay que hacerlo con ambos archivos, el Data (mdf) y el Log (ldf), una vez renombrados procederemos a adjuntarlos nuevamente, se adjuntará con el nombre de la base de datos anterior, así que, solo restará hacer lo que hemos aprendido una vez adjuntados los archivos con el nuevo nombre.


Cambiar el Nombre de Archivos Lógicos de una Base de Datos con ADO.NET


Para cambiar el nombre de los archivos lógicos, utilizaremos lo que vimos con anterioridad en esta publicación en la parte de cambiar nombre de archivos lógicos con T-SQL, bien, el método resultante será como el mostrado en el siguiente ejemplo:


VB.NET

Public Sub ChangeLogicalFileName( _
        ByVal DBName As String, _
        ByVal CurrentName As String, _
        ByVal NewName As String)
    ‘Se declara el SqlCommand para ejecutar
    ‘la instrucción
    Dim cmd As SqlCommand = New SqlCommand()
    ‘Se declara un string para armar el
    ‘CommandText para el SqlCommand
    Dim strSql As String
    ‘Se arma la instrucción Alter Table en
    ‘la cadena declarada
    strSql = String.Format( _
        “ALTER DATABASE {0} “ & _
        “MODIFY FILE(NAME = ‘{1}’, NEWNAME = ‘{2}’)”, _
        DBName, CurrentName, NewName)
    ‘Se asigna el CommandText del
    ‘SqlCommand con la cadena strSql
    cmd.CommandText = strSql
    ‘Se asigna la conexión a utilizar
    cmd.Connection = cnn
    ‘Se intetará ejecutar la instrucción
    Try
        ‘Se abre la conexión
        cnn.Open()
        ‘Se ejecut la instrucción
        cmd.ExecuteNonQuery()
    Catch ex As SqlException
        ‘Se captura el mensaje de error
        mMessages = ex.Message
    Finally
        ‘Al final se cierra la conexión
        cnn.Close()
    End Try
End
Sub



C#

public void ChangeLogicalFileName(
        string DBName,
        string CurrentName,
        string NewName)
{
    //Se declara el SqlCommand para ejecutar
    //la instrucción
    SqlCommand cmd = new SqlCommand();
    //Se declara un string para armar el
    //CommandText para el SqlCommand
    string strSql;
    //Se arma la instrucción Alter Table en
    //la cadena declarada
    strSql = String.Format(
        “ALTER DATABASE {0} “ +
        “MODIFY FILE(NAME = ‘{1}’, NEWNAME = ‘{2}’)”,
        DBName, CurrentName, NewName);
    //Se asigna el CommandText del
    //SqlCommand con la cadena strSql
    cmd.CommandText = strSql;
    //Se asigna la conexión a utilizar
    cmd.Connection = cnn;
    //Se intetará ejecutar la instrucción
    try
    {
        //Se abre la conexión
        cnn.Open();
        //Se ejecut la instrucción
        cmd.ExecuteNonQuery();
    }
    catch (SqlException ex)
    {
        //Se captura el mensaje de error
        messages = ex.Message;
    }
    finally
    {
        //Al final se cierra la conexión
        cnn.Close();
    }
}



Con este método tenemos ahora la habilidad de cambiar el nombre de los archivos lógicos de la base de datos. Con esto tendremos suficientes herramientas para automatizar el proceso para cambiar el nombre de una base de datos completamente, con esto quiero decir que cambiaremos todo por completo, desde el nombre de archivos, el nombre de la base y el nombre lógico de los archivos, teniendo completamente cambiados los nombres.


Conclusiones


Como hemos visto hasta ahora, realizar la transformación de T-SQL a ADO.NET ha sido completamente sencillo ya que solo hemos tenido que asignar las instrucciones T-SQL al CommandText de nuestra variable de SqlCommand, seguido solo asignamos la conexión, abrimos la conexión y ejecutamos el SqlCommand. Las demás utilidades que estaré publicando, se hacen de la misma manera.


Recuerden que este método está pensado en el diseño original de la clase SqlUtilities que creamos en la primera publicación de la serie el cual está aquí:


http://msmvps.com/blogs/otelis/archive/2007/06/19/utilidades-de-sql-server-con-ado-net-regenerar-campos-identity.aspx


He decidido publicar segmentos más cortos para  mejor asimilación, este es el primer segmento de la serie que terminará en el método que automatiza el cambio de nombre de una base de datos por completo, así que estén pendientes.


Espero que haya sido de utilidad, nos vemos en el próximo post.


Saludos…


Octavio Telis

2 thoughts on “Utilidades de Sql Server con ADO.NET – Cambiar el nombre de archivos lógicos de una base de datos”

  1. ^^ muchas gracias… todo bien explicado.. sencillo y claro.. soy estudiante de ing. de sistemas y esto me ha servido mucho ^^… saludos desde Peru

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>