파일 및 파일 그룹 아키텍처
SQL Server에서 데이터베이스는 운영 체제 파일 집합에 매핑됩니다. 데이터와 로그 정보는 같은 파일에 함께 저장되지 않으며 각 파일은 한 데이터베이스에만 사용됩니다. 파일 그룹은 명명된 파일 모음이며 백업 및 복원 작업 등의 데이터 배치 및 관리 태스크에 도움이 됩니다.
데이터베이스 파일
SQL Server 데이터베이스에는 다음과 같은 세 가지 유형의 파일이 있습니다.
주 데이터 파일
주 데이터 파일은 데이터베이스의 시작 지점이며 데이터베이스의 나머지 파일을 가리킵니다. 모든 데이터베이스에는 하나의 주 데이터 파일이 있습니다. 권장되는 주 데이터 파일 확장명은 .mdf입니다.
보조 데이터 파일
보조 데이터 파일은 주 데이터 파일이 아닌 모든 데이터 파일을 구성합니다. 데이터베이스에 따라 보조 데이터 파일이 없을 수도 있고 여러 개 있을 수도 있습니다. 권장되는 보조 데이터 파일 확장명은 .ndf입니다.
로그 파일
로그 파일에는 데이터베이스를 복구하는 데 사용되는 모든 로그 정보가 들어 있습니다. 데이터베이스에 로그 파일이 두 개 이상 있을 수 있으며 데이터베이스마다 적어도 하나의 로그 파일이 있어야 합니다. 권장되는 로그 파일 확장명은 .ldf입니다.
SQL Server에서 .mdf, .ndf 및 .ldf 파일 확장명만 허용되는 것은 아니지만 이러한 확장명을 사용하면 여러 종류의 파일과 그 용도를 식별하는 데 도움이 됩니다.
SQL Server에서 데이터베이스의 모든 파일 위치는 데이터베이스의 주 파일과 master 데이터베이스에 기록됩니다. SQL Server 데이터베이스 엔진은 대개 master 데이터베이스의 파일 위치 정보를 사용합니다. 그러나 다음과 같은 경우 데이터베이스 엔진은 주 파일의 파일 위치 정보를 사용하여 master 데이터베이스의 파일 위치 항목을 초기화합니다.
FOR ATTACH 또는 FOR ATTACH_REBUILD_LOG 옵션으로 CREATE DATABASE 문을 사용하여 데이터베이스를 연결하는 경우
SQL Server 버전 2000이나 버전 7.0에서 업그레이드하는 경우
master 데이터베이스를 복원하는 경우
논리적 파일 이름과 물리적 파일 이름
SQL Server 파일은 다음과 같은 두 가지 이름을 갖습니다.
logical_file_name
logical_file_name은 모든 Transact-SQL 문에서 물리적 파일을 참조하는 데 사용되는 이름입니다. 논리적 파일 이름은 SQL Server 식별자 규칙을 따라야 하고 데이터베이스의 논리적 파일 이름 사이에서 고유해야 합니다.
os_file_name
os_file_name은 디렉터리 경로를 포함하는 물리적 파일 이름입니다. 이 이름은 운영 체제 파일 이름의 규칙을 따라야 합니다.
FAT 또는 NTFS 파일 시스템에 SQL Server 데이터 파일과 로그 파일을 배치할 수 있습니다. 보안상 NTFS 파일 시스템을 사용하는 것이 좋습니다. 읽기/쓰기 데이터 파일 그룹과 로그 파일은 NTFS 압축 파일 시스템에 배치할 수 없습니다. 읽기 전용 데이터베이스와 읽기 전용 보조 파일 그룹만 NTFS 압축 파일 시스템에 배치할 수 있습니다. 자세한 내용은 읽기 전용 파일 그룹 및 압축을 참조하십시오.
여러 SQL Server 인스턴스가 단일 시스템에서 실행될 때 각 인스턴스는 해당 인스턴스에서 생성된 데이터베이스에 대한 파일을 보관할 수 있는 서로 다른 기본 디렉터리를 받습니다. 자세한 내용은 SQL Server 기본 인스턴스 및 명명된 인스턴스의 파일 위치를 참조하십시오.
데이터 파일 페이지
SQL Server 데이터 파일의 페이지는 첫째 페이지가 0으로 시작하여 순차적으로 번호가 매겨집니다. 데이터베이스의 파일마다 고유한 파일 ID 번호가 있습니다. 데이터베이스에서 페이지를 고유하게 식별하려면 해당 파일 ID와 페이지 번호가 모두 필요합니다. 다음 예에서는 4MB의 주 데이터 파일과 1MB의 보조 데이터 파일이 있는 데이터베이스의 페이지 번호를 보여 줍니다.
각 파일의 첫 페이지는 파일의 특성에 대한 정보를 포함하는 파일 헤더 페이지입니다. 또한 파일 시작 부분의 다른 여러 페이지에도 할당 맵과 같은 시스템 정보가 포함됩니다. 주 데이터 파일과 첫 번째 로그 파일에 모두 저장되는 시스템 페이지 중 하나는 데이터베이스의 특성에 대한 정보를 포함하는 데이터 부팅 페이지입니다. 페이지 및 페이지 유형에 대한 자세한 내용은 페이지 및 익스텐트 이해를 참조하십시오.
파일 크기
SQL Server 파일은 원래 지정된 크기에서 자동으로 증가할 수 있습니다. 파일을 정의할 때 특정 증분을 지정할 수 있습니다. 파일이 가득 찰 때마다 증분에 따라 크기가 늘어납니다. 한 파일 그룹에 여러 파일이 있을 경우 모든 파일이 가득 찰 때까지 파일은 자동으로 증가하지 않습니다. 이 경우 라운드 로빈 방식으로 증가합니다.
각 파일의 최대 크기를 지정할 수도 있습니다. 최대 크기를 지정하지 않으면 파일은 디스크에서 사용 가능한 공간을 모두 사용할 때까지 계속 증가할 수 있습니다. 이 기능은 사용자가 시스템 관리자에 편리하게 액세스할 수 없는 응용 프로그램에 포함된 데이터베이스로 SQL Server를 사용할 때 특히 유용합니다. 사용자는 필요에 따라 파일이 자동으로 증가하게 하여 데이터베이스의 사용 가능한 공간을 모니터링하고 추가 공간을 수동으로 할당하는 관리 작업을 줄일 수 있습니다.
데이터베이스 스냅숏 파일
데이터베이스 스냅숏에서 쓰기 시 복사 데이터를 저장하기 위해 사용하는 파일 형식은 사용자가 스냅숏을 만들었는지 또는 스냅숏이 내부적으로 사용되는지에 따라 달라집니다.
사용자가 만든 데이터베이스 스냅숏은 하나 이상의 스파스 파일에 데이터를 저장합니다. 스파스 파일 기술은 NTFS 파일 시스템의 기능입니다. 처음에는 스파스 파일에 사용자 데이터가 없으며 사용자 데이터에 대한 디스크 공간이 스파스 파일에 할당되어 있지 않습니다. 데이터베이스 스냅숏의 스파스 파일 사용 및 데이터베이스 스냅숏 증가 방법은 데이터베이스 스냅숏 작동 방법 및 데이터베이스 스냅숏의 스파스 파일 크기 이해를 참조하십시오.
데이터베이스 스냅숏은 특정 DBCC 명령에 의해 내부적으로 사용됩니다. 이러한 명령에는 DBCC CHECKDB, DBCC CHECKTABLE, DBCC CHECKALLOC, DBCC CHECKFILEGROUP 등이 있습니다. 내부 데이터베이스 스냅숏은 원래 데이터베이스 파일의 스파스 대체 데이터 스트림을 사용합니다. 스파스 파일과 마찬가지로 대체 데이터 스트림은 NTFS 파일 시스템의 기능입니다. 스파스 대체 데이터 스트림을 사용하면 파일 크기나 볼륨 통계에 영향을 주지 않고 여러 데이터 할당을 하나의 파일 또는 폴더와 연결할 수 있습니다.
데이터베이스 파일 그룹
할당 및 관리를 위해 파일 그룹에서 데이터베이스 개체와 파일을 함께 그룹화할 수 있습니다. 다음과 같은 두 가지 유형의 파일 그룹이 있습니다.
주
주 파일 그룹은 주 데이터 파일과 다른 파일 그룹에 특별히 할당되지 않은 기타 파일을 포함합니다. 시스템 테이블의 모든 페이지는 주 파일 그룹에 할당됩니다.
사용자 정의
사용자 정의 파일 그룹은 CREATE DATABASE 또는 ALTER DATABASE 문에 FILEGROUP 키워드를 사용하여 지정하는 파일 그룹입니다.
로그 파일은 파일 그룹에 포함되지 않습니다. 로그 공간은 데이터 공간과는 별도로 관리됩니다.
한 파일이 두 개 이상의 파일 그룹에 속할 수 없습니다. 테이블, 인덱스 및 큰 개체 데이터를 특정 파일 그룹에 연결할 수 있습니다. 이 경우 모든 관련 페이지가 해당 파일 그룹에 할당되거나 테이블과 인덱스를 분할할 수 있습니다. 분할된 테이블과 인덱스의 데이터는 데이터베이스의 개별 파일 그룹에 각각 배치할 수 있는 단위로 나뉩니다. 분할된 테이블과 인덱스에 대한 자세한 내용은 분할된 테이블 및 인덱스를 참조하십시오.
각 데이터베이스에서 한 파일 그룹이 기본 파일 그룹으로 지정됩니다. 파일 그룹을 지정하지 않고 테이블이나 인덱스를 만들면 기본 파일 그룹에서 모든 페이지를 할당하는 것으로 간주됩니다. 한 번에 한 파일 그룹만 기본 파일 그룹이 될 수 있습니다. db_owner 고정 데이터베이스 역할의 멤버는 한 파일 그룹에서 다른 파일 그룹으로 기본 파일 그룹을 전환할 수 있습니다. 기본 파일 그룹을 지정하지 않으면 주 파일 그룹이 기본 파일 그룹이 됩니다.
파일 및 파일 그룹 예
다음 예에서는 SQL Server 인스턴스에서 데이터베이스를 만듭니다. 데이터베이스에는 주 데이터 파일, 사용자 정의 파일 그룹 및 로그 파일이 있습니다. 주 데이터 파일은 주 파일 그룹에 있으며 사용자 정의 파일 그룹에는 보조 데이터 파일이 두 개 있습니다. ALTER DATABASE 문을 통해 사용자 정의 그룹 파일이 기본 파일 그룹으로 지정됩니다. 그런 다음 사용자 정의 파일 그룹을 지정하여 테이블이 생성됩니다.
USE master;
GO
-- Create the database with the default data
-- filegroup and a log file. Specify the
-- growth increment and the max size for the
-- primary data file.
CREATE DATABASE MyDB
ON PRIMARY
( NAME='MyDB_Primary',
FILENAME=
'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\data\MyDB_Prm.mdf',
SIZE=4MB,
MAXSIZE=10MB,
FILEGROWTH=1MB),
FILEGROUP MyDB_FG1
( NAME = 'MyDB_FG1_Dat1',
FILENAME =
'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\data\MyDB_FG1_1.ndf',
SIZE = 1MB,
MAXSIZE=10MB,
FILEGROWTH=1MB),
( NAME = 'MyDB_FG1_Dat2',
FILENAME =
'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\data\MyDB_FG1_2.ndf',
SIZE = 1MB,
MAXSIZE=10MB,
FILEGROWTH=1MB)
LOG ON
( NAME='MyDB_log',
FILENAME =
'c:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\data\MyDB.ldf',
SIZE=1MB,
MAXSIZE=10MB,
FILEGROWTH=1MB);
GO
ALTER DATABASE MyDB
MODIFY FILEGROUP MyDB_FG1 DEFAULT;
GO
-- Create a table in the user-defined filegroup.
USE MyDB;
CREATE TABLE MyTable
( cola int PRIMARY KEY,
colb char(8) )
ON MyDB_FG1;
GO
다음 그림에서는 위 예제의 결과를 요약하여 보여 줍니다.