한대성
MS SQL Server MVP
에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자
Question |
기존 2000의 경우 log-shipping 구성시.. 데이타 파일이 추가되면 재구성해야 하는 번거로움이 있었습니다.
그런데 반갑게도 이 강좌를 보니 2005에서는 주서버에 추가되는 데이터베이스 파일이 위치하는 폴더 경로가
보조 서버에도 존재 하는 경우 로그 전달 작업이 정상적으로 된다고 하셨는데...
이건 같은 드라이브 같은 폴더 일 경우이고... 다른 드라이브를 선택해서 생성할수는 없겠죠??^^
만약 다른 드라이브를 선택할 필요성이 생긴다면 어떻게 해야 하나요?? 재구성 해야하나요??
주서버(C:\Data\Data4.ndf) --> 보조서버(F:\Data\Data4.ndf) |
결론부터 말씀드리자면, 2000이나 2005나 모두 추가되며, 파일 경로도 해제 없이 바로 변경 시킬 수 있습니다.
아래와 같이 간단한 백업 및 복원, 파일 추가 스크립트를 올립니다.
SQL 서버에서의 로그 전달 구축 및 관리는 다음 강좌를 참고하세요.^^
SQL Server 2000 로그 전달 환경 구축 강좌
SQL Server 2005 로그 전달 환경 구축 강좌
[원본 서버]
1. 다음과 같이 임시 데이터베이스를 생성합니다.
CREATE DATABASE TESTDB
ON ( NAME = 'TESTDB_Data',
FILENAME = 'E:\TEMP\TESTDB1.MDF',
SIZE = 1MB)
LOG ON
(NAME = 'TESTDB_Log',
FILENAME = 'E:\TEMP\TESTDB1.LDF',
SIZE = 1MB)
GO
/*
CREATE DATABASE 프로세스에서'TESTDB_Data' 디스크에 1.00MB를 할당하는 중입니다.
CREATE DATABASE 프로세스에서'TESTDB_Log' 디스크에 1.00MB를 할당하는 중입니다.
*/
2. 전체 백업을 수행하고, 로그 백업을 수행합니다.
BACKUP DATABASE TESTDB TO DISK='E:\TESTDB.BAK' WITH INIT
GO
/*
1 파일에서'TESTDB' 데이터베이스, 'TESTDB_Data' 파일에대해96페이지를처리했습니다.
1 파일에서'TESTDB' 데이터베이스, 'TESTDB_Log' 파일에대해1페이지를처리했습니다.
BACKUP DATABASE이(가) 97페이지를0.437초(1.804MB/초)만에처리했습니다.
*/
BACKUP LOG TESTDB TO DISK='E:\TESTDB_Log1.trn'
GO
/*
1 파일에서'TESTDB' 데이터베이스, 'TESTDB_Log' 파일에대해1페이지를처리했습니다.
BACKUP LOG이(가) 1페이지를0.280초(0.012MB/초)만에처리했습니다.
*/
[대상 서버]
3. 원본 서버로부터 전체 백업 파일과 로그 백업 파일을 복사해 옵니다.
대상 서버에서는 원본과는 다르게 D:\TEMP\ 디렉터리에 데이터 파일과 로그 파일을 두도록 설정합니다.
RESTORE DATABASE TESTDB
FROM DISK='D:\ TESTDB.BAK'
WITH MOVE 'TESTDB_Data' TO 'D:\TEMP\TESTDB1.MDF',
MOVE 'TESTDB_Log' TO 'D:\TEMP\TESTDB1.LDF',
STANDBY = 'D:\TEMP\TESTDB_StandbyInfo.tdf'
-- 로그 전달용으로 설정하기 위해 standby 파일을 지정함
GO
/*
1 파일에서'TESTDB' 데이터베이스, 'TESTDB_Data' 파일에대해96페이지를처리했습니다.
1 파일에서'TESTDB' 데이터베이스, 'TESTDB_Log' 파일에대해1페이지를처리했습니다.
RESTORE DATABASE이(가) 97페이지를0.168초(4.693MB/초)만에처리했습니다.
*/
4. 로그 파일을 이용해서 복원합니다.
RESTORE LOG TESTDB
FROM DISK='D:\TESTDB_Log1.trn'
WITH STANDBY = 'D:\TEMP\TESTDB_StandbyInfo.tdf'
GO
/*
데이터베이스파일'D:\TEMP\TESTDB_StandbyInfo.tdf'을(를) 삭제합니다.
1 파일에서'TESTDB' 데이터베이스, 'TESTDB_Log' 파일에대해1페이지를처리했습니다.
RESTORE LOG이(가) 1페이지를0.033초(0.108MB/초)만에처리했습니다.
*/
※ 로그 전달 환경 구성 완료.
[원본 서버]
5. 이제 기존 데이터베이스에 파일을 하나 추가합니다. 이 때 추가되는 파일은 기존 디렉터리와는 다른 E:\TEMP2\ 에 위치하도록 설정합니다.
ALTER DATABASE TESTDB
ADD FILE (NAME = 'TESTDB_Data2', FILENAME='E:\TEMP2\TESTDB2.NDF', SIZE=1MB)
GO
/*
'TESTDB_Data2' 디스크에서데이터베이스를1.00MB 확장합니다.
*/
6. 원본 서버의 데이터베이스에 대해 로그 백업을 수행합니다.
BACKUP LOG TESTDB TO DISK='E:\TESTDB_Log2.trn'
GO
/*
1 파일에서'TESTDB' 데이터베이스, 'TESTDB_Log' 파일에대해1페이지를처리했습니다.
BACKUP LOG이(가) 1페이지를0.280초(0.012MB/초)만에처리했습니다.
*/
[대상 서버]
7. 두 번째 로그 백업 파일을 복사해 온 후, 이를 이용해서 복원해 봅니다.
RESTORE LOG TESTDB
FROM DISK='D:\TESTDB_Log2.trn'
WITH STANDBY = 'D:\TEMP\TESTDB_StandbyInfo.tdf'
GO
/*
데이터베이스파일'D:\TEMP\TESTDB_StandbyInfo.tdf'을(를) 삭제합니다.
1 파일에서'TESTDB' 데이터베이스, 'TESTDB_Log' 파일에대해1페이지를처리했습니다.
메시지5123, 수준16, 상태1, 줄1
물리적파일'E:\TEMP2\TESTDB2.NDF'을(를) 열거나만드는중CREATE FILE에서운영체제오류3(지정된경로를찾을수없습니다.)이(가) 발생했습니다.
메시지5183, 수준16, 상태1, 줄1
'TESTDB_Data2' 파일을만들수없습니다. WITH MOVE를사용하여사용할수있는물리적파일이름을지정하십시오.
메시지3013, 수준16, 상태1, 줄1
RESTORE LOG이(가) 비정상적으로종료되는중입니다.
*/
에러 발생
즉, 새로 추가될 파일의 디렉터리인 E:\TEMP2 라는 디렉터리가 대상 서버에는 없기 때문에 파일을 만들 수 없다라는 경고입니다.
이 경우, 다음과 같이 옵션을 이용해서 경로를 변경시킬 수 있습니다.
RESTORE LOG TESTDB
FROM DISK='D:\TESTDB_Log2.trn'
WITH STANDBY = 'D:\TEMP\TESTDB_StandbyInfo.tdf',
MOVE 'TESTDB_Data2' TO 'D:\TEMP\TESTDB2.NDF'
GO
필자는, 이전에 로그 전달을 관리할 때, 새로운 파일이 추가되면 대상 서버의 로그 전달을 해제하고선 다시 원본 서버의 전체 백업 파일을 이용해서 재구성하였습니다. (이런 우매한..ㅎㅎ^^)
이렇게 밖에 할 수 없는 줄 알았는데 위와 같이 WITH MOVE 옵션을 이용해서 로그 전달 재구성 없이도 & 대상 서버의 디렉터리 경로가 다르더라도 로그 전달 대상을 변경할 수가 있더라고요.
혹시나 저와 같은 분께서 계실까 해서 위와 같은 간단한 테스트 스크립트 올려봅니다. 그리고 혹시나 자동으로만 로그 전달과 백업, 복원을 수행해 보셨다면 위와 같이 쿼리 분석기에서 수동으로도 한 번 해보시기 바랍니다. 참고로, 위의 사항은 SQL Server 2000 및 2005 모두 적용됩니다.
'연구개발 > DBA' 카테고리의 다른 글
.WRITE 절을 사용하여 큰 값 데이터 형식 업데이트하기 (0) | 2009.07.29 |
---|---|
varchar(max) + 청크 업데이트(Chunk Update) 성능 비교 (0) | 2009.07.29 |
파일 그룹 테스트 - > 파일 그룹 백업 / 복원 (0) | 2009.07.28 |
SQL 2000 시스템 테이블 vs 2005 카테고리 뷰 (0) | 2009.07.28 |
SQL 2005 성능 문제 해결 한글 문서 (0) | 2009.07.28 |