티스토리 툴바


'데이터베이스/MS SQL Server'에 해당되는 글 2

  1. 2011/08/11 MSSQL 서버 2008 - 트랜잭션 로그 줄이기 (2)
  2. 2011/04/07 SQL Server Identity Column 초기화 하기 (4)

MSSQL 서버 2008 - 트랜잭션 로그 줄이기

2011/08/11 11:16 | Posted by 포데브(엄지사랑) 엄지사랑
참고: http://ottoradke.com/2008/11/04/microsoft-sql-server-2008-tip-1-purge-transaction-log/

트랜잭션 로그를 줄이는 방법을 검색해보면 대략 다음의 두가지 방법을 찾을 수 있다.

1. 데이터베이스 복구모델을 simple로 변경하는 방법
2. 트랜잭션 로그를 백업하고 로그파일 크기를 줄이는 방법

2번 방법에 대해서는 다음과 같이 수행한다.

2.1 로그파일 백업
backup log DatabaseName to disk='YourPath\YourFilename.trn'
2.2 로그파일 크기 줄임
dbcc shrinkfile('logfilename', 1024)


※ DatabaseName, logfilename 은 해당 DB 정보를 확인
※ YourPath, YourFilename 은 백업할 위치 및 파일명을 입력

그런데 이 방법을 사용하게 되면 한번에 잘될때도 있지만 사용이 빈번한 DB의 경우 한번에 줄어들지 않고 여러번 반복해야 원하는 크기로 줄일 수 있다.

다른 포스트와 다르게 참고 URL을 상단에 둔 이유가 바로 여기에 있다.
Otto R. Radke  라는 분의 블로그 인데 소개글이 재밌다.
Developer & designer. Americano drinker, tennis player. Goal: be simple, passionate & resourceful.

------------------------------------------------------------------------------

-- Otto R. Radke - http://ottoradke.com

-- Info: T-SQL script to shrink a database's transaction log. Just set the

-- database name below and run the script and it will shrink the

-- transaction log.

------------------------------------------------------------------------------

------------------------------------------------------------------------------

-- Update the line below with the name of the database who's transaction

-- log you want to shrink.

------------------------------------------------------------------------------

USE YourDatabaseName

------------------------------------------------------------------------------

-- Don't change anything below this line.

------------------------------------------------------------------------------

GO

-- Declare variables

DECLARE @SqlStatement as nvarchar(max)

DECLARE @LogFileLogicalName as sysname

-- Alter the database to simple recovery

SET @SqlStatement = 'ALTER DATABASE ' + DB_NAME() + ' SET RECOVERY SIMPLE'

EXEC ( @SqlStatement )

-- Make sure it has been altered

SELECT [name], [recovery_model_desc] FROM sys.databases WHERE [name] = DB_NAME()

-- Set the log file name variable

SELECT @LogFileLogicalName = [Name] FROM sys.database_files WHERE type = 1

-- Shrink the logfile

DBCC Shrinkfile(@LogFileLogicalName, 1)

-- Alter the database back to FULL

SET @SqlStatement = 'ALTER DATABASE ' + DB_NAME() + ' SET RECOVERY FULL'

EXEC ( @SqlStatement )

-- Make sure it has been changed back to full

SET @SqlStatement = 'SELECT [name], [recovery_model_desc] FROM ' + DB_NAME() + '.sys.databases WHERE [name] = ''' + DB_NAME() + ''''

EXEC ( @SqlStatement )

------------------------------------------------------------------------------


실행해 보면 1M의 크기로 로그파일을 줄여준다. 너무 고마워서 해당 블로그에 답글도 쓰고 이렇게 국내에도 소개한다. 물론 검색을 잘하면 걸리기야 하겠지만..  ^^;

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License

SQL Server Identity Column 초기화 하기

2011/04/07 15:08 | Posted by 포데브(엄지사랑) 엄지사랑
1. DBCC CHECKIDENT
가장 쉬운방법. 하지만 테이블내에 있는 값들보다 작은 값을 설정하지 않도록 주의한다. 만약 작은 값이 설정되면 primary key violation(주키 위반)이 발생하기 때문이다. 

구문: DBCC CHECKIDENT (<table name>,RESEED,<new value>)
예) DBCC CHECKIDENT ('TB_MB_MEMBER',RESEED,0)


Tip. 만약 DB 소유자가 아니고 권한만 있는 경우

USE <db name>
GO

명령을 사용하여 해당 DB Context로 이동한다.

2. Drop and Add the column
이 방법은 첫번째보다 조금 더 안정적인데 이유는 새로운 시드(seed)값을 자동으로 할당해 주기 때문이다. 그러나 많은 작업을 해야하고 컬럼의 순서가 변경된다.
당연한 얘기이겠지만 만약 코드에서 컬럼순서로 접근(access)하고 있었다면 컬럼순서를 재조정해야만 한다. 

ALTER TABLE <table name> DROP CONSTRAINT <constraint name>
ALTER TABLE <table name> DROP COLUMN <column name>
ALTER TABLE <table name> ADD <column name> bigint identity (1,1) NOT NULL
ALTER TABLE <table name> ADD CONSTRAINT <constraint name> PRIMARY KEY CLUSTERED(
<column name> ASC
)WITH (PAD_INDEX = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]


3. Drop and Create the table
이 방법은 두가지 문제 즉, 안정적으로 새로운 값을 설정하는 것과 컬럼의 순서를 유지하는 것이 해결된다. 그러나 이 방법 또한 많은 작업을 해야한다.

동일한 구조를 갖는 새로운 임시 테이블 생성 -> 모든 데이터를 임시 테이블로 복사 -> 이전 테이블 삭제(DROP) -> 임시 테이블 이름 변경



참고 사이트: 
http://www.dev102.com/2008/03/22/how-to-reset-identity-increment-value-in-ms-sql/

 
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
이전 1 다음