테이블 - 테이블 생성 및 수정.

 

테이블 생성은 이미 앞장에서 데이터베이스 생성 및 관리를 다루면서 해보았다. 이번 시간에는 간단하게 테이블을 생성해보고 제약 조건 및 데이터 타입 등에 대해서 알아 보도록 한다.

테이블의 데이터 속성들(색, 크기, 수량, 주문 번호 등)은 테이블에서 명명된 "컬럼" 형태를 띤다. 테이블에 있는 각 데이터는 한 개의 엔트리 또는 "행(row)로 표시 된다. ( 공식 명칭은 "tuple(튜플)"이라 불린다.

 

1. 테이블 생성

테이블을 생성하는 방법에는 SSMS를 이용하는 방법과 직접 쿼리문을 입력하여 생성하는 방법이 있다.

(MSDN 참고:
http://msdn.microsoft.com/ko-kr/library/ms174979.aspx)

 

- SSMS 이용하기

SSMS를 실행하여 해당 DB에서 [테이블] 마우스 오른쪽을 클릭하여 [새 테이블]을 선택한다.

 

[새 테이블]을 선택하고 나면 컬럼명을 명과 데이터 타입 기타 속성들을 선택하는 창이 나타난다.

* 열 이름 : 컬럼에 나타낼 이름이다. 엑셀에서 컬럼의 제목을 생각하면 쉬울 듯 하다. 한글명 도 가능 하다.

* 데이터 형식 : 해당 컬럼의 데이터 타입을 말한다. 숫자형인지 문자형인지 등. 데이터 형식을 클릭하면 SQL에서 사용할 수 있는 데이터 형식을 볼 수 있다.

* Null 허용 : Null 값을 허용 할 것인지 선택한다. 체크되어 있으면 Null허용이다.

* ID사양 : 데이터 형식이 숫자인 컬럼에 대해 자동증가 값을 설정 할 수 있다. ID사양을 [예]로 선택한 다음 증가값을 설정하고 초기값을 설정한다. 디폴트는 1, 1이며 사용자가 변경 할 수 있다.

 

기본키 (Primary Key) 설정은 기본키로 사용할 컬럼에서 마우스 오른쪽 버튼을 누른 후 [기본키 설정]을 선택한다. 기본키가 지정이 되면 테이블 디자이너에 열쇠 모양이 나타는 것을 알 수 있다.

 

만약 두개 이상의 복합 컬럼을 기본키로 하고 싶다면 마우스로 해당 컬럼을 선택하고 기본키를 설정하면 아래의 그림과 같이 해당 컬럼이 복합으로 열쇠모양이 나타남을 확인 할 수 있다.

 

테이블을 저장하자. 저장 버튼을 누른 후 사용할 테이블 명 tbl_Member 저장한다.

 

테이블이 생성되었는지 확인하자

 

 

위의 방법으로 tbl_Order 테이블을 생성하자

Num : 기본키로 설정한다. IDENTITY값 선택한다. 널 값을 허용하지 않는다.

나머지 컬럼들도 그림을 보고 입력하여 저장하자.

관계를 설정해 보도록 하자. Tbl_Order 에서 아무 곳에서나 마우스 오른쪽을 클릭한다.

[관계] 를 클릭하여 설정한다.

확인을 클릭하여 본다. 어떤 일이 일어나는가? 아마도 필자의 과정을 그대로 따라 했다면 경고창이 뜰 것이다.

데이터 형식 속성이 일치하지 않는다고 한다.

Tbl_Member 와 Tbl_Order 의 User_Name 의 데이터 길이를 보라. 서로 틀린 것을 알 수 있다.

이처럼 관계를 맺을 때에는 관계를 맺으려는 컬럼의 데이터의 형식이 일치해야 한다.

테이블을 새로 만들거나 수정하여 해당 컬럼의 길이를 일치 시켜 관계를 맺어 보자.

테이블 삭제는 아주 간단하다. 삭제하려는 테이블에서 마우스 오른쪽을 이용하여 삭제 하면 된다.

 

지금은 테스트 단계이므로 테이블을 삭제하지 말고 수정하여 사용하자.

해당 테이블에서 마우스 오른쪽을 클릭하여 [디자인]을 선택한다.

테이블을 디자인할 수 있는 창이 나타난다.

User_Name을 Nvarchar(50) 으로 수정한 후 저장한다.

 

테이블 수정이 완료 되었으면 좀 전과 같이 관계를 설정해 보자. 설정이 완료 되면 tbl_Order의 키 정보에서 보면 User_Name 이 FK로 지정된 것을 확인 할 수 있다.

다이어그램에서 확인 할 수 있다.

 

테이블에 데이터를 입력하여 보자.

데이터를 입력하고자 하는 해당 테이블을 선택하고 마우스 오른쪽을 클릭하여 [상위 200개 행 편집]을 선택하자. 그림과 같이 화면이 나타나면 데이터를 입력한다. 그리고 단축 메뉴의 느낌표(!)를 클릭하면 데이터가 커밋 된다.

- 쿼리 이용하기

SSMS 쿼리 분석기에 테이블 생성 명령을 입력 한다.

Tbl_Memvber 테이블 생성.

CREATE TABLE [dbo].[tbl_Member](

    [num] [int] IDENTITY(1,1) NOT NULL,

    [user_name] [nvarchar](50) NULL,

    [dept] [nvarchar](50) NULL,

    [company] [nchar](10) NULL

) ON [PRIMARY]

 

GO

 

Tbl_Order 테이블 생성.

CREATE TABLE [dbo].[tbl_Order](

    [Num] [int] IDENTITY(1,1) NOT NULL,

    [User_Name] [nvarchar](50) NOT NULL,

    [Order_Product] [nvarchar](100) NOT NULL,

    [Order_Price] [money] NOT NULL,

    [Order_Date] [datetime] NOT NULL,

CONSTRAINT [PK_tbl_Order] PRIMARY KEY CLUSTERED

(

    [User_Name] ASC

)

) ON [PRIMARY]

 

GO

 

--tbl_Order User_Name tbl_Member User_Name 관계설정.

ALTER TABLE [dbo].[tbl_Order] WITH CHECK ADD CONSTRAINT [FK_tbl_Order_tbl_Order] FOREIGN KEY([User_Name])

REFERENCES [dbo].[tbl_Order] ([User_Name])

GO

 

ALTER TABLE [dbo].[tbl_Order] CHECK CONSTRAINT [FK_tbl_Order_tbl_Order]

GO

 

SQL Server 파서에 관한 한 탭과 캐리지 리턴(<Enter> 키)과 스페이스바로 만들어진 공백 문자는 동일한 것으로 취급 된다.

 

이렇게 해서 간략하게 테이블 생성하는 방법에 대해서 알아 보았다.

테이블 생성은 빈번하게 사용되므로 디자이너를 이용하는 것 보다 쿼리를 직접 입력하는 것이 사용하기에 편하다. (Ctrl + C, Ctrl + V 의 이점.) 쿼리문이 간단하므로 숙지하여 사용하도록 하자.

 

데이터베이스 관리

- DB파일 논리적, 물리적 이름, 파일경로 변경.

- 파일 및 파일 그룹 추가 및 삭제

 

데이터베이스의 논리적 이름 및 물리적 이름 변경방법에 대해서 알아본다. 또한 운영 상황에 따라 파일그룹을 추가하거나 삭제하는 방법을 알아 보도록 한다.

 

DB 파일 논리적 이름 및 물리적 이름 변경.

 

현업에서 빈번하게 사용하지는 않지만 (지극히 주관적인 생각이다.) 개발 환경이나 테스트 환경에서 DB파일의 논리적 이름이나 물리적 이름 및 경로를 수정하여야 할 때 사용할 수 있다. SSMS와 쿼리문을 이용하여 변경하는 방법을 알아 보도록 하자.

 

(MSDN 참고:

http://msdn.microsoft.com/ko-kr/library/ms174269.aspx)

 

 

1. DB 파일 논리적 이름 변경.

 

- SSMS 이용하기.

SSMS를 실행하여 논리적 이름을 변경할 DB를 선택한다.

마우스 오른쪽 버튼을 클릭하여 [속성] –[파일]을 선택한다.

 

 

[파일] 탭에서 논리적 이름을 변경한다.

 

Test_DB, TestDB_log를 KSW_DB, KSW_DB_log로 변경해 본다.

 

변경을 이름을 입력하고 [확인]을 클릭한다.

 

정상적으로 변경되었는지 확인하여 보자.

 

쿼리입력창에서 sp_helpdb 디비명 하여 정보를 확인. 또는 속성창을 이용하여 확인하자.

 

정상적으로 변경된 것을 확인 할 수 있다.

 

-쿼리 이용하기.

구문

sp_helpdb Test_db --현재 논리적 이름 확인

 

ALTER DATABASE Test_DB

    MODIFY FILE (

    NAME = Test_DB, --현재 논리적 데이터명

    NEWNAME = KSW_DB) --변경할 논리적 데이터명

GO

 

ALTER DATABASE Test_DB

    MODIFY FILE(

    NAME = Test_DB_log, --현재 논리적 로그명

    NEWNAME = KSW_DB_log) -- 변경할 논리적 로그명

go

 

sp_helpdb Test_DB    

 

 

2. DB파일 물리적 이름 변경 및 파일 경로 변경.

 

- SSMS 이용하기.

SSMS에서는 물리적 이름 변경 및 파일 경로는 수정 할 수 없다.

 

- 쿼리 이용하기.

데이터베이스의 물리적 이름 변경 및 파일 경로는 변경하려면 데이터베이스의 상태가 오프라인 이어야 한다.

 

1) 데이터베이스 오프라인 하기.

- SSMS이용하기.

 

 

- 쿼리 이용하기.

ALTER DATABASE Test_DB set OFFLINE

GO

 

새로고침을 하여 오프라인이 되었음을 확인 하자.

 

 

2) 물리적인 파일명 및 경로 변경.

해당 데이터베이스가 오프라인지 확인 한 후 데이터 파일을 다른 곳으로 복사하여 파일 이름을 변경한다.

 

변경 쿼리를 입력하자.

ALTER DATABASE Test_DB

    MODIFY FILE

    (NAME = Test_DB,

    FILENAME = 'c:\Data\KSW_DB.MDF')

GO

 

ALTER DATABASE Test_DB

    MODIFY FILE

    (NAME = Test_DB_log,

    FILENAME = 'c:\Data\KSW_DB_log.LDF')

GO

 

 

데이터베이스를 온라인 시키고 정보가 변경되었는지 확인 하자.

ALTER DATABASE Test_DB set ONLINE

go

 

sp_helpdb Test_DB

 

 

파일 및 파일 그룹 추가 및 삭제.

 

(MSDN 참고:

http://msdn.microsoft.com/ko-kr/library/bb522469.aspx)

 

지난 데이터베이스 생성 강좌에서 한번 다룬 바 있다. 데이터베이스 생성시 파일 그룹을 설정하는 것과 사용방법은 비슷하다.

현업에서는 디스크 및 데이터 분포에 따른 데이터의 분산효과를 위하여 여러 개의 파일 그룹을 만들어서 사용한다. 이미 데이터베이스가 운용 중 이라도 수정 할 수 있다.

 

- SSMS 이용하기.

1) 파일 추가 / 제거

[속성] –[파일] 탭에서 [추가] 버튼을 클릭하여 파일을 추가한다.

파일을 추가 할 때 그룹이 여러 개 있다면 어느 그룹에 파일을 생성 할 것인지 선택한다.

제거는 해당 파일을 선택 후 제거 버튼을 선택한다.

기본 데이터파일과 로그 파일은 삭제되지 않는다.

 

2) 파일 그룹 추가.

[속성] –[파일그룹] 탭에서 [추가] 버튼을 클릭하여 파일그룹을 추가한다.

파일 그룹 제거는 해당 그룹을 선택후 제거 버튼을 선택한다.

기본 그룹인 PRIMARY 는 삭제 되지 않는다. 또한 해당 그룹에 데이터베이스 개체를 가지고 있어도 삭제 되지 않는다.

 

- 쿼리 이용하기.

1) 파일 추가

--데이터 파일 추가

ALTER DATABASE Test_DB

ADD FILE

    (NAME = Test_DB_2,

    -- 물리적 파일이 생성될 경로 파일 이름 지정.

    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Test_DB_2.NDF',

    SIZE = 10MB, --초기 데이터 파일 크기

    MAXSIZE = 50MB, --최대 데이터 파일 크기

    FILEGROWTH = 1MB -- 1 증가 크기

    )

    TO FILEGROUP [PRIMARY] --PRIMARY 그룹에 생성

    

--데이터 로그 추가

ALTER DATABASE Test_DB

ADD LOG FILE

    (NAME = Test_DB_log_2,

    -- 물리적 파일이 생성될 경로 파일 이름 지정.

    FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Test_DB_log_2.LDF',

    SIZE = 10MB, --초기 로그 파일 크기

    MAXSIZE = 50MB, --최대 로그 파일 크기

    FILEGROWTH = 1MB -- 1 증가 크기

    )

    TO FILEGROUP [PRIMARY] --PRIMARY 그룹에 생성

    

sp_helpdb Test_DB

 

 

2) 파일 삭제

-- 파일 삭제

ALTER DATABASE Test_DB

REMOVE FILE Test_DB_2 --데이터 파일의 논리명

go

 

ALTER DATABASE Test_DB

REMOVE FILE Test_DB_log_2 --데이터 파일의 논리명

go

 

 

sp_helpdb Test_db

 

 

2) 파일 그룹 추가

--파일 그룹 추가

ALTER DATABASE Test_DB

ADD FILEGROUP SECOND --SECOND 파일 그룹 생성

 

exec sp_helpfilegroup; -- <-- 파일 그룹 확인 하는 명령어.

 

 

3) 파일 그룹 삭제

--파일 그룹 삭제

ALTER DATABASE Test_DB

REMOVE FILEGROUP SECOND --SECOND 파일 그룹 삭제

 

exec sp_helpfilegroup;

 

4) 파일 그룹 속성 변경

--파일 그룹 속성 변경

ALTER DATABASE Test_DB

MODIFY FILEGROUP SECOND READONLY --읽기전용으로 변경

 

 

파일 그룹의 속성을 변경하기 위해서는 해당 파일 그룹에 하나 이상의 파일이 존재하여야 한다.

 

 

이번 주제는 파일 추가 및 삭제 그리고 데이터 파일의 위치 변경, 파일 그룹의 추가와 삭제에 대하여 알아 보았다.

 

파일그룹은 디스크의 구성에 따라 적절하게 사용하면 많은 성능상의 이점을 가져 온다.

예를들면 데이터 파일과 인덱스 파일을 다른 그룹으로 나누어 각각의 디스크를 활용한다면 IO에 대한 분산을 줄이고 보다 나은 성능을 발휘 할 것이다.

 

 

데이터베이스 관리 – DB명 수정, 파일 크기 수정.

 

데이터베이스를 수정하는 방법과 데이터베이스의 복구 옵션을 알아보고 상황에 맞는 옵션이 어떤 것인지 생각해 보자.

 

DB 수정

 

데이터베에스를 수정하는 방법은 SSMS를 이용하거나 ALTER DATABSE 구문을 이용한다.

 

(MSDN참고

http://msdn.microsoft.com/ko-kr/library/ms174269.aspx)

 

1. DB 이름 변경하기.

현업에서는 거의 사용 할 일이 없지만 (지극히 주관적인 생각이다.) 프로젝트 진행시 테스트 용도 및 백업 용도로 이름을 바꾸어 많이 사용한다. SSMS와 쿼리를 이용하여 이름을 바꾸어 보자.

 

- SSMS 이용하기.

SSMS를 실행하여 이름을 바꿀 해당 DB를 선택한다. [이름 바꾸기] 선택하여 변경 하려는 이름을 입력하면 된다.

 

 

매우 간단하다. 하지만 주의해야 할 것이 있다. 우리가 일반 적으로 사용하는 파일공유의 경우에도 다른 사람이 해당 파일에 접속해 있으면 이름을 바꿀 수가 없다.

현업에서는 데이터베이스 또한 여러 사람이 사용하고 있을 수 있음으로 (여러 서버들의 접속) 이름 변경이 실패한다.

이 때 모든 사람들이 접속을 끊기만 기다리고 있을 것인가? 또한 새로운 사람이 다시 접속 할 수도 있다.

따라서 데이터베이스의 모드를 수정하여 이름 바꾸기를 한다.

[데이터베이스 선택] – [속성] – [옵션] – [Single User]

 

 

 

 

해당 데이터베이스가 [단일 사용자]로 변경된 것을 확인 할 수 있다. 이 상태가 되면 다른사용자가 접속을 할 수가 없음으로 모든 작업이 완료된 뒤에는 항상 [Multi User] 상태로 변경하여야 한다.

잊지 말자! 모든 실수는 사소한 것에서 비롯 된다. (괜히 여러 부서의 미움을 사는 경우가 있다.)

 

[단일 사용자] 모드에 접속이 되는지 확인 해 보자.

 

새 쿼리 창을 열고 해당 데이터베이스를 선택하여 보자. (필자의 경우는 TestDB 이다.)

경고창이 나타난다. 즉 [단일 사용자] 모드 이므로 다른 세션에서 접속을 할 수가 없다.

 

 

 

작업이 완료 되었으면 데이터베이스 상태를 변경하자.

여러 사람이 접속 할 수 있도록 변경한다.

방법은 [Single User]와 동일하나 선택 값을 [Multi_User]로 선택한다.

 

해당 데이터베이스에서 [단일 사용자] 글씨가 없어졌음을 확인 할 수있다.

 

- 쿼리 이용하기.

구문

ALTER DATABASE TestDB SET Single_User

GO

 

 

ALTER DATABASE TestDB

    MODIFY NAME = TestDB_Test

GO

 

 

ALTER DATABASE TestDB_Test set Multi_User

GO

 

 

 

2. DB 사이즈 늘리기.

지난 시간에 데이터베이스 축소에 대해서 알아 보았다. 그렇다면 이번에 사이즈를 늘리는 방법에 대해서 알아보자.

 

지난 번 데이터 베이스 생성 편에서 말 했듯이 초기 데이터베이스를 생성하고 데이터의 크기가 늘어 남에 따라 자동증가 한다고 배웠다. (물론 옵션이 자동증가로 선택되어 있는 경우 해당)

이때 디스크에서 데이터베이스에 디스크를 할당 하는 동안 I/O 이슈로 인한 성능 저하가 발생한다고 하였다.

그래서 정기 점검이나 기타 유휴시간에 디스크를 미리 늘려놓는 계획이 필요하다고 설명하였다.

이제 데이터베이스를 늘려보자.

 

- SSMS 이용하기.

 

현재 데이터베이스의 크기를 확인 해 보자.

필자는 현재 82MB로 되어 있다.

 

DB사이즈를 늘리는 방법은 간단하다. 빨간 색 박스의 숫자를 현재 보다 크게 입력하면 된다.

 

필자는 200MB로 수정하였다. 실제 물리적인 파일이 증가하였는지 알아 보자.

물리적인 파일이 증가한 것을 확인 할 수 있다.

데이터의 증가량을 모니터링 하여 적절한 크기로 변경하여 원할 한 서비스가 되도록 한다.

 

- 쿼리 이용하기.

 

구문

ALTER DATABASE TestDB

    MODIFY FILE (NAME = TestDB, SIZE = 200) –디폴트 단위 MB

GO

 

위와 명령어를 실행하면 200MB로 데이터베이스 사이즈가 늘어 난다.

 

하지만 위의 방법으로 축소를 진행하면 에러가 난다.

현재의 크기보다 작거나 동일 크기를 입력하면 에러가 발생한다.

 

데이터베이스 축소는 앞에서 설명하였던 SHRINK를 사용하여야 한다.

 

보통 서비스 중에는 DB명을 수정한다거나 DB사이즈를 수정하는 일이 많지는 않지만 개발을 하다 보면 많이 사용 될 것이다.

 

앞에서도 이야기 하였지만 데이터베이스의 변경은 항상 주의해서 하여야 한다.

꼭 명심하길 바란다.

데이터베이스 관리 – DB축소

 

데이터베이스를 생성하여 운용하다보면 데이터 사이즈는 증가한다.

하지만 데이터 파일의 모든 크기를 사용하지 않을 수도 있다.

즉, 데이터를 삭제하면 데이터 파일 내에 빈 공간이 존재하게 된다. 만약 하드디스크 공간이 없거나 액세스 범위(물리적인 스캔 위치)를 줄이기 위하여 DB축소 작업을 진행하는데 어떻게 하는 것인지 또한 어떤 종류가 있는지 알아 본다.

 

DB 축소하기.

 

DB의 크기는 데이터베이스를 생성할 때 미리 지정할 수 있다고 배웠다.

(08_데이터베이스 생성 편 참고)

또한 데이터베이스의 자동증가 옵션을 통하여 사용에 따라 지속적으로 데이터베이스의 크기를 증가 할 수 있다고 하였다.

 

그렇다면 DB의 사이즈가 늘기만 할까? 만약 불필요한 데이터를 삭제하여 디스크 공간을 절약하고(이는 디스크 사이즈가 작을 때 사용. 현업에서는 잘 사용하지 않는다.) 또는 빈공간을 제거하여 디스크의 물리적인 파일 위치의 집적도를 높임으로써 스캔의 범위를 줄이고자 할 때에는 어떻게 할까?

 

그래서 DB축소에 대해서 알아 보기로 한다.

 

1. 데이터 베이스를 생성한다. (본 시리즈를 따라 실습하는 독자라면 TestDB가 생성되어 있을 것이다.)

 

TestDB를 생성한다. 필자는 TestDB라는 이름으로 SQL디폴트 값으로 생성하였다.

MDF : 사이즈 2M, 자동증가 1M

LDF : 사이즈 1M, 자동증가 10%

 

 

실제 파일 크기를 확인한다.

 

SSMS에서 확인한 결과와 약간의 오차는 있지만 비슷한 것을 확인 할 수 있다.

 

2. 테스트 테이블을 생성하여 데이터를 입력하여 DB사이즈를 증가 시킨다.

실제 데이터 파일이 증가 된 것을 확인 할 수 있다.

 

 

이런식으로 tbl_Test에 'B'데이터, 'C' 데이터를 입력하자.

 

데이터 사이즈가 늘어 난 것을 확인 할 수 있다.

 

 

현재 tbl_Test의 데이터는 아래의 상태로 들어 있을 것이다.

 

 

3. 데이터를 삭제 한다.

물리적인 파일을 확인 한다.

사이즈가 줄어들지 않았다. 데이터파일이 삭제 되었는데 왜 사이즈가 줄어 들지 않았을까?

실제 DB에서 사용하는 공간을 체크해 보았다.

24.6메가의 여유 공간이 확인 되었다.

 

그런데 왜 사이즈가 줄지 않는 것인가?

현재 tbl_Test의 데이터는 아래의 상태로 들어 있을 것이다.

즉 사용하지 않는 공간 또한 물리적인 데이터 크기로 자리 잡고 있다.

 

 

4. 데이터베이스 축소.

(Msdn 참고

Shrink Database : http://msdn.microsoft.com/ko-kr/library/ms190488(SQL.100).aspx

Shrink File : http://msdn.microsoft.com/ko-kr/library/ms189493(v=SQL.100).aspx

)

 

1)SSMS 사용하기.

해당 DB에서 마우스 오른 쪽 클릭 – [태스크] – [축소] – [데이터베이스 | 파일]

[데이터베이스] : 해당 데이터베이스의 데이터 파일과 로그 파일을 모두 축소 한다.

[파일] : 해당 데이터베이스에 대해 지정한 데이터 또는 로그 파일의 크기를 축소하거나 같은 파일 그룹의 다른 파일로 이동하여 파일을 비우고 데이터베이스에서 제거 한다.

 

 

 

DB사이즈의 축소 테스트 이므로 여유공간 0%를 선택한다. (여유공간을 남기지 않겠다는 뜻이다.)

현업에서는 어느정도 여유공간을 남겨 둠으로써 DB사이즈 증가시 IO의 병목을 줄일 수 있다.

 

데이터 파일의 사이즈가 축소 된 것을 확인 할 수 있다. 물론 실제 파일의 크기 또한 줄어 든 것을 확인 할 수 있다.

 

2) 쿼리 이용하기.

구문

DBCC SHRINKDATABASE

( database_name | database_id | 0

[ , target_percent ]

[ , { NOTRUNCATE | TRUNCATEONLY } ]

)

[ WITH NO_INFOMSGS ]

 

 

NOTRUNCATE 옵션 : 데이터를 정리만 할 뿐 파일의 크기를 줄이지 않는다.

 

TRUNCATEONLY 옵션 : 데이터는 정리하지 않고 뒤의 남는 부분만 줄인다.

 

 

옵션 설정없이 디폴트로 사용하게 되면 위의 NOTRUNCATE 와 TRUNCATEONLY옵션이 차례대로 적용되어 실행 된다.

 

 

이렇게 하여 DB의 축소하는 것을 살펴 보았다.

하지만 과연 현업에서 DB를 축소할 일이 얼마나 있을까?

또한 DB를 축소하고 나면 다른 문제는 발생하지 않을까?

 

필자가 해외 출장에 겪은 일화 이다.

 

아무런 작업을 하지 않는 DB에 퍼포먼스가 나오지 않는다.

실제 DB를 살펴봐도 아무런 작업이나 부하가 없다. 인덱스도 잘 타고 있다.

담당 DBA와 이야기 중에 DB축소 작업을 진행 하였다는 정보를 알아 내었다.

어떤 문제가 있었을까?

 

예를 들어 순차적으로 데이터가 들어 있고 인덱스가 있다고 가정하자.

이때 오래된 데이터를 삭제하면서 공간을 절약하고자 축소작업을 하였다.

데이터가 이동한다. 인덱스의 위치는 어떻게 될까? 데이터의 이동으로 인하여 데이터 순서가 엇갈려 있을 수 있다. 실행계획 상으로는 인덱스를 타고 있지만 물리적으로는 Random I/O 하고 있을지 모른다.

필자는 담당DBA에게 통계 업데이트 및 인덱스 재정렬 작업을 권장하였다.

 

그리고 왠만하면 DB축소 하지 말라고 권고 하였다. (디스크가 500GB넘게 여유 공간이 있는데 왜자꾸 하는지 모르겠다. 주로 아시아 권역이 DB축소를 좋아하는 듯 하다.)

 

DB를 관리하는데 있어서 하나의 기능만을 배워서 적용할 경우 그 파장이 매우 큰 경우가 많다.

항상 여러가지 상황을 염두에 두고 철저한 테스트 및 기술을 습득하여 사용하길 바란다.

 

+ Recent posts