제가 가장 먼저 접했던 SQL Server는 6.5 버젼이었습니다. SQL Server 6.5 버젼을 사용하면서 가장 큰 애로사항중의 하나는 수시로 데이터베이스의 사이즈를 확인해서 필요한 경우 사이즈를 늘려주어야 한다는 것과, 데이터베이스 사이즈를 필요에 의해서 줄이고 싶은데 줄일 방법이 없었다는 것입니다(물론 다른 곳에 데이터베이스를 만들어서 Transfer하는 방법이 있기는 했지만).

SQL Server 7.0 버젼을 보고 제가 가장 놀랬던 것은 대부분의 관리가 자동화 되었다는 점이었습니다. 데이터베이스 사이즈는 설정만 해주면 필요에 따라 자동으로 늘어나고 필요한 경우 줄일 수도 있다는 사실이 저를 엄청 놀라게 했습니다. 이러한 특징은 SQL Server 2000에서도 마찬가지입니다.

이번 장에서는 데이터베이스 사이즈 늘리기와 줄이기를 중심으로 데이터베이스를 관리하는 방법을 살펴보도록 하겠습니다.

1. 데이터베이스 관리란?

데이터베이스 관리에 포함될 수 있는 작업들에는 다음과 같은 것들이 있습니다.

o 데이터 증가에 따른 파일 사이즈 변경
o 트랜잭션 로그 모니터링
o 필요에 따른 데이터베이스 사이즈 줄이기
o 데이터베이스 삭제

대부분의 작업들은 SQL Server가 자동으로 해주므로 별다른 관여가 필요없습니다. 하지만 가끔은 수작업이 필요한 경우가 있으므로 그 방법은 알아두는데 좋을듯하여 설명해 봅니다.

2. 데이터베이스 사이즈 늘리기

CREATE 문이 사용되어 생성된 개체에 대해서는 ALTER 문으로 변경이 가능하며 DROP 문으로 삭제가 가능합니다. 그러므로 CREATE 문에 의해 만들어진 데이터베이스는 ALTER 문을 이용하여 변경 할 수 있습니다.(또는 Enterprise Manager를 이용하여 변경할 수 있습니다)

데이터베이스 사이즈를 늘리는 방법은 다음의 세가지가 있습니다.

o 자동으로 증가하도록 데이터베이스 옵션 설정
o 데이터 파일의 사이즈 확장
o 데이터 파일 추가

1) 자동으로 증가하도록 데이터베이스 옵션 설정

이전의 강좌에서 CREATE DATABASE 문 사용시 사이즈 증가에 대한 SIZE, MAXSIZE, FILEGROWTH 옵션을 기억하시죠? 데이터베이스를 만들때는 이 옵션들을 이용해서 필요한 경우 사이즈가 자동으로 증가하게 해 주는 것이 좋습니다. 만일 데이터베이스가 꽉 찼는데 사이즈가 늘어나지 않는다면 SQL Server는 더이상의 데이터를 받아 들이지 못하고 경우에 따라서는 아예 작동을 넘추기도 합니다.

데이터베이스의 초기 사이즈는 어느 정도로 할지, MAXSIZE는 어떻게 설정을 할지, 그리고 사이즈 증가가 필요할 때는 어느 정도로 증가가 되게 할지는 관련된 업무를 면밀히 파악해서 결정해야 합니다. 중요한 것은 데이터베이스가 꽉 차는 사태는 없어야 한다는 것입니다. 아무리 사이즈 자동 증가가 되게 했다 하더라도 하드디스크가 여유 공간이 없게되면 더이상의 데이터베이스 사이즈 증가가 불가능하게 되므로 관리자는 하드디스크의 여유 공간도 수시로 확인해 주어야 합니다.

2) 데이터 파일의 사이즈 확장

CREATE DATABASE 문 사용시 'NAME = MyDB_Data' 부분을 기억하시죠? 이 파일의 사이즈를 증가시켜 데이터베이스 사이즈를 증가시켜주는 방법입니다.

[예제1]

ALTER DATABASE MyDB
MODIFY FILE (NAME = MyDB_Data,
SIZE = 30MB)

GO

[설명]

o MODIFY FILE 을 이용하여 Mydb_Data 파일의 사이즈를 30MB로 바꾸었습니다.

3) 데이터 파일 추가

데이터 파일을 추가함으로써 데이터베이스 사이즈를 증가시켜주는 방법입니다.

[예제2]

ALTER DATABASE MyDB
ADD FILE (NAME = MyDB_Data2,
FILENAME = 'D:\Data\MyDB2.ndf',
SIZE = 10MB,
MAXSIZE = 50MB,
FILEGROWTH = 5MB)

GO

[설명]

o ADD FILE 을 이용하여 사이즈가 10MB인 Mydb_Data2 파일을 추가함으로써 데이터베이스 사이즈를 늘렸습니다.
o 이때 FILENAME에 확장자가 ndf 인 파일을 사용했음을 주의하시기 바랍니다.(이해가 안되시면 이전의 강좌를 참고하시기 바랍니다)

3. 데이터베이스 사이즈 줄이기

이런 경우가 있습니다. 데이터베이스를 사용하다보니 사이즈가 꽤 늘었습니다. 그런데 이중에 필요없는 테이블을 지웠더니 실제 데이터베이스 사이즈는 500MB인데 데이터가 차지하는 량은 100MB가 되었습니다. 400MB의 빈공간을 그대로 데이터베이스가 가지고 있게 하는게 아니고 이 중 300MB 정도는 OS로 반환하여 다른 용도로 사용하게 하고 싶습니다.

이런 경우 데이터베이스 사이즈를 줄여주면 됩니다. 데이터베이스 사이즈를 줄려주는 방법은 데이터베이스 옵션을 설정하여 자동으로 줄어들게 하는 방법과 수동으로 사이즈를 줄이는 방법이 있습니다.

1) 자동 축소기능

데이터베이스 사이즈를 자동으로 줄어들게 하려면 다음과 같이 데이터베이스 옵션에서 '자동 축소[N]'을 선택하여 주시면 됩니다. 그러면 SQL Server는 매 30분마다 체크해서 데이터베이스 사이즈를 줄일 수 있는 경우라면 사이즈를 줄여줍니다.


2) DBCC SHRINKDATABASE

데이터베이스의 사이즈를 지정한 퍼센트만큼의 빈공간이 남은 상태로 줄여줍니다. 하지만 처음 데이터베이스가 만들어질 당시의 사이즈보다 작게 줄일 수는 없습니다. 만일 MyDB 데이터 베이스가 처음 10MB의 사이즈였고 지금 100MB인데 많은 부분이 지워져 실제 데이터가 5MB만 차지하고 있다 하더라도 10MB 보다 작게 줄일 수는 없습니다.

[형식]

DBCC SHRINKDATABASE(database_name[,target_percent][,{NOTRUNCATE | TRUNCATEONLY}])

옵션
설명
database_name 줄이고자 하는 데이터베이스 이름
target_percent 전체 사이즈 중에서 빈 공간이 차지하는 사이즈를 얼마로 할것인지 지정
NOTRUNCATE DBCC SHRINKDATABASE 가 수행되면 데이터베이스 뒤쪽의 데이터를 전부 앞으로 이동 시킨 후 비어진 공간을 제거하는 순서로 진행됩니다. NOTRUNCATE 옵션을 사용하면 데이터를 전부 앞으로 가져오기는 하나 뒤 빈 공간을 제거하지는 않습니다. 결국 데이터베이스 사이즈는 변함이 없습니다. 빈 공간이 OS에 반환되지 않는 데이터 조각모음으로 생각하시면 됩니다.
TRUNCATEONLY 데이터 조각모음은 하지 않고 뒷쪽의 빈 공간만 제거하여 OS에 돌려 줍니다. 만일 데이터베이스에 빈 공간이 앞부분이 100MB가 있고 뒷 부분에 200MB가 있다면 이 옵션에 영향을 받는 것은 뒷 부분의 빈공간 200MB입니다.

[예제1]

현재 MyDB의 데이터베이스 사이즈가 10MB 입니다. 실제 데이터가 6MB밖에 되지 않기 때문에 25%의 빈 공간만 남기고 나머지는 OS에 환원 해주고자 합니다. 방법은 다음과 같습니다.

DBCC SHRINKDATABASE (MyDB, 25)

o 결과적으로 MyDB은 8MB로 줄어들게 됩니다. 8MB에서 6MB의 데이터를 뺀 2MB가 8MB의 25% 이기 때문입니다.(아..어려운 산수!)

[예제2]

DBCC SHRINKDATABASE (MyDB)

o 줄일수 있는 만큼 줄여서 최대한 많은 빈공간을 OS에 반환합니다.

3) DBCC SHRINKFILE

데이터베이스를 이루고 있는 파일의 사이즈를 직접 줄이는 방법으로 처음 데이터베이스가 만들어질 당시의 사이즈보다도 작게 줄일 수 있습니다. 물론 실제 데이터가 차지하고 있는 공간은 줄일 수 없습니다. 만일 MyDB 데이터베이스가 처음 10MB의사이즈였고 지금 100MB인데 많은 부분이 지워져 실제 데이터가 5MB만 차지하고 있다면 5MB까지 줄일 수 있습니다. 단, MODEL 데이터베이스 사이즈 보다 작게는 줄일 수 없습니다.

[형식]

DBCC SHRINKFILE(file_name[,target_percent][,{EMPTYFILE | NOTRUNCATE | TRUNCATEONLY}])

옵션
설명
file_name 줄이도자 하는 데이터 파일의 이름을 지정합니다.
target_percent 데이터 파일을 얼마의 사이즈까지 줄일지 MB단위로 지정합니다.
EMPTYFILE 만일 데이터 파일을 완전히 제거해버리고 싶다면 이 옵션을 사용합니다. 그러면 SQL Server는 해당 데이터 파일에 위치하고 있는 데이터를 동일한 파일그룹내의 다른 데이터 파일로 이동시키고, 더이상 이 데이터 파일에는 데이터가 기록되지 않도록 합니다. 실제 데이터 파일을 제거할 때는 ALTER DATABASE 구문을 사용합니다. 단, PRIMARY 그룹의 데이터 파일에는 적용되지 않습니다.

[예제1]

다음의 예는 MyDB 데이터베이스의 사이즈를 10MB로 줄이는 것입니다.

DBCC SHRINKFILE (MyDB_Data, 10)

o 데이터베이스 이름이 아니고 데이터 파일(MyDB_Data)임을 주의하시기 바랍니다.

4. SQL Server 6.5에서 데이터베이스 사이즈 줄이기

SQL Server 6.5에서는 지금까지 설명된 DBCC SHRINKDATABASE나 DBCC SHRINKFILE 문이 지원되지 않습니다. 그래서 SQL Server 6.5에서의 데이터베이스 사이즈 줄이기가 쉽지 않은데 가장 일반적으로 사용되는 방법은 다른 SQL Server에 원하는 사이즈로 해당 데이터베이스를 새로 만들어 놓고 기존 데이터를 Transfer하는 것입니다. SQL Server 7.0이나 SQL Server 2000에서도 이 방법은 사용 할 수 도 있습니다.

5. 데이터베이스 삭제

신중하게 생각해야 할 부분입니다.

데이터베이스를 삭제하게 되면 물리적인 데이터베이스 파일도 삭제가 됩니다. 만일 데이터베이스를 삭제한 다음에 이를 다시 복구하고자 한다면 백업받은 데이터베이스를 복구하는 방법밖에는 없습니다.

데이터베이스 삭제 할수 있는 방법은 EM(Enterprise Manager)를 사용하는 방법과 DROP DATABASE 문을 사용하는 방법 두가지가 있습니다. 두 방법간의 가장 큰 차이점이라면 DROP DATABASE문은 한번에 여러 데이터베이스를 삭제 할 수 있다는 점입니다.

다음의 경우는 데이터베이스를 삭제 할 수 없습니다.

o RESTORE 중인 데이터베이스
o 사용자가 접속되어 있는 데이터베이스
o REPLICATION에 연관된 데이터베이스(아주 아주 나중에 다루게 됩니다)
o 시스템 데이터베이스

[예제1]

다음의 예는 MyDB와 YourDB 두 데이터베이스를 동시에 삭제하는 것입니다.

DROP DATABASE MyDB, YourDB

   


  출처 : http://www.it-bank.or.kr/ms/main_1.htm




Posted by 김윤석

카테고리

놀며즐기고 공부하기 (685)
 IT 정보 (653)
 재테크 (0)
 엔터테이먼트 (11)
 인터넷마케팅 (0)
 사이트 추천 (1)
사이드바 열기