2007~2011/SQL Server2009. 6. 12. 00:01
또....,  SQL Script 를 블로그에 늘어 놓습니다. 블로그 반찬꺼리도 떨어지고 있고 고객 요구사항도 있고 해서 겸사 겸사 기록을 남겨 봅니다. 이럴 때 아님 또 언제 스크립트 남겨 보겠습니까?


[사용방법]
EXEC master..up_RENAME_CreateDBDate '데이터베이스 이름'

예를 들어 LAIGO 데이터베이스가 있을 경우,
EXEC master..up_RENAME_CreateDBDate 'LAIGO' 라고 수행하면 데이터베이스 이름이 'LAIGO_20090610' 으로 변경됩니다. 이 때, 20090610 은 실제 데이터베이스가 생성된 날짜입니다. RENAME 을 시도하려 하였으나 해당 DB가 존재하지 않는다면 그냥 종료됩니다. 

추가적으로 이 스크립트를 수행하면(sp_renamedb) create_date 가 스크립트를 수행한 시점으로 변경됩니다. 


[스크립트]
USE [MASTER]
GO

/*-------------------------------------------------------------------------------------------------------
스크립트 정보 : 데이터베이스 이름을 DB 생성일자를 기준으로 데이터베이스이름_YYYYMMDD로 변경하는 스크립트 
작성자 : Lai Go
작성일자 : 2009.06.11
실행방법 : EXEC master..up_RENAME_CreateDBDate '데이터베이스 이름'
-------------------------------------------------------------------------------------------------------*/

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


CREATE PROC [dbo].[up_RENAME_CreateDBDate]
       @userDBName                sysname                    
AS
       SET NOCOUNT ON


DECLARE   @newDBname          Varchar(50)
,                @CreateDBDate        datetime
,                @suffix                    Varchar(8)
,                @ExistDB         char(1)

       -- DB가 존재한다면 RENAME 과정이 필요없으므로 종료하삼 
       SELECT @ExistDB = count(*) from sys.databases where name = @userDBName
                
IF @ExistDB = 0 
  BEGIN 
RETURN 0
  END

       SELECT @CreateDBDate = create_date from sys.databases where name=@userDBName

       SET @suffix = convert(char(8), @CreateDBDate, 112)
       SET @newDBname = @userDBName + '_' + @suffix

          -- SESSION ROLLBACK 
          EXEC('ALTER DATABASE '+@userDBName+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE')

          BEGIN TRY
                -- RENAME 
                EXEC sp_renamedb @userDBName, @newDBname
          END TRY
          BEGIN CATCH
                -- RENAME 실패시MultiUser 전환
                EXEC('ALTER DATABASE ' + @userDBName + ' SET MULTI_USER')
          END CATCH

       -- MultiUser 전환
       EXEC('ALTER DATABASE ' + @newDBname + ' SET MULTI_USER')


SET NOCOUNT OFF



작성자 : Lai Go / 작성일자 : 2009.06.11
Posted by Lai Go