티스토리 뷰

Computer/Databases

ms sql 백업

인생이글케쉬우냐 2009. 5. 22. 10:27

출처

http://blog.naver.com/camui62?Redirect=Log&logNo=90017140026

안녕하세요~

단순 복구 모델이라 할지라도 로그는 쌓입니다. 다만, 체크 포인트 발생시에 로그를 스스로 잘라내므로
일정크기 이상 증가하지 않습니다. 따라서 별도로 관리자가 로그 파일크기 관리를 하실 일이 없는것이지요.
그렇지만, 대량의 트랜잭션을 유발하는 대용량 처리 작업의 경우에는 로그 파일 크기가 많이 커질수 있습니다.

두번쨰 질문 전체 백업시 로그파일도 백업되는가?
네  전체 백업시에 데이터 파일과 로그 파일을 같이 백업하게 됩니다.

dbcc shrinkdatabase, dbcc shrinkfile 명령은 tempdb에 대해서 사용하실 필요는 없습니다.
사용자 DB에 대해서 파일 크기 관리를 하실경우에 위 두 명령을 적절히 사용하시면 됩니다.


Log Size(MB) : 1.7421875
Log Space Used(%) : 52.914799
사용공간이 아직 많이 남아있는거 아닌가요?
-->  tempdb의 로그 파일 크기가 1.8MB정도이고, 그 사용량이 50% 정도이긴하다, 1.8MB는 그 크기가 크다고
말하기 어렵겠습니다. 그리고, 커밋되지 않은 트랜잭션이 남은 1mb정도보다 더 많은 량의 로그를 발생한다면,
로그공간이 더 확보 되어야 하겠지요.

> 멋.당.씩 님이 쓰신  글
> ----------------------------------------------------------
> 주신 답변 정말 감사합니다.
> 한번 더 질문드리겠습니다.
>
> EN에서 tempdb 를 선택 후 등록정보에서 데이터파일/트랙잭션로그 의 크기를 늘였습니다. (방법 맞죠? ^^;;)
>
> 그런데, 로그가 쌓이지 않게 하기 위해서는 데이터베이스 복구 모델을 '단순(Simple)'로 하면 된다고 보았는데,
> 단순인데도 로그가 쌓이는 이유는 멀까요?
>
> 그리고 전체백업을 하는경우 로그파일도 당연히 백업되는거죠?
> 이럴경우 로그파일 삭제해도 되는거죠?
>
> >   backup log tempdb with no_log    //  로그비우기
>
> >  dbcc shrinkdatabase(pankorea, truncateonly)
>   어디에선가 이것도 사용해 주라고 하는데, shrinkdatabase : 데이터베이스 축소하기라고 하는데
> 이 구문을 실행하지 않으면 로그가 안비워지는건가요?
> 로그비우기 구문 실행 후 꼭 사용해야 하는건가요?
>
> > 글구 에러가 난 tempdb가
> - 속성:  크기 : 98.94MB / 사용가능한공간 : 97.43MB
> - Database Name : tempdb
> - Log Size(MB) : 1.7421875
> - Log Space Used(%) : 52.914799
> - status : 0
> 이렇습니다.
> 사용공간이 아직 많이 남아있는거 아닌가요?
> 그런데 왜  ""'tempdb' 데이터베이스의 로그 파일이 꽉 찼습니다. 데이터베이스의 트랜잭션 로그를 백업하여 사용

> 능한 일부 로그 공간을 확보하십시오. "" 이런 문구가 뜨는걸까요?
>
>
>
> 아..친절한 답변 너무 너무 감사드립니다.
> 정말루 ㅠㅠ ..
> ^0^
> ==============================================================================
>
> > 김종균 님이 쓰신  글
> > ----------------------------------------------------------
> > 안녕하세요..
> >
> > 1) DB의 복구 모델이 단순 모드일 경우에는 로그백업이 되지 않습니다.
> >
> > 2) tempdb의 로그가 꽉찼다, 로그를 비워라.. 
> >
> > 앞서 설명드린대로 tempdb도 단순복구 모델을 사용합니다. 따라서 tempdb의 로그 파일도
> > 체크 포인트가 발생시에 로그를 자동으로 비우게 됩니다. 님의 상황에서는 tempdb를 사용하는
> > 어떤 트랜잭션이 커밋되지 않은 상태에서 트랜잭션 로그를 계속 만들어 내고 있지 않은가 생각되어 집니다.
> > 그 트랜잭션이 커밋되면, 로그는 자동으로 정리가 될 것입니다.
> > 예를 들어 tempdb의 로그파일 크기가 10M이고, 자동 증가 옵션이 비활성일 경우 라고 가정했을경우에 하나의 트

> 잭
> > 션이 발생하는 로그의 양이 10M를   초과한다면, tempdb로그 파일에 여유공간이 없다라는 오류가 뜰수 있겠죠..
> > 그리고, 로그파일 자동 증가 옵션이 활성화 된 경우라도, 로그파일이 존재하는 디스크에 여유공간이 없어서 동일

> 제
> > 가 발생할 수 도 있겠죠.
> >
> > 님의 경우에 tempdb의 로그가 꽉 찬 경우 인데..
> > 사용자 DB의 로그 파일을 잘라내실 필요는 없겠습니다. 주의 하십시요.
> > 참고로, 사용자 DB의 로그 파일을 임의로 잘라내시기 전, 후에는 반드시 해당 DB에 대해서 전체백업을 각각 한

> 수
> > 행하십시요~   
> > 또한 풀백업이 없는 로그 백업은 무용지물입니다. 시간이 오래 걸려도 풀백업은 반드시 한번은 해야 할 작업입니
다.
> >
> >
> > 이상의 설명을 참고하시고요.. 젤 먼저 질문하신 tempdb로그파일이 꽉 찬 문제가 고민 거리라면,
> > 다른 조치보다, 그냥 tempdb의 데이터파일과 로그파일의 크기를 좀 크게 잡아주시는게 좋겠습니다.
> >
> > > 멋.당.씩 님이 쓰신  글
> > > ----------------------------------------------------------
> > > 지식인에서 글을 읽다가 이해가 잘 되지 않아 다시 글을 올립니다.
> > >
> > > 아래 글을 읽은 후 궁금증입니다.
> > >
> > > 1) DB가 단순모델일 경우는 로그 백업이 되지 않는건가요?
> > >
> > > 2) 지금 tempdb로그가 다 찼다가 비우라고는 하는데,
> > > ==> 로그비우기 : backup log test1 with no_log   // 이렇게 로그는 비워졌는데
> > >
> > > 백업을 하지 않고 로그를 비워버리면 안될것 같기에, 백업을 하려고 합니다.
> > > 데이터베이스 풀백업은 너무 시간이 많이 걸려서
> > > 로그만 백업을 하려고
> > > BACKUP LOG test1 TO DISK = 'c:\pTest1Log' WITH NO_TRUNCATE, INIT  //실행을 했더니 에러가 납니다.
> > >
> > > 어떤식으로 백업을 해야 하는건가요?
> > >
> > > sql중지를 시킨 후 ldf 파일을 다른곳에 복사한 다음 로그를 비워야 하는건가요?
> > >
> > > ㅠㅠ 물어볼곳도없고 너무 답답합니다..
> > > 답변해 주신 고수님들께 참으로 감사를 드립니다...
> > >
> > >
> > > ---- 아래 ------------
> > >
> > >
> > > 출처 : http://blog.naver.com/webman21?Redirect=Log&logNo=17902120
> > > 내용 :
> > > 21. 데이터 베이스 백업
> > > --화일로 백업
> > > BACKUP DATABASE bkupTest TO DISK='c:\bkupTest_full_bkup' WITH INIT
> > > GO
> > > --복구
> > > restore database bkupTest from disk ='c:\bkupTest_full_bkup'
> > > GO
> > > --영구 백업 디바이스 생성
> > > sp_addumpdevice 'disk', 'bkupTestDevice', 'c:\bkupTestDevice_full_bkup'
> > > GO
> > > --디바이스로 백업 할때는?
> > > BACKUP DATABASE bkupTest TO bkupTestDevice
> > > --복구
> > > restore database bkupTest from bkupTestDevice
> > > GO
> > > * 단순 복구 모델
> > > USE pubs
> > > GO
> > >
> > > --pubsDB의 복구 모델을 단순으로 한다.
> > > ALTER DATABASE pubs SET RECOVERY simple
> > >
> > > --풀 백업 수행
> > > BACKUP DATABASE pubs TO DISK = 'c:\pubsFull' WITH INIT
> > >
> > > --데이터 조회
> > > SELECT TOP 1 title_id, price FROM titles
> > >
> > > --조회된 값은? - 꼭 적으세요.
> > >
> > > --데이터 수정
> > > UPDATE titles SET price = price * 2
> > >
> > > --데이터 조회 - 조회된값 꼭 적으세요.
> > > SELECT TOP 1 title_id, price FROM titles
> > >
> > > --복구 모델이 단순일 경우 로그 백업이 가능한가?
> > > BACKUP LOG pubs TO DISK = 'c:\pubsLog' WITH INIT
> > > --불가하다.
> > >
> > > --SQL서버 시스템 종료SHUTDOWN
> > >
> > > --탐색기등으로 pubs의 데이터 화일인
> > > --mdf 화일을 지우자.
> > > --C:\Program Files\Microsoft SQL Server\MSSQL\Data
> > > --이 기본 경로이다.
> > >
> > > --다시 SQL서버를 시작한다.
> > >
> > > --master DB 에서 작업한다.
> > > USE master
> > > GO
> > >
> > > --데이터 조회가 가능한가?
> > > SELECT TOP 1 title_id, price FROM pubs..titles
> > > --불가하다.
> > >
> > > --로그 백업이 가능한가? (이후 풀모델과 비교를 위해서 입니다.)
> > > BACKUP LOG pubs TO DISK = 'c:\pubsLogNoTrunc' WITH NO_TRUNCATE, INIT
> > > --불가하다.
> > >
> > > --복구를 진행하자.
> > > RESTORE DATABASE pubs FROM DISK = 'c:\pubsFull'
> > >
> > > --데이터를 조회해 보자.
> > > SELECT TOP 1 title_id, price FROM pubs..titles
> > >
> > > * 대량 로그 모델
> > > --pubs DB를 대량 로그 모델로 바꾼다.
> > > ALTER DATABASE pubs SET RECOVERY bulk_logged
> > >
> > > --데이터베이스를 풀 백업 한다.
> > > BACKUP DATABASE pubs to DISK = 'c:\pubsFull' WITH INIT
> > >
> > > --데이터를 조회한다.
> > > SELECT TOP 1 title_id, price FROM pubs..titles
> > > --조회된 값은?
> > >
> > > --가격을 *2 한다.
> > > UPDATE pubs..titles SET price = price * 2
> > >
> > > --데이터를 조회한다.
> > > SELECT TOP 1 title_id, price FROM pubs..titles
> > > --조회된 값은?
> > >
> > > --BULK 작업을 한다.
> > > --다운로드 받은 titles.txt 화일을 c:\에 둔다. - SQL7에서
> > > --BULK 작업은 로그에 남지 않았으나 SQL2000에서는 남는다.
> > > --일반적인 INSERT, UPDATE, DELETE는 기본적으로 로그에 남는다.
> > > --그리고 작업한다.
> > > BULK INSERT pubs..titles FROM 'c:\titles.txt'
> > >
> > > --데이터를 조회한다.
> > > SELECT top 2 title_id, price FROM pubs..titles
> > > --Bulk INSERT로 삽입된 값은 BU1001 에 39.98이다.
> > > --SQL7과 틀리게 sp_dboption없이 BULK INSERT가 가능하다.
> > >
> > > --로그를 백업하자. - BULK INSERT가 로그에 남을까 남지 않을까?
> > > --SQL7까지는 LOG에 남지 않는 작업이었다.
> > > BACKUP LOG pubs TO DISK = 'c:\pubsLog' WITH INIT
> > >
> > > --다시 하나의 데이터를 BULK INSERT로 넣자.
> > > --지금 넣는 값은 title_id가 BU1002이며 가격은 23.9 이다.
> > > BULK INSERT pubs..titles FROM 'c:\titles2.txt'
> > >
> > > --데이터를 조회해 보자.
> > > SELECT top 3 title_id, price FROM pubs..titles
> > > --조회된 값은?
> > >
> > > --역시나 시스템을 내리고 pubs의 mdf 화일을 지우자.
> > > SHUTDOWN
> > >
> > > --다시 SQL서버를 시작 시키자.
> > > USE master
> > > GO
> > >
> > > --데이터가 조회 가능한가? - 불가하다.
> > > SELECT TOP 3 title_id, price FROM pubs..titles
> > >
> > > --데이터베이스를 복구하자.
> > > --현재 풀백업본을 복구하는 것이다.
> > > --이후 LOG를 복구할게 더 있으므로 옵션으로
> > > --WITH NORECOVERY를 붙인다.
> > > RESTORE DATABASE pubs FROM DISK = 'c:\pubsFull'
> > > WITH NORECOVERY
> > >
> > > --로그를 복구하자.
> > > --이때 마지막 복구본 이므로
> > > --WITH RECOVERY 옵션을 준다.
> > > RESTORE LOG pubs FROM DISK = 'c:\pubsLog'
> > > WITH RECOVERY
> > >
> > > --데이터를 조회해 보자.
> > > SELECT TOP 3 title_id, price FROM pubs..titles
> > >
> > > * 전체 모델
> > > --사용된 데이터베이스를 최초 상태로 복구 합니다.
> > > --맨처음 단순모델할때 사용했던 백업본입니다.
> > > RESTORE DATABASE pubs FROM DISK = 'c:\pubsFull'
> > >
> > > --다음 풀모델을 위해 풀백업을 진행합니다.
> > > BACKUP DATABASE pubs TO DISK = 'c:\pubs1' WITH INIT
> > >
> > > --데이터를 조회해 보면?
> > > SELECT TOP 1 title_id, price FROM pubs..title
> > > --조회된 값은?
> > >
> > > --price를 *2 합니다.
> > > UPDATE pubs..titles SET price = price * 2
> > >
> > > --BULK INSERT로 데이터를 넣습니다. 값은 BU1001입니다.
> > > BULK INSERT pubs..titles FROM 'c:\titles.txt'
> > >
> > > --데이터를 조회하면?
> > > SELECT TOP 2 title_id, price FROM pubs..titles
> > > --조회된 값은?
> > >
> > > --로그를 백업 합니다.
> > > BACKUP LOG pubs TO DISK = 'c:\pubsLog' WITH INIT
> > >
> > > --또다시 BULK INSERT를 합니다.
> > > BULK INSERT pubs..titles FROM 'c:\titles2.txt'
> > >
> > > --데이터를 조회하면?
> > > SELECT TOP 3 title_id, price FROM pubs..titles
> > > --조회된 값은?
> > >
> > > --시스템 셧다운
> > > SHUTDOWN
> > >
> > > --pubs의 mdf 화일을 삭제 합니다. 단!
> > > --ldf 화일은 건드리지 마세요.
> > > --복구를 진행합니다.
> > > USE master
> > > GO
> > >
> > > --데이터를 조회가 가능한가요? - 불가합니다.
> > > SELECT TOP 2 title_id, price FROM pubs..titles
> > >
> > > --로그를 백업합니다.
> > > --바로 풀백업의 중요한 부분으로
> > > --문제가 발생해도 로그가 깨지지 않았다면?
> > > --로그가 백업이 됩니다.
> > > --이때 반드시 WITH NO_TRUNCATE 옵션이 필요합니다.
> > > --INIT는 초기화 시켜 백업하라는 옵션이지요.
> > > BACKUP LOG pubs TO DISK = 'c:\pubsLogNoTrunc' WITH NO_TRUNCATE, INIT
> > > --로그 백업이 성공합니다.
> > >
> > > --데이터베이스를 복구해 보도록 하지요.
> > > --복구할게 더 있으니 NORECOVERY로 합니다.
> > > RESTORE DATABASE pubs FROM DISK = 'c:\pubsFull'
> > > WITH NORECOVERY
> > > 

[출처] ms sql 백업|작성자 클레이톤


반응형

'Computer > Databases' 카테고리의 다른 글

[MSSQL] 여러컬럼의 값을 하나의 컬럼으로 합치는 방법  (0) 2009.06.03
MSSQL의 DROP FUNCTION/PROCEDURE/TRIGGER  (0) 2009.05.28
MSSQL 2000과 2005사이  (0) 2009.05.28
SQL 모음  (0) 2009.05.14
SQL문 정리  (0) 2009.05.14