기존 연결된 세션을 롤백하고 데이터베이스 이름을 '데이터베이스이름_YYYYMMDD' 형식으로 변경하는 스크립트를 아래와 같이 작성하였습니다. 필요하시면 환경에 따라 수정해서 사용하면 되겠습니다.
[사용방법]
EXEC master..up_RENAME_DATABASE '데이터베이스 이름'
예를 들어 LAIGO 데이터베이스가 있을 경우,
EXEC master..up_RENAME_DATABASE 'LAIGO' 라고 수행하면 데이터베이스 이름이 'LAIGO_20090610' 으로 변경됩니다.
[스크립트]
USE [master]
GO
/*-------------------------------------------------------------------------------------------------------
스크립트 정보 : 기존 세션을 제거한 후 데이터베이스 이름을 데이터베이스이름_YYYYMMDD로 변경하는 스크립트
작성자 : Lai Go
작성일자 : 2009.06.10
실행방법 : EXEC master..up_RENAME_DATABASE '데이터베이스 이름'
-------------------------------------------------------------------------------------------------------*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[up_RENAME_DATABASE]
@userDBName sysname
AS
SET NOCOUNT ON
DECLARE @newDBName Varchar(50)
, @sufFix Varchar(8)
-- 오늘 날짜를 YYYYMMDD 포맷으로 반환
SET @sufFix = convert(char(8), getdate(), 112)
SET @newDBName = @userDBName + '_' + @sufFix
-- SESSION ROLLBACK
EXEC('ALTER DATABASE '+@userDBName+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE')
-- RENAME
BEGIN TRY
EXEC sp_renamedb @userDBName, @newDBName
END TRY
BEGIN CATCH
EXEC('ALTER DATABASE ' + @userDBName + ' SET MULTI_USER')
END CATCH
-- MultiUser 전환
EXEC('ALTER DATABASE ' + @newDBName + ' SET MULTI_USER')
SET NOCOUNT OFF
[참고자료]
작성자 : Lai Go / 작성일자 : 2009.06.10