--2M로 초기화
------------------ 배경설명
ms sql의 로그 파일인 ldf 파일은 db에 입/출력/엡데이트가 반복되는 경우, 계속하여 그 크기가 커진다. 특히, 어떤 오류가 발생하였을 경우에는 매우 갑작스럽게 그 크기가 커지기도 한다.
--------------------------------------------------------
--- 로그파일 크기 줄이기
--------------------------------------------------------
--로그파일 정보를 본다 (로우 수가 많을 수록 파일이 커진다)
DBCC LOGINFO
--실제 물리적 파일 크기 및 이름을 확인해본다.
EXEC SP_HELPFILE
--로그백업 또는 삭제
(파일로 백업)
BACKUP LOG Sample TO DISK='D:\DBBackup\Sample_Log.bak'
GO
(최소로 축소)
BACKUP LOG SAMPLE WITH TRUNCATE_ONLY
GO
(삭제)
BACKUP LOG Sample WITH NO_LOG
GO
--가능한 작은 크기로 생성
DBCC SHRINKFILE (SAMPLE, 2)
--로그파일 정보를 다시 본다 (로우 수가 많이 줄었다)
DBCC LOGINFO
--실제 물리적 파일 크기 및 이름을 확인해본다. (실제 크기는 줄었을 수도 있고 아닐수도 있다)
EXEC SP_HELPFILE
--[옵션]실제 최소 크기 및 최대치를 변경한다.
ALTER DATABASE SAMPLE
MODIFY FILE (
NAME = SAMPLE_LOG,
MAXSIZE = 25 MB )
GO
--------------------------------------------------------
--- 로그파일 완죠니 삭제해버리기
--------------------------------------------------------
SQL쿼리분석기에서 실행하기바랍니다.
네트웍도 끊고 처리하시구요.
1)db정보를 본다.
exec sp_helpdb db명
2)사용db을 master 로 이동
use master
3)sql서버와 db파일의 연결을 끊는다.
sp_detach_db db명
4)실제로 끊겼는지를 체크한다.(테이블이 존재하지 않는다고 에러뜸)
select top 1 칼럼 from db명..테이블
5)탐색기에서 db명_log.ldf파일은 삭제한다.(혹시모르니 이름만 변경시킴)
6)아래를 실행하면 데이터 파일을 가지고 로그파일을 살려낸다.
SP_ATTACH_SINGLE_FILE_DB 'db명', 'C:\파일경로\db명.MDF'
이때 살아난 로그파일은 최소로 줄어있다-->504kb
이상과 같이 순서적으로 처리함.
**** 물리적 디비파일의 연결 해제가 안될때 ****
---> 사용중이라는 메세지가 나오며 해제가 불가능 할 때가 있다.
방법1) 해당 디비를 단일사용자 디비로 일시 변경 후 복귀시켜서 사용
ALTER DATABASE AMAS_TEST
SET SINGLE_USER
WITH ROLLBACK AFTER 30
--단일사용자로 변경을 한 후 롤백을 하므로 디비에 대해 변동사항 전혀 없지만
--연결된 사용자는 모두 세션이 끊긴 상태가 되므로 디비를 분리할 수 있다.
방법2)
이럴 때 디비 모든 SQL툴(EM/분석기)을 종료 한 후 재 접속하는데
이 때 해제하고자 하는 디비연결을 하지 말것.
--------------------------------------------------------
--- 로그파일 다른 경로로 복사하기
--------------------------------------------------------
제가 회사에서 스토리지 확장할때 썻던 DB migration 방법인데...
도움되시길 바랍니다...
1. 주 데이터베이스 파일이 어떤 것인지 Enterprise Manager 에서 확인합니다.
해당 SQL 서버의 데이터베이스를 선택하고 등록정보를 봅니다.
일반 탭에는 주 데이터베이스 파일 정보,
트랜잭션 로그 탭에는 로그 파일 정보가 있습니다.
예> pubs 데이터베이스를 옮기고자 할때
C:\MSSQL\Data\pubs.mdf <--- 'pubs' database 의 데이터파일
C:\MSSQL\Data\pubs.ldf <--- 'pubs' database 의 로그파일< /FONT >
다른 속성들도 잘 메모해 두셨다가 복구시 같은 속성으로 맞춰 주시면 됩니다.
2. Query Manager 에서 다음 명령을 수행합니다.
sp_detach_db pubs
3. 주 데이터베이스 C 드라이브의 mdf, ldf 파일을 D 드라이브에 원하는 곳으로
copy 합니다. 예제에서는 각각
D:\MSSQL\Data\pubs.mdf
D:\MSSQL\Data\pubs.ldf
에 옮기는 것으로 하겠습니다.
4. 파일 copy 가 끝나면, Query Manager 에서 다음 명령을 수행합니다.
sp_attach_db 'pubs','D:\MSSQL\Data\pubs.mdf','D:\MSSQL\Data\pubs.ldf'
5. Enterprise Manager를 기동하여 아까 1번에서 메모했던 속성과 비교합니다.
맞지 않는 부분은 수정해 주시면 됩니다.
도움이 되셨기를...
(출처 : 'sql에서 LDF파일경로변경방법' - 네이버 지식iN)
MSSQL 트랜젝션 로그 삭제
--1. 일단 로그파일을 삭제하고자 하는 db를 single user로 만들어 줍니다.
--단독모드로 열려있지 않으면 디비파일을 삭제할수 없습니다.
exec sp_dboption 'db명','single user','true'
--2. DB를 내립니다..
exec sp_detach_db 'db명'
--3. Db가 저장되어 있는 폴더에 가서 해당 DB의 ldf파일의 이름을 변경합니다..혹시 나중에 쓸지 모르니까요...
--4. DB를 올립니다. 이 프로시져를 실행하면 해당디비의 ldf파일이..500k정도의 크기로 재 생성됩니다.
exec sp_attach_single_file_db 'db명','C:\Program Files\Microsoft SQL Server\MSSQL\data\db명.mdf'
--5. 단독모드를 풀어줍니다..
exec sp_dboption 'db명','single user','false'
* 1번항목을 쿼리분석기에서 실행하면..
'다른 사용자가 'db명' 데이터베이스를 사용하는 중에는 데이터베이스 상태를 변경할 수 없습니다.'
이런 에러메세지가 출력되었다.
이 때 엔터프라이즈 관리자와 쿼리분석기를 모두 닫은 후 쿼리분석기로만 로그인해서 하니 실행이 잘 되었