반응형
반응형

 

한대성

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 모두 적용됩니다.

 

 

반응형
반응형

일정 간격으로 하나의 데이터베이스( 데이터베이스)에서 다른 데이터베이스(보조 데이터베이스) 트랜잭션 로그를 전달하여 데이터베이스를 동기화하는 로그 전달(Log Shipping) 구성할 있습니다.

로그 전달을 구성하기 위해서는 다음과 같은 전제 조건이 충족되어야 합니다.

?         원본 데이터베이스의 복구 모델은 전체 혹은 대량 모델로 설정되어 있어야 합니다.

?         원본 데이터베이스의 Full Backup 미리 받아 놓는 것이 로그 전달 구성 시간을 단축할 있습니다.

?         로그 전달을 구성하기 전에, 서버에 공유 폴더를 만들어 보조 서버에서 트랜잭션 로그 파일을 사용할 있도록 설정해야 합니다.

?         하나의 서버에서 여러 대의 보조 서버를 구성할 있습니다.

 

로그 전달 구성하기

1.        SQL Server Management Studio에서 로그 전달 구성의 데이터베이스로 사용할 데이터베이스를 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭합니다.

2.        [페이지 선택]에서 [트랜잭션 로그 전달] 클릭합니다.

 

3.        [ 데이터베이스를 로그 전달 구성의 데이터베이스로 사용] 확인란을 선택합니다.

4.        [트랜잭션 로그 백업] 설정 부분에서 [백업 설정] 클릭합니다.

5.        [백업 폴더의 네트워크 경로] 입력합니다. 백업 폴더가 서버에 있는 경우 [로컬 경로] 입력합니다.

6.        [다음보다 오래된 파일 삭제] [다음 기간 내에 백업이 발생하지 않으면 경고] 부분에 적절한 값을 설정합니다.

7.        백업 [작업 이름] [일정] 설정 확인을 클릭합니다.

 

8.        [보조 서버 인스턴스 데이터베이스]에서 추가를 클릭합니다.

9.        [연결] 클릭하여 보조 서버로 사용될 SQL Server 인스턴스를 설정합니다.

10.     [보조 데이터베이스] 입력란의 목록에서 데이터베이스를 선택하거나 만들 데이터베이스의 이름을 입력합니다.

11.     [보조 데이터베이스 초기화] 탭에서 보조 데이터베이스 초기화에 사용할 옵션을 선택합니다.

12.     [파일 복사] 탭에서 보조 서버에서 로그 파일을 저장할 폴더의 위치인 [복사한 파일의 대상 폴더] 값을 지정합니다.

13.     복사 [작업 이름] [일정] 설정 합니다.

14.     [트랜잭션 로그 복원] 탭에서 백업 복원 [복구 모드] 혹은 [대기 모드] 선택 , [백업 복원 지연] 시간, [경고] 시간을 설정합니다.

15.     복원 [작업 이름] [일정] 설정 [확인] 클릭합니다.

16.     모니터 서버 인스턴스를 사용할 경우 [모니터 서버 인스턴스 사용] 확인란을 선택하고 [설정] 클릭합니다.

17.     모니터 연결에서 백업, 복사 복원 작업을 모니터 서버에 연결하는 사용할 [연결 방법을] 선택합니다.

18.     기록 보존에서 기록을 보존할 시간을 설정하고, 경고 [작업 이름] [일정] 설정한 확인을 클릭합니다.

19.     데이터베이스 속성 대화상자에서 [확인] 클릭하여 구성 프로세스를 설정을 종료합니다.

반응형

+ Recent posts

반응형