Algo que parece tan trivial como renombrar una base de datos, puede volverse una tarea ardua y complicada en SQL Server.
La primera opción que se suele elegir es ir directamente con el Management Studio (o el Administrador Corporativo) y elegir la opción Renombrar sobre la base de datos. Esta operación dispara una excepción que viene a decir que la base de datos podría no estar bloqueada de forma exclusiva para ejecutar dicha operación.
Otra opción podría ser usar el procedimiento almacenado sp_rename_db:
sp_rename_db nombre_anterior, nombre_nuevo
Dicho procedimiento almacenado se presenta como obsoleto para SQL Server 2005 o superiores, recomendando utilizar alter database de esta forma:
alter database nombre_anterior modify name = nombre_nuevo
Pero nos lanza una excepción similar al paso anterior. La respuesta a este problema consiste en echar a todos los usuarios que puedan estar accediendo a la BD y mantenerles desconectados lo suficiente como para hacer el cambio. Esta operación puede ser muy farragosa, ya que habría que recorrer los pids de sistema y matarlos uno a uno. En un sistema que está muy cargado, simplemente basta con desconectar el cable de red. SQL nos ofrece una solución que consiste en añadir la opción ROLLBACK IMMEDIATE a la sentencia alter, pero tampoco funciona en la operación de renombrado.
Finalmente, lo que hemos de hacer es una operación consistente en varios pasos:
alter database nombre_anterior set single_user with rollback immediate
alter database nombre_anterior modify name=nuevo_nombre
alter database nuevo_nombre set multi_user
* Traducción libre de un artículo publicado en SQLServerCentral por Andy Warren:
http://www.sqlservercentral.com/articles/Administration/63891/