728x90

다음 카페에 자주 안들어가다보니 자료 이관합니다.


출처는 http://www.sqlworld.pe.kr 입니다.


1. Transact-SQL이란?
보통은 줄여서 T-SQL 이라고 표기합니다. SQL Server의 SQL 구문은 ANSI와 ISO에서 정한 ANSI SQL 표준의 최신 버젼인 ANSI SQL-92 의 기준을 따르고 있습니다. 하지만 새로운 기능 수행을 위해 MS사는 새로운 SQL 구문을 추가 하였는데 이를 Transact-SQL 이라고 부릅니다. 이런 이유로 Transact-SQL 구문은 다른 데이터베이스 환경에서 작동되지 않을 확률이 높습니다. 그래서 되도록 ANSI SQL 구문으로 작성이 가능한것을 Transact-SQL 구문으로 작성하는 것은 바람직하지 않다고 생각합니다.
※ ANSI : American National Standards Institute / ISO : International Standards Organization
2. SQL 구문의 종류
SQL 구문은 그 기능에 따라 다음과 같이 세가지로 크게 분류 할 수 있습니다.
o DCL(Data Control Language)
o DDL(Data Definition Language)
o DML(Data Manipulation Language)

이 세가지 분류를 필히 기억할 필요는 없지만 종종 언급이 되는 교재들이 있으므로 알고있으면 도움이 될 것같습니다. Transact-SQL문에 대한 자세한 사용 방법은 앞으로 많은 시간을 할애하여 설명할 예정입니다.
1) DCL(Data Control Language)
데이터베이스 사용자와 Role에 대하여 권한을 지정하거나 제거할 사용하는 SQL 구문을 가리킵니다.
※ Role : SQL Server 7.0에서 새로 등장했으며, 그룹의 의미와 권한들의 집합의 의미를 가지고 있습니다. Windows NT나 Windows 2000에서 그룹을 정하여 권한을 할당하고 이 그룹에 사용자 계정을 포함하여 관리함으로써 관리의 용이성을 기한 것처럼 SQL Server에서는 Role을 사용 할 수 있습니다.
권한을 설정하는 SQL 구문에는 다음과 같이 GRANT, DENY, REVOKE 세가지가 있습니다.




다음의 예에서는 Jangrae라는 사용자 계정에 Pubs 데이터베이스의 Titles 테이블을 SELECT 할 수 있는 권한을 부여하고 있습니다.




SQL Server에서는 관리의 편의를 위하여 많은 도구들이 제공되고 있습니다. 이러한 도구들을 이용하여 굳이 SQL 문을 사용하지 않더라고 대부분의 작업을 할 수 있습니다. 예를 들어 위 예의 경우 권한을 설정하는 것은 EM(Enterprise Manager)를 이용하여 쉽게 작업을 할 수 있습니다. 하지만 배우는 과정에서는 되도록 SQL문을 직접 작성해서 수행해 보는 것이 많은 도움이 될거라 생각합니다. SQL을 통하여 작업하는 것이 숙달이 되면 시간 절약을 위해서 EM을 사용하는 것이 현명하다고 생각합니다. 처음부터 EM을 사용하여 작업을 하게 되면 수행되는 작업에 대한 내부적인 처리 내용을 정확하게 이해 할 수 없게 되며, 만일 EM에 문제가 발생하면 SQL 구분을 모르면 아무 작업도 할 수 없게 될 수도 있기 때문입니다.
2) DDL(Data Definition Language)
CREATE DATABASE 와 같이 데이터베이스, 테이블 또는 기타 오브젝트를 생성할 때 사용되는 SQL 구문으로 다음을 포함합니다.
o CREATE
o ALTER
o DROP

다음의 예에서는 MyDB 데이터베이스에 Friend 테이블을 생성하고 있습니다.




CREATE를 통해서 만들어진 것은 ALTER를 통해서 변경이 가능하며, DROP을 통해서 삭제 할 수 있습니다. 그래서 CREATE관련된 내용을 배울 때ALTER와 DROP 구문을 항상 같이 배우게 됩니다.
3) DML(Data Manipulation Language)
데이터를 검색하거나 수정 및 삭제 할 수 있는 SQL 구문으로 앞으로 가장 많이 사용하게 될 SQL 문이라 할 수 있으며 다음을 포함합니다.
o SELECT
o INSERT
o UPDATE
o DELETE

다음의 예에서는 Pubs 데이터베이스의 Titles 테이블의 모든 내용을 검색하고 있습니다.



 
728x90
728x90

다음 카페에 자주 안들어가다보니 자료 이관합니다.


출처는 http://www.sqlworld.pe.kr 입니다.

 

SQL Server 7.0 이전의 버젼에서는 데이터베이스를 만드는 과정과 관리하는 방법이 상당이 까다로웠습니다. 우선 디바이스를 만들고 그 안에 데이터베이스를 만들어야 했습니다. 그리고 필요에 따라 적당한 사이즈로 늘려 주어야 했으며, 한번 늘린 사이즈는 다시 줄이기가 너무 힘들었습니다. 하지만 SQL 7.0 버젼 부터는 그렇지 않습니다. 곧바로 원하는 사이즈로 데이터베이스를 만들 수 있으며, 사이즈는 자동으로 필요한 때에 증가가 되도록 할 수 있었으며 필요한 경우 사이즈를 줄일 수도 있습니다.

이제 곧 우리는 데이터베이스를 만들어보게 됩니다. 그 전에 데이터베이스가 무엇인지, 그리고 어떻게 구성이 되어 있는지 살펴보도록 하겠습니다.

1. 데이터베이스란?

데이터베이스란 무엇이가를 저장해 두는 곳이라고 우선 정의할수 있습니다. 이때 무엇인가에 포함되는 것은 테이블(Table), 뷰(View), 인덱스(Index), 저장 프로시져(Stored Procedure), 트리거(Trigger)와 같은 객체(Object)들 입니다.데이터베이스의 객체에 대해서는 예전에 간략하게 설명한적이 있습니다. 머지 않아 각각의 객체들에 대해서 엄청 많이 이야기하게 될것 같습니다.

2. 데이터베이스를 구성하는 파일

SQL Server의 데이터베이스는 운영체제 상에서 보면 확장자가 mdf(또는 ndf)와 ldf 인 파일로 존재하게 됩니다. 예를 들어 연습용 데이터베이스인 pubs 데이터베이스의 경우는 pubs.mdf와 pubs_log.ldf 두개의 파일이 존재합니다.

데이터베이스는 데이터와 로그로 분리되어 저장됩니다. 데이터의 경우는 mdf 확장자(또는 ndf)를 갖으며, 로그의 경우는 ldf 확장자를 갖고 저장됩니다. 확장자(mdf, ndf, ldf)는 반드시 정해진 것이 아니며 원하는 경우 바꿀 수가 있지만 되도록 그대로 사용하는것이 바람직합니다. 확장자를 봄으로써 어떤 역할을 하는 파일인지 구분을 할 수 있기 때문입니다. 만일 pubs.mdf를 pubs.doc 으로 한다면 워드파일이지 데이터 파일이라고 생각 할 수 없기 때문입니다.(만든 사람만 알 수 있겠지요)

다음의 그림은 데이터베이스의 구조를 간단히 보여주고 있습니다.

1) 데이터 파일(*.mdf, *.ndf)

실제 자료를 저장합니다. 기본적으로 데이터 파일은 하나만 있어도 되지만 필요하면 더 만들 수 있습니다. 처음 만들어진 파일이 mdf 확장자를 갖게 되며 추가되는 파일은 확장자가 ndf 가 됩니다.

2) 로그 파일(*.ldf)

로그는 트랜잭션 처리와 시스템에 문제가 발생했을 때 복구를 위해 사용됩니다. 보통 데이터 파일의 25% 정도의 사이즈를 갖습니다.

3. Page와 Extents

저는 계산하는 것을 참 싫어 합니다. 하지만 여기서는 약간의 계산을 해보고자 합니다.

1) Page

데이터는 8KB 단위의 블럭을 단위로 저장되는데 이를 페이지(Page)라고 합니다. 결과적으로 데이터베이스는 1MB에는 128Page를 저장 할 수 있게됩니다. 하나의 Row는 여러개의 Page에 걸쳐 저장 될 수 없고 단 하나의 Page에만 저장 될 수 있습니다. 이 사실을 통해 하나의 Row(데이터 레코드로 생각하셔도 됩니다.)의 최대 사이즈는 8060 바이트입니다. 계산해보면 8 X 1024 는 8192 입니다. 하지만 8192바이트를 Row가 전부 차지하지 못하는 이유는 몇가지 정보를 저장하기 위한 약간의 공간(8192 - 8060 = 132)이 필요하기 때문입니다. 간단히 설명한다면 페이지 헤더가 이 공간중에 96KB를 사용하게 되고 나머지는 각 Row가 저장되고 관리되기 위한 몇몇 정보를 기록하는데 사용됩니다.

2) Extent

테이블과 인덱스는 Extent에 저장됩니다. Extent란 8개의 연속된 페이지를 가리킵니다. 1 Page가 8KB 이므로 1 Extent는 64KB(8 KB X 8) 입니다.

와우!
이제 데이터베이스를 만들어 봅시다!

SQL Server 7.0 이전의 버젼에서는 데이터베이스를 만드는 과정과 관리하는 방법이 상당이 까다로웠습니다. 우선 디바이스를 만들고 그 안에 데이터베이스를 만들어야 했습니다. 그리고 필요에 따라 적당한 사이즈로 늘려 주어야 했으며, 한번 늘린 사이즈는 다시 줄이기가 너무 힘들었습니다. 하지만 SQL 7.0 버젼 부터는 그렇지 않습니다. 곧바로 원하는 사이즈로 데이터베이스를 만들 수 있으며, 사이즈는 자동으로 필요한 때에 증가가 되도록 할 수 있었으며 필요한 경우 사이즈를 줄일 수도 있습니다.

이제 곧 우리는 데이터베이스를 만들어보게 됩니다. 그 전에 데이터베이스가 무엇인지, 그리고 어떻게 구성이 되어 있는지 살펴보도록 하겠습니다.

1. 데이터베이스란?

데이터베이스란 무엇이가를 저장해 두는 곳이라고 우선 정의할수 있습니다. 이때 무엇인가에 포함되는 것은 테이블(Table), 뷰(View), 인덱스(Index), 저장 프로시져(Stored Procedure), 트리거(Trigger)와 같은 객체(Object)들 입니다.데이터베이스의 객체에 대해서는 예전에 간략하게 설명한적이 있습니다. 머지 않아 각각의 객체들에 대해서 엄청 많이 이야기하게 될것 같습니다.

2. 데이터베이스를 구성하는 파일

SQL Server의 데이터베이스는 운영체제 상에서 보면 확장자가 mdf(또는 ndf)와 ldf 인 파일로 존재하게 됩니다. 예를 들어 연습용 데이터베이스인 pubs 데이터베이스의 경우는 pubs.mdf와 pubs_log.ldf 두개의 파일이 존재합니다.

데이터베이스는 데이터와 로그로 분리되어 저장됩니다. 데이터의 경우는 mdf 확장자(또는 ndf)를 갖으며, 로그의 경우는 ldf 확장자를 갖고 저장됩니다. 확장자(mdf, ndf, ldf)는 반드시 정해진 것이 아니며 원하는 경우 바꿀 수가 있지만 되도록 그대로 사용하는것이 바람직합니다. 확장자를 봄으로써 어떤 역할을 하는 파일인지 구분을 할 수 있기 때문입니다. 만일 pubs.mdf를 pubs.doc 으로 한다면 워드파일이지 데이터 파일이라고 생각 할 수 없기 때문입니다.(만든 사람만 알 수 있겠지요)

다음의 그림은 데이터베이스의 구조를 간단히 보여주고 있습니다.

1) 데이터 파일(*.mdf, *.ndf)

실제 자료를 저장합니다. 기본적으로 데이터 파일은 하나만 있어도 되지만 필요하면 더 만들 수 있습니다. 처음 만들어진 파일이 mdf 확장자를 갖게 되며 추가되는 파일은 확장자가 ndf 가 됩니다.

2) 로그 파일(*.ldf)

로그는 트랜잭션 처리와 시스템에 문제가 발생했을 때 복구를 위해 사용됩니다. 보통 데이터 파일의 25% 정도의 사이즈를 갖습니다.

3. Page와 Extents

저는 계산하는 것을 참 싫어 합니다. 하지만 여기서는 약간의 계산을 해보고자 합니다.

1) Page

데이터는 8KB 단위의 블럭을 단위로 저장되는데 이를 페이지(Page)라고 합니다. 결과적으로 데이터베이스는 1MB에는 128Page를 저장 할 수 있게됩니다. 하나의 Row는 여러개의 Page에 걸쳐 저장 될 수 없고 단 하나의 Page에만 저장 될 수 있습니다. 이 사실을 통해 하나의 Row(데이터 레코드로 생각하셔도 됩니다.)의 최대 사이즈는 8060 바이트입니다. 계산해보면 8 X 1024 는 8192 입니다. 하지만 8192바이트를 Row가 전부 차지하지 못하는 이유는 몇가지 정보를 저장하기 위한 약간의 공간(8192 - 8060 = 132)이 필요하기 때문입니다. 간단히 설명한다면 페이지 헤더가 이 공간중에 96KB를 사용하게 되고 나머지는 각 Row가 저장되고 관리되기 위한 몇몇 정보를 기록하는데 사용됩니다.

2) Extent

테이블과 인덱스는 Extent에 저장됩니다. Extent란 8개의 연속된 페이지를 가리킵니다. 1 Page가 8KB 이므로 1 Extent는 64KB(8 KB X 8) 입니다.

와우!
이제 데이터베이스를 만들어 봅시다!

728x90
728x90

다음 카페에 자주 안들어가다보니 자료 이관합니다.


출처는 http://www.sqlworld.pe.kr 입니다.

지금까지는 개념을 이해하기 위한 이론에 치우친 강좌었습니다. 하지만 이제부터는 직접 무엇인가를 해보면서 결과를 볼 수 있는 강좌가 이루어지게 됩니다. 중간 중간에 기록된 [예제]를 꼭 실습해 가면서 모든 내용을 자신의 것으로 만들어 보시기 바랍니다. 그냥 눈으로 보면서 "아..그렇게 되겠구나" 라고 추측만하고 지나가시면 금방 잊어 버리게 됩니다. SQL Server를 처음으로 접하시는 분중에 실습을 할 환경이 갖추어지신 분들은 꼭 실습을 하시면서 공부를 하시기 바랍니다. 실제 업무를 대신 할 수 있는 것은 실습 뿐이기 때문입니다.

자, 실습할 준비가 되셨나요?

1. 데이터베이스 생성 원리

CREATE DATABASE 문을 이용하여 데이터베이스를 만들게 되면 SQL Server는 Model 데이터베이스를 복사함으로써 만들려고 하는 데이터베이스와 이와 관련된 메타데이터(데이터베이스에 대한 정보)를 초기화합니다. 이러한 Model 데이터베이스의 특성을 이용해서 특정한 테이블(Table), 뷰(View), 저장 프로시저(Stored Procedure), 데이터 형식(Data Type)등을 Model 데이터베이스에 미리 만들어 놓으면 새로 만들어지는 모든 데이터베이스에 이러한 객체들이 포함되게 할 수 있습니다.


[그림 1]

2. 데이터베이스 만들기

SQL Server에서 데이터베이스를 만드는 방법은 다음의 세가지가 있습니다.

o EM(Enterprise Manager) 사용
o 마법사 사용
o 쿼리문(CREATE DATABASE) 사용

우선 쿼리문을 이용해서 공부를 하시고 익숙해지면 EM을 사용하시기를 권합니다. 가끔은 EM을 사용할 수 없는 상황에서 작업을 해야하는 경우가 있기 때문입니다. 마법사(Wizard)의 경우는 아직 잘 모를 때 빨리 특정 작업을 수행하고자 하는 경우에(하지만 꼭 마법사를 이용해야 하는 경우도 있습니다.) 사용하시기를 권합니다.

1) EM(Enterprise Manager) 이용한 데이터베이스 생성

[그림 2] 처럼 해당 SQL Server에서 마우스 오른쪽 버튼을 눌러 [새로만들기(N)] 에서 [데이터베이스(D)...]을 선택하시면 [그림 3] 처럼 데이터베이스를 만드는 화면이 표시됩니다.


[그림 2]


[그림 3]

위 [그림 3]의 경우는 Sample 데이터베이스를 만드는 화면에서 3가지 탭의 화면을 한번에 보여주고 있습니다. 각 항목에 대한 자세한 설명은 쿼리문을 이용한 데이터베이스 생성방법에서 설명되어집니다.

2) CREATE DATABASE문을 이용한 데이터베이스 생성

드디어 처음으로 쿼리문을 배우게 되었습니다. CREATE DATABASE는 데이터베이스의 이름과 사이즈 및 파일을 지정하여 데이터베이스를 만드는 구문입니다. 자세한 문법을 알고자 한다면 Books Online을 참고해 주시기 바랍니다. 여기서는 예를 들어서 설명하도록 하겠습니다.

[예제1]

다음의 예제는 MyDB를 만드는 예입니다. 우선 다음 항목들을 이해하시고 예제를 보시기바랍니다.

o NAME : 내부적으로 사용될 데이터베이스 파일의 놀리적인 이름
o FILENAME : 데이터베이스 파일의 물리적인 위치와 파일명
o SIZE : 데이터베이스의 초기 사이즈
o MAXSIZE : 데이터베이스가 증가될 수 있는 최대 사이즈, 지정되지 않으면 하드디스크가 허용하는한 무작정 사이즈 증가.
o FILEGROWTH : 데이터베이스 공간이 부족할 떄 자동으로 증가하게되는 사이즈

USE master
GO

CREATE DATABASE MyDB
ON
(NAME = MyDB_Data,
FILENAME = 'D:\Data\MyDB.mdf',
SIZE = 10MB,
MAXSIZE = 40MB,
FILEGROWTH = 5MB )

LOG ON
(NAME = MyDB_Log,
FILENAME = 'D:\Data\MyDB.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB)

GO

[설명]

o 우선 D:\Data 폴더가 존재하고 있어야 합니다. 그렇지 않으면 오류가 발생합니다.
o 실제 OS상에서 데이터는 MyDB.mdf로 로그는 MyDB.ldf로 D:\Data 폴더에 저장합니다.
o Mydb.mdf와 MyDB.ldf는 SQL Server 내에서는 MyDB_Data와 MyDB_Log라는 이름으로 관리됩니다.
o 만들어지는 데이터베이스의 사이즈는 10MB이며, 40MB까지 5MB씩 증가 할 수 있습니다.
o 로그의 경우는 처음 5MB 사이즈로 만들어지고 25MB까지 5MB씩 증가 할 수 있습니다.
o 위에서 제시한 MAXSIZE데 도달하면 더이상 데이터 기록이 불가능합니다. MAXSIZE를 지정하지 않으면 디스크가 허용하는 한 무작정 증가합니다.

데이터베이스 생성에 대한 예제를 두개 더 들어보고자 합니다. 앞에서의 예제와 비교해서 달라지는 부분을 자세히 살펴보시기 바랍니다.

[예제2]

USE master
GO

CREATE DATABASE Products
ON
(NAME = Products_Data,
FILENAME = 'D:\data\products.mdf',
SIZE = 4MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB)

GO

[설명]

o 실제 OS상에서 데이터는 products.mdf로 폴더에 저장합니다.
o 로그가 지정되지 않았으므로 자동으로 SQL Server는 D:\Data 폴더에 products_log.ldf 로그 파일을 만듭니다.
o products.mdf는 SQL Server 내에서는 products_Data로 관리되며 products_log.ldf는 products_Log라는 이름으로 관리됩니다.
o 만들어지는 데이터의 사이즈는 4MB이며, 10MB까지 1MB씩 증가 할 수 있습니다.
o 로그는 지정되지 않았으므로 자동으로 처음 1MB정도(데이터베이스의 25%)사이즈로 만들어지고 필요한 경우 하드디스크가 허용하는한 10% 씩 증가하게 됩니다.

[예제3]

USE master
GO

CREATE DATABASE Products2

GO

[설명]

o 폴더가 지정되지 않았으므로 SQL Server 가 설치될 때의 기본 Data 폴더에 만들어집니다.
o 실제 OS상에서 데이터는 자동으로 products2.mdf, products2_log.ldf라는 이름으로 기본 Data 폴더에 저장합니다.
o products2.mdf는 SQL Server 내에서는 products2로 관리되며 products2_log.ldf는 products2_Log라는 이름으로 관리됩니다.
o 데이터의 사이즈는 지정되지 않았으므로 Model 데이터베이스(768KB)의 사이즈와같습니다. 필요한 경우 디스크가 허락하는 한 10%씩 무작정 증가 하게됩니다.
o 로그의 사이즈는 지정되지 않았으므로 자동으로 0.5MB 사이즈로 만들어지고 필요한 경우 하드디스크가 허용하는한 10% 씩 증가하게 됩니다.

※ SIZE 및 MAXSIZE의 기본 단위는 MB이므로 MB는 생략가능합니다. 하지만 KB를 사용할 경우 KB는 필히 지정해야 합니다. FILEGROWTH는 %를 표시하여 사용 할 수 있습니다. 하지만 기본 단위는 MB이므로 MB는 생락이 가능하지만 %로 지정하고자 하면 필히 %를 입력해야 합니다. FILEGROWTH는 하나의 Extent가 64KB이므로 최소한 64KB이상 지정되어야 합니다.

지금까지는 개념을 이해하기 위한 이론에 치우친 강좌었습니다. 하지만 이제부터는 직접 무엇인가를 해보면서 결과를 볼 수 있는 강좌가 이루어지게 됩니다. 중간 중간에 기록된 [예제]를 꼭 실습해 가면서 모든 내용을 자신의 것으로 만들어 보시기 바랍니다. 그냥 눈으로 보면서 "아..그렇게 되겠구나" 라고 추측만하고 지나가시면 금방 잊어 버리게 됩니다. SQL Server를 처음으로 접하시는 분중에 실습을 할 환경이 갖추어지신 분들은 꼭 실습을 하시면서 공부를 하시기 바랍니다. 실제 업무를 대신 할 수 있는 것은 실습 뿐이기 때문입니다.

자, 실습할 준비가 되셨나요?

1. 데이터베이스 생성 원리

CREATE DATABASE 문을 이용하여 데이터베이스를 만들게 되면 SQL Server는 Model 데이터베이스를 복사함으로써 만들려고 하는 데이터베이스와 이와 관련된 메타데이터(데이터베이스에 대한 정보)를 초기화합니다. 이러한 Model 데이터베이스의 특성을 이용해서 특정한 테이블(Table), 뷰(View), 저장 프로시저(Stored Procedure), 데이터 형식(Data Type)등을 Model 데이터베이스에 미리 만들어 놓으면 새로 만들어지는 모든 데이터베이스에 이러한 객체들이 포함되게 할 수 있습니다.


[그림 1]

2. 데이터베이스 만들기

SQL Server에서 데이터베이스를 만드는 방법은 다음의 세가지가 있습니다.

o EM(Enterprise Manager) 사용
o 마법사 사용
o 쿼리문(CREATE DATABASE) 사용

우선 쿼리문을 이용해서 공부를 하시고 익숙해지면 EM을 사용하시기를 권합니다. 가끔은 EM을 사용할 수 없는 상황에서 작업을 해야하는 경우가 있기 때문입니다. 마법사(Wizard)의 경우는 아직 잘 모를 때 빨리 특정 작업을 수행하고자 하는 경우에(하지만 꼭 마법사를 이용해야 하는 경우도 있습니다.) 사용하시기를 권합니다.

1) EM(Enterprise Manager) 이용한 데이터베이스 생성

[그림 2] 처럼 해당 SQL Server에서 마우스 오른쪽 버튼을 눌러 [새로만들기(N)] 에서 [데이터베이스(D)...]을 선택하시면 [그림 3] 처럼 데이터베이스를 만드는 화면이 표시됩니다.


[그림 2]


[그림 3]

위 [그림 3]의 경우는 Sample 데이터베이스를 만드는 화면에서 3가지 탭의 화면을 한번에 보여주고 있습니다. 각 항목에 대한 자세한 설명은 쿼리문을 이용한 데이터베이스 생성방법에서 설명되어집니다.

2) CREATE DATABASE문을 이용한 데이터베이스 생성

드디어 처음으로 쿼리문을 배우게 되었습니다. CREATE DATABASE는 데이터베이스의 이름과 사이즈 및 파일을 지정하여 데이터베이스를 만드는 구문입니다. 자세한 문법을 알고자 한다면 Books Online을 참고해 주시기 바랍니다. 여기서는 예를 들어서 설명하도록 하겠습니다.

[예제1]

다음의 예제는 MyDB를 만드는 예입니다. 우선 다음 항목들을 이해하시고 예제를 보시기바랍니다.

o NAME : 내부적으로 사용될 데이터베이스 파일의 놀리적인 이름
o FILENAME : 데이터베이스 파일의 물리적인 위치와 파일명
o SIZE : 데이터베이스의 초기 사이즈
o MAXSIZE : 데이터베이스가 증가될 수 있는 최대 사이즈, 지정되지 않으면 하드디스크가 허용하는한 무작정 사이즈 증가.
o FILEGROWTH : 데이터베이스 공간이 부족할 떄 자동으로 증가하게되는 사이즈

USE master
GO

CREATE DATABASE MyDB
ON
(NAME = MyDB_Data,
FILENAME = 'D:\Data\MyDB.mdf',
SIZE = 10MB,
MAXSIZE = 40MB,
FILEGROWTH = 5MB )

LOG ON
(NAME = MyDB_Log,
FILENAME = 'D:\Data\MyDB.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB)

GO

[설명]

o 우선 D:\Data 폴더가 존재하고 있어야 합니다. 그렇지 않으면 오류가 발생합니다.
o 실제 OS상에서 데이터는 MyDB.mdf로 로그는 MyDB.ldf로 D:\Data 폴더에 저장합니다.
o Mydb.mdf와 MyDB.ldf는 SQL Server 내에서는 MyDB_Data와 MyDB_Log라는 이름으로 관리됩니다.
o 만들어지는 데이터베이스의 사이즈는 10MB이며, 40MB까지 5MB씩 증가 할 수 있습니다.
o 로그의 경우는 처음 5MB 사이즈로 만들어지고 25MB까지 5MB씩 증가 할 수 있습니다.
o 위에서 제시한 MAXSIZE데 도달하면 더이상 데이터 기록이 불가능합니다. MAXSIZE를 지정하지 않으면 디스크가 허용하는 한 무작정 증가합니다.

데이터베이스 생성에 대한 예제를 두개 더 들어보고자 합니다. 앞에서의 예제와 비교해서 달라지는 부분을 자세히 살펴보시기 바랍니다.

[예제2]

USE master
GO

CREATE DATABASE Products
ON
(NAME = Products_Data,
FILENAME = 'D:\data\products.mdf',
SIZE = 4MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB)

GO

[설명]

o 실제 OS상에서 데이터는 products.mdf로 폴더에 저장합니다.
o 로그가 지정되지 않았으므로 자동으로 SQL Server는 D:\Data 폴더에 products_log.ldf 로그 파일을 만듭니다.
o products.mdf는 SQL Server 내에서는 products_Data로 관리되며 products_log.ldf는 products_Log라는 이름으로 관리됩니다.
o 만들어지는 데이터의 사이즈는 4MB이며, 10MB까지 1MB씩 증가 할 수 있습니다.
o 로그는 지정되지 않았으므로 자동으로 처음 1MB정도(데이터베이스의 25%)사이즈로 만들어지고 필요한 경우 하드디스크가 허용하는한 10% 씩 증가하게 됩니다.

[예제3]

USE master
GO

CREATE DATABASE Products2

GO

[설명]

o 폴더가 지정되지 않았으므로 SQL Server 가 설치될 때의 기본 Data 폴더에 만들어집니다.
o 실제 OS상에서 데이터는 자동으로 products2.mdf, products2_log.ldf라는 이름으로 기본 Data 폴더에 저장합니다.
o products2.mdf는 SQL Server 내에서는 products2로 관리되며 products2_log.ldf는 products2_Log라는 이름으로 관리됩니다.
o 데이터의 사이즈는 지정되지 않았으므로 Model 데이터베이스(768KB)의 사이즈와같습니다. 필요한 경우 디스크가 허락하는 한 10%씩 무작정 증가 하게됩니다.
o 로그의 사이즈는 지정되지 않았으므로 자동으로 0.5MB 사이즈로 만들어지고 필요한 경우 하드디스크가 허용하는한 10% 씩 증가하게 됩니다.

※ SIZE 및 MAXSIZE의 기본 단위는 MB이므로 MB는 생략가능합니다. 하지만 KB를 사용할 경우 KB는 필히 지정해야 합니다. FILEGROWTH는 %를 표시하여 사용 할 수 있습니다. 하지만 기본 단위는 MB이므로 MB는 생락이 가능하지만 %로 지정하고자 하면 필히 %를 입력해야 합니다. FILEGROWTH는 하나의 Extent가 64KB이므로 최소한 64KB이상 지정되어야 합니다.

지금까지는 개념을 이해하기 위한 이론에 치우친 강좌었습니다. 하지만 이제부터는 직접 무엇인가를 해보면서 결과를 볼 수 있는 강좌가 이루어지게 됩니다. 중간 중간에 기록된 [예제]를 꼭 실습해 가면서 모든 내용을 자신의 것으로 만들어 보시기 바랍니다. 그냥 눈으로 보면서 "아..그렇게 되겠구나" 라고 추측만하고 지나가시면 금방 잊어 버리게 됩니다. SQL Server를 처음으로 접하시는 분중에 실습을 할 환경이 갖추어지신 분들은 꼭 실습을 하시면서 공부를 하시기 바랍니다. 실제 업무를 대신 할 수 있는 것은 실습 뿐이기 때문입니다.

자, 실습할 준비가 되셨나요?

1. 데이터베이스 생성 원리

CREATE DATABASE 문을 이용하여 데이터베이스를 만들게 되면 SQL Server는 Model 데이터베이스를 복사함으로써 만들려고 하는 데이터베이스와 이와 관련된 메타데이터(데이터베이스에 대한 정보)를 초기화합니다. 이러한 Model 데이터베이스의 특성을 이용해서 특정한 테이블(Table), 뷰(View), 저장 프로시저(Stored Procedure), 데이터 형식(Data Type)등을 Model 데이터베이스에 미리 만들어 놓으면 새로 만들어지는 모든 데이터베이스에 이러한 객체들이 포함되게 할 수 있습니다.


[그림 1]

2. 데이터베이스 만들기

SQL Server에서 데이터베이스를 만드는 방법은 다음의 세가지가 있습니다.

o EM(Enterprise Manager) 사용
o 마법사 사용
o 쿼리문(CREATE DATABASE) 사용

우선 쿼리문을 이용해서 공부를 하시고 익숙해지면 EM을 사용하시기를 권합니다. 가끔은 EM을 사용할 수 없는 상황에서 작업을 해야하는 경우가 있기 때문입니다. 마법사(Wizard)의 경우는 아직 잘 모를 때 빨리 특정 작업을 수행하고자 하는 경우에(하지만 꼭 마법사를 이용해야 하는 경우도 있습니다.) 사용하시기를 권합니다.

1) EM(Enterprise Manager) 이용한 데이터베이스 생성

[그림 2] 처럼 해당 SQL Server에서 마우스 오른쪽 버튼을 눌러 [새로만들기(N)] 에서 [데이터베이스(D)...]을 선택하시면 [그림 3] 처럼 데이터베이스를 만드는 화면이 표시됩니다.


[그림 2]


[그림 3]

위 [그림 3]의 경우는 Sample 데이터베이스를 만드는 화면에서 3가지 탭의 화면을 한번에 보여주고 있습니다. 각 항목에 대한 자세한 설명은 쿼리문을 이용한 데이터베이스 생성방법에서 설명되어집니다.

2) CREATE DATABASE문을 이용한 데이터베이스 생성

드디어 처음으로 쿼리문을 배우게 되었습니다. CREATE DATABASE는 데이터베이스의 이름과 사이즈 및 파일을 지정하여 데이터베이스를 만드는 구문입니다. 자세한 문법을 알고자 한다면 Books Online을 참고해 주시기 바랍니다. 여기서는 예를 들어서 설명하도록 하겠습니다.

[예제1]

다음의 예제는 MyDB를 만드는 예입니다. 우선 다음 항목들을 이해하시고 예제를 보시기바랍니다.

o NAME : 내부적으로 사용될 데이터베이스 파일의 놀리적인 이름
o FILENAME : 데이터베이스 파일의 물리적인 위치와 파일명
o SIZE : 데이터베이스의 초기 사이즈
o MAXSIZE : 데이터베이스가 증가될 수 있는 최대 사이즈, 지정되지 않으면 하드디스크가 허용하는한 무작정 사이즈 증가.
o FILEGROWTH : 데이터베이스 공간이 부족할 떄 자동으로 증가하게되는 사이즈

USE master
GO

CREATE DATABASE MyDB
ON
(NAME = MyDB_Data,
FILENAME = 'D:\Data\MyDB.mdf',
SIZE = 10MB,
MAXSIZE = 40MB,
FILEGROWTH = 5MB )

LOG ON
(NAME = MyDB_Log,
FILENAME = 'D:\Data\MyDB.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB)

GO

[설명]

o 우선 D:\Data 폴더가 존재하고 있어야 합니다. 그렇지 않으면 오류가 발생합니다.
o 실제 OS상에서 데이터는 MyDB.mdf로 로그는 MyDB.ldf로 D:\Data 폴더에 저장합니다.
o Mydb.mdf와 MyDB.ldf는 SQL Server 내에서는 MyDB_Data와 MyDB_Log라는 이름으로 관리됩니다.
o 만들어지는 데이터베이스의 사이즈는 10MB이며, 40MB까지 5MB씩 증가 할 수 있습니다.
o 로그의 경우는 처음 5MB 사이즈로 만들어지고 25MB까지 5MB씩 증가 할 수 있습니다.
o 위에서 제시한 MAXSIZE데 도달하면 더이상 데이터 기록이 불가능합니다. MAXSIZE를 지정하지 않으면 디스크가 허용하는 한 무작정 증가합니다.

데이터베이스 생성에 대한 예제를 두개 더 들어보고자 합니다. 앞에서의 예제와 비교해서 달라지는 부분을 자세히 살펴보시기 바랍니다.

[예제2]

USE master
GO

CREATE DATABASE Products
ON
(NAME = Products_Data,
FILENAME = 'D:\data\products.mdf',
SIZE = 4MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB)

GO

[설명]

o 실제 OS상에서 데이터는 products.mdf로 폴더에 저장합니다.
o 로그가 지정되지 않았으므로 자동으로 SQL Server는 D:\Data 폴더에 products_log.ldf 로그 파일을 만듭니다.
o products.mdf는 SQL Server 내에서는 products_Data로 관리되며 products_log.ldf는 products_Log라는 이름으로 관리됩니다.
o 만들어지는 데이터의 사이즈는 4MB이며, 10MB까지 1MB씩 증가 할 수 있습니다.
o 로그는 지정되지 않았으므로 자동으로 처음 1MB정도(데이터베이스의 25%)사이즈로 만들어지고 필요한 경우 하드디스크가 허용하는한 10% 씩 증가하게 됩니다.

[예제3]

USE master
GO

CREATE DATABASE Products2

GO

[설명]

o 폴더가 지정되지 않았으므로 SQL Server 가 설치될 때의 기본 Data 폴더에 만들어집니다.
o 실제 OS상에서 데이터는 자동으로 products2.mdf, products2_log.ldf라는 이름으로 기본 Data 폴더에 저장합니다.
o products2.mdf는 SQL Server 내에서는 products2로 관리되며 products2_log.ldf는 products2_Log라는 이름으로 관리됩니다.
o 데이터의 사이즈는 지정되지 않았으므로 Model 데이터베이스(768KB)의 사이즈와같습니다. 필요한 경우 디스크가 허락하는 한 10%씩 무작정 증가 하게됩니다.
o 로그의 사이즈는 지정되지 않았으므로 자동으로 0.5MB 사이즈로 만들어지고 필요한 경우 하드디스크가 허용하는한 10% 씩 증가하게 됩니다.

※ SIZE 및 MAXSIZE의 기본 단위는 MB이므로 MB는 생략가능합니다. 하지만 KB를 사용할 경우 KB는 필히 지정해야 합니다. FILEGROWTH는 %를 표시하여 사용 할 수 있습니다. 하지만 기본 단위는 MB이므로 MB는 생락이 가능하지만 %로 지정하고자 하면 필히 %를 입력해야 합니다. FILEGROWTH는 하나의 Extent가 64KB이므로 최소한 64KB이상 지정되어야 합니다.

728x90
728x90

다음 카페에 자주 안들어가다보니 자료 이관합니다.


출처는 http://www.sqlworld.pe.kr 입니다.

제가 가장 먼저 접했던 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
728x90

+ Recent posts