달력

11

« 2024/11 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
2009. 1. 29. 14:52

MSSQL Database 분리 Work/SQL Server2009. 1. 29. 14:52

간단하게 database를 복사하거나 backup, 이동하고 싶은 경우 아래의 system stored procedure를 사용하여 작업을 하게된다.
exec sp_detach_db [database name] -- database 분리
-- file 이동
exec sp_attach_db [database name], [mdf file name (full path)], [ldf file name (full path)] -- database 연결

간혹 사고로 ldf를 유실했을 경우...혹은 뜻하지 않게 mdf만 존재하는 경우는 아래처럼 작업하면 된다.
exec sp_attach_single_file_db [database name], [mdf file name (full path)]

하지만, 위의 stored procedure를 사용할 수 있는 조건이 까다롭다.
 1. Data file과 log file이 한 개만 있는 database일 것.
 2. 복제된 database는 안된다.
 3. 다음 version의 MSSQL에서 사라질지도 모른다.

위의 stored procedure로 해결이 안될 경우 아래 처럼 CREATE DATABASE 의 FOR ATTACH_REBUILD_LOG 를 사용하여 작업한다.
CREATE DATABASE [database name] 
ON (NAME='[database name]', FILENAME='[[mdf file name (full path)]]') FOR ATTACH_REBUILD_LOG

그래도 복구가 안되는 경우는 다음의 절차로 작업한다.

 1. 동일한 database name으로 DB를 생성.

 2. MSSQL Server 중지 후 mdf file을 덮어 쓰기.

 3. MSSQL SQL 시작.

 4. system catalog변경을 위해서 allow update 수정.
use master
GO
sp_configure 'allow update', 1
reconfigure with override
GO

 5. 해당 database를 Emergency Mode(응급복구모드)로 변경.
ALTER DATABASE [database name] SET EMERGENCY

 6. SQL 서비스 다시 시작.
     
 7. log 다시 생성.
ALTER DATABASE dbname REBUILD LOG ON (NAME='[log name]', FILENAME='[ldf file name (full path)]')

 8. 일반모드 변경 후 system catalog 원상복귀.
ALTER DATABASE [database name] SET ONLINE
GO
use master
GO
sp_configure 'allow update', 0
reconfigure with override
GO

그래도 복구를 할 수 없다면... 미안하다고 하고 자리를 피한다.

:
Posted by Elick