[출처] [mssql] 데이타베이스 떼어내기, 붙이기, 백업, 복원, |작성자 초코머루
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
예) 붙일 DB명이 pubs이고 파일이 아래와 같은때
EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'
(8) sp_attch_db(데이터베이스 떼어내기와 붙이기) : 로그 파일을 비우기 위한 방법과 데이터베이스의 복제의 목적으로 자주 사용
예제(pubs DB 떼어내기)
-- sp_detach_db
USE master
EXEC sp_detach_db pubs
pubs DB 의 실제 물리적인 데이터파일을 잘라내서 다른 디렉터리로 이동합니다. 실습에서는 C:\data\ 로 이동하였습니다. 따라서 실제 물리적인 경로는 다음과 같습니다. C:\data\pubs.mdf
(pubs DB 다시 붙이기)
-- sp_attch_db
EXEC sp_attach_db 'pubs', 'C:\data\pubs.mdf' ----- 로그파일은 삭제(초기화)됨 (혹시 안보이시는 분은 새로고침!)
EXEC sp_attach_db 'pubs', 'C:\data\pubs.mdf' , 'C:\data\pubs_log.ldf' ---- 데이타파일/ 로그파일 함께 복원
1. 데이터베이스를 선택하고 마우스 오른쪽 버튼으로 클릭합니다.
[모든 작업 - 데이터베이스 분리]
2. pubs 데이터베이스의 물리적인 데이터 파일을 이동
3. [데이터베이스 - 모든 작업 - 데이터베이스 연결] : MDF 파일의 실제 경로를 직접 입력
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
< 로그 파일 >
dbcc loginfo -- 로그파일 정보를 본다
exec sp_helpfile -- 실제 물리적 파일 크기 및 이름 확인
backup log pubsDB to Disk = 'D:\Backup\pubsBD_Log.bak' ----- 로그 백업 : 파일로 백업
backup log pubsDB With no_log --- 로그 삭제
dbcc shrinkfile (pubsDB, 2 ) --- 가장 작은 크기로 생성
dbcc loginfo -- 로그파일 정보 본다
select * from sysfiles
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
< '이미존재하는 사용자 입니다.'라는 에러메세지를 받게 됩니다. >
1.복원하려면 컴퓨터의 SQL서버에 똑같은 계정을 만들고
2.데이타베이스를 복원하고
3. sp_change_users_login "auto_fix","계정이름"
위의 상황에 맞추어 설명하자면 sp_change_users_login "atuo_fix","홍길동"이라고 하면 됩니다.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
< Owner 중복생성 에러 >
첫째 :
sp_change_users_login 프로시져를 사용하여 로그인과 사용자를 매핑
B. 사용자의 로그인 변경
다음은 pubs 데이터베이스의 Mary라는 사용자와 기존 로그인의 연결을 변경하여(sp_addlogin
를 사용하여 추가된) NewMary로의 연결을 보여 주는 예제입니다.
--Add the new login.
USE master
go
EXEC sp_addlogin 'NewMary'
go
--Change the user account to link with the 'NewMary' login.
USE pubs
go
EXEC sp_change_users_login 'Update_One', 'Mary', 'NewMary'
use master
exec sp_addlogin '새사용자'
exec sp_defaultdb '새사용자', '디비명'
use '디비명'
exec sp_change_users_login 'Update_One', '이전사용자', '새사용자'
두번째는 시스템 msater DB에 등록되어있는 데드유저를 삭제하는것입니다
간혹 sp_attach_db를 하고 나면 읽기전용을 변경되는데 이건 해당 디비등록정보에서 보안부분에 읽기전용을 해체 시켜주면 된다.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
(전체 백업)
-- testDB2 full backup
EXEC sp_addumpdevice 'disk', 'B_testDB2', 'd:\Backup\B_testDB2'
BACKUP DATABASE testDB2 TO B_testDB2
(로그 백업 1)
BACKUP LOG testDB2 TO DISK = 'd:\Backup\B_testDB2_log1'
(전체 백업 복원 === 로그는 복원하지 않은 상태... 그러므로 불완전 데이타임)
USE pubs
RESTORE DATABASE testDB2 FROM B_testDB2 WITH REPLACE
(전체 데이터 복원)
USE pubs
RESTORE DATABASE testDB2 FROM B_testDB2 WITH NORECOVERY
RESTORE LOG testDB2 FROM DISK = 'd:\Backup\B_testDB2_log1' WITH NORECOVERY
RESTORE LOG testDB2 FROM DISK = 'd:\Backup\B_testDB2_log2' WITH RECOVERY
(특정시간으로 복구 STOPAT) -- 전체데이터복원
USE pubs
RESTORE DATABASE testDB2 FROM B_testDB2 WITH NORECOVERY
RESTORE LOG testDB2 FROM DISK = 'd:\Backup\B_testDB2_log1' WITH NORECOVERY
RESTORE LOG testDB2 FROM DISK = 'd:\Backup\B_testDB2_log2' WITH RECOVERY
, STOPAT = '2002-05-04 06:59:50'
BACKUP DATABASE 디비명 TO DISK='경로' WITH INIT
restore database 디비명 from disk ='경로'