데이터베이스 파일 및 파일 그룹Database Files and Filegroups

모든 SQL ServerSQL Server 데이터베이스에는 최소한 두 개의 운영 체제 파일인 데이터 파일과 로그 파일이 있습니다.At a minimum, every SQL ServerSQL Server database has two operating system files: a data file and a log file. 데이터 파일은 테이블, 인덱스, 저장 프로시저 및 뷰 등의 개체와 데이터를 포함합니다.Data files contain data and objects such as tables, indexes, stored procedures, and views. 로그 파일은 데이터베이스의 모든 트랜잭션을 복구하는 데 필요한 정보를 포함합니다.Log files contain the information that is required to recover all transactions in the database. 데이터 파일은 할당 및 관리를 간편하게 수행하기 위해 파일 그룹으로 그룹화할 수 있습니다.Data files can be grouped together in filegroups for allocation and administration purposes.

데이터베이스 파일Database Files

SQL ServerSQL Server 데이터베이스에는 다음 표에 설명된 것처럼 세 가지 유형의 파일이 있습니다. databases have three types of files, as shown in the following table.

파일File 설명Description
Primary 주 데이터 파일은 데이터베이스의 시작 정보를 포함하며 데이터베이스의 나머지 파일을 가리킵니다.The primary data file contains the startup information for the database and points to the other files in the database. 사용자 데이터와 개체를 이 파일에 저장하거나 보조 데이터 파일에 저장할 수 있습니다.User data and objects can be stored in this file or in secondary data files. 모든 데이터베이스에는 하나의 주 데이터 파일이 있습니다.Every database has one primary data file. 권장되는 주 데이터 파일 확장명은 .mdf입니다.The recommended file name extension for primary data files is .mdf.
보조Secondary 보조 데이터 파일은 선택적으로 사용하는 사용자 정의 데이터 파일이며 사용자 데이터를 저장합니다.Secondary data files are optional, are user-defined, and store user data. 보조 파일은 각 파일을 서로 다른 디스크 드라이브에 배치하여 데이터를 여러 디스크에 분산시키는 데 사용할 수 있습니다.Secondary files can be used to spread data across multiple disks by putting each file on a different disk drive. 또한 데이터베이스가 단일 Windows 파일의 최대 크기를 초과할 경우 보조 데이터 파일을 사용하여 데이터베이스 크기를 계속해서 늘릴 수 있습니다.Additionally, if a database exceeds the maximum size for a single Windows file, you can use secondary data files so the database can continue to grow.

권장되는 보조 데이터 파일 확장명은 .ndf입니다.The recommended file name extension for secondary data files is .ndf.
트랜잭션 로그Transaction Log 트랜잭션 로그 파일은 데이터베이스 복구에 사용되는 로그 정보를 저장합니다.The transaction log files hold the log information that is used to recover the database. 데이터베이스마다 최소한 하나의 로그 파일이 있어야 합니다.There must be at least one log file for each database. 권장되는 트랜잭션 로그 파일 확장명은 .ldf입니다.The recommended file name extension for transaction logs is .ldf.

예를 들어 모든 데이터와 개체를 하나의 주 파일에 저장하고 트랜잭션 로그 정보를 로그 파일에 저장하는 Sales 라는 단순한 데이터베이스를 만들 수 있습니다.For example, a simple database named Sales can be created that includes one primary file that contains all data and objects and a log file that contains the transaction log information. 또는 한 개의 주 파일과 5개의 보조 파일을 포함하는 Orders 라는 더 복잡한 데이터베이스를 만들 수도 있습니다.Alternatively, a more complex database named Orders can be created that includes one primary file and five secondary files. 데이터베이스 내의 데이터와 개체는 6개의 파일에 분산되고 트랜잭션 로그 정보는 4개의 로그 파일에 포함됩니다.The data and objects within the database spread across all six files, and the four log files contain the transaction log information.

기본적으로 데이터와 트랜잭션 로그는 동일한 드라이브와 경로에 배치됩니다.By default, the data and transaction logs are put on the same drive and path. 이것은 단일 디스크 시스템의 경우에 해당하며This is done to handle single-disk systems. 프로덕션 환경에서는 최적이 아닐 수도 있습니다.However, this may not be optimal for production environments. 데이터와 로그 파일은 서로 다른 디스크에 배치하는 것이 좋습니다.We recommend that you put data and log files on separate disks.

논리적 파일 이름과 물리적 파일 이름Logical and Physical File Names

SQL Server 파일은 다음과 같은 두 가지 이름을 갖습니다.SQL Server files have two names:

logical_file_name: logical_file_name은 모든 Transact-SQL 문에서 물리적 파일을 참조하는 데 사용되는 이름입니다.logical_file_name: The logical_file_name is the name used to refer to the physical file in all Transact-SQL statements. 논리적 파일 이름은 SQL Server 식별자 규칙을 따라야 하고 데이터베이스의 논리적 파일 이름 사이에서 고유해야 합니다.The logical file name must comply with the rules for SQL Server identifiers and must be unique among logical file names in the database.

os_file_name: os_file_name은 디렉터리 경로를 포함하는 물리적 파일의 이름입니다.os_file_name: The os_file_name is the name of the physical file including the directory path. 이 이름은 운영 체제 파일 이름의 규칙을 따라야 합니다.It must follow the rules for the operating system file names.

FAT 또는 NTFS 파일 시스템에 SQL Server 데이터 파일 및 로그 파일을 배치할 수 있습니다.SQL Server data and log files can be put on either FAT or NTFS file systems. 보안상 NTFS 파일 시스템을 사용하는 것이 좋습니다.We recommend using the NTFS file system because the security aspects of NTFS. 읽기/쓰기 데이터 파일 그룹과 로그 파일은 NTFS 압축 파일 시스템에 배치할 수 없습니다.Read/write data filegroups and log files cannot be placed on an NTFS compressed file system. 읽기 전용 데이터베이스와 읽기 전용 보조 파일 그룹만 NTFS 압축 파일 시스템에 배치할 수 있습니다.Only read-only databases and read-only secondary filegroups can be put on an NTFS compressed file system.

여러 SQL Server 인스턴스가 단일 시스템에서 실행될 때 각 인스턴스는 해당 인스턴스에서 생성된 데이터베이스에 대한 파일을 보관할 수 있는 서로 다른 기본 디렉터리를 받습니다.When multiple instances of SQL Server are run on a single computer, each instance receives a different default directory to hold the files for the databases created in the instance. 자세한 내용은 SQL Server 기본 인스턴스 및 명명된 인스턴스의 파일 위치참조하세요.For more information, see File Locations for Default and Named Instances of SQL Server.

데이터 파일 페이지Data File Pages

SQL Server 데이터 파일의 페이지는 첫째 페이지가 0으로 시작하여 순차적으로 번호가 매겨집니다.Pages in a SQL Server data file are numbered sequentially, starting with zero (0) for the first page in the file. 데이터베이스의 파일마다 고유한 파일 ID 번호가 있습니다.Each file in a database has a unique file ID number. 데이터베이스에서 페이지를 고유하게 식별하려면 해당 파일 ID와 페이지 번호가 모두 필요합니다.To uniquely identify a page in a database, both the file ID and the page number are required. 다음 예에서는 4MB의 주 데이터 파일과 1MB의 보조 데이터 파일이 있는 데이터베이스의 페이지 번호를 보여 줍니다.The following example shows the page numbers in a database that has a 4-MB primary data file and a 1-MB secondary data file.

data_file_pages

각 파일의 첫 페이지는 파일의 특성에 대한 정보를 포함하는 파일 헤더 페이지입니다.The first page in each file is a file header page that contains information about the attributes of the file. 또한 파일 시작 부분의 다른 여러 페이지에도 할당 맵과 같은 시스템 정보가 포함됩니다.Several of the other pages at the start of the file also contain system information, such as allocation maps. 주 데이터 파일과 첫 번째 로그 파일에 모두 저장되는 시스템 페이지 중 하나는 데이터베이스의 특성에 대한 정보를 포함하는 데이터 부팅 페이지입니다.One of the system pages stored in both the primary data file and the first log file is a database boot page that contains information about the attributes of the database. 페이지 및 페이지 유형에 대한 자세한 내용은 페이지 및 익스텐트 이해를 참조하세요.For more information about pages and page types, see Understanding Pages and Extents.

파일 크기File Size

SQL Server 파일은 원래 지정된 크기에서 자동으로 증가할 수 있습니다.SQL Server files can grow automatically from their originally specified size. 파일을 정의할 때 특정 증분을 지정할 수 있습니다.When you define a file, you can specify a specific growth increment. 파일이 가득 찰 때마다 증분에 따라 크기가 늘어납니다.Every time the file is filled, it increases its size by the growth increment. 한 파일 그룹에 여러 파일이 있을 경우 모든 파일이 가득 찰 때까지 파일은 자동으로 증가하지 않습니다.If there are multiple files in a filegroup, they will not autogrow until all the files are full. 이 경우 라운드 로빈 방식으로 증가합니다.Growth then occurs in a round-robin fashion.

각 파일의 최대 크기를 지정할 수도 있습니다.Each file can also have a maximum size specified. 최대 크기를 지정하지 않으면 파일은 디스크에서 사용 가능한 공간을 모두 사용할 때까지 계속 증가할 수 있습니다.If a maximum size is not specified, the file can continue to grow until it has used all available space on the disk. 이 기능은 사용자가 시스템 관리자에 편리하게 액세스할 수 없는 응용 프로그램에 포함된 데이터베이스로 SQL Server를 사용할 때 특히 유용합니다.This feature is especially useful when SQL Server is used as a database embedded in an application where the user does not have convenient access to a system administrator. 사용자는 필요에 따라 파일이 자동으로 증가하게 하여 데이터베이스의 사용 가능한 공간을 모니터링하고 추가 공간을 수동으로 할당하는 관리 작업을 줄일 수 있습니다.The user can let the files autogrow as required to reduce the administrative burden of monitoring free space in the database and manually allocating additional space.

데이터베이스 스냅숏 파일Database Snapshot Files

데이터베이스 스냅숏에서 쓰기 시 복사 데이터를 저장하기 위해 사용하는 파일 형식은 사용자가 스냅숏을 만들었는지 또는 스냅숏이 내부적으로 사용되는지에 따라 달라집니다.The form of file that is used by a database snapshot to store its copy-on-write data depends on whether the snapshot is created by a user or used internally:

  • 사용자가 만든 데이터베이스 스냅숏은 하나 이상의 스파스 파일에 데이터를 저장합니다.A database snapshot that is created by a user stores its data in one or more sparse files. 스파스 파일 기술은 NTFS 파일 시스템의 기능입니다.Sparse file technology is a feature of the NTFS file system. 처음에는 스파스 파일에 사용자 데이터가 없으며 사용자 데이터에 대한 디스크 공간이 스파스 파일에 할당되어 있지 않습니다.At first, a sparse file contains no user data, and disk space for user data has not been allocated to the sparse file. 데이터베이스 스냅숏의 스파스 파일 사용 및 데이터베이스 스냅숏 증가 방법에 대한 자세한 내용은 데이터베이스 스냅숏 스파스 파일의 크기 보기를 참조하세요.For general information about the use of sparse files in database snapshots and how database snapshots grow, see View the Size of the Sparse File of a Database Snapshot.
  • 데이터베이스 스냅숏은 특정 DBCC 명령에 의해 내부적으로 사용됩니다.Database snapshots are used internally by certain DBCC commands. 이러한 명령에는 DBCC CHECKDB, DBCC CHECKTABLE, DBCC CHECKALLOC, DBCC CHECKFILEGROUP 등이 있습니다.These commands include DBCC CHECKDB, DBCC CHECKTABLE, DBCC CHECKALLOC, and DBCC CHECKFILEGROUP. 내부 데이터베이스 스냅숏은 원래 데이터베이스 파일의 스파스 대체 데이터 스트림을 사용합니다.An internal database snapshot uses sparse alternate data streams of the original database files. 스파스 파일과 마찬가지로 대체 데이터 스트림은 NTFS 파일 시스템의 기능입니다.Like sparse files, alternate data streams are a feature of the NTFS file system. 스파스 대체 데이터 스트림을 사용하면 파일 크기나 볼륨 통계에 영향을 주지 않고 여러 데이터 할당을 하나의 파일 또는 폴더와 연결할 수 있습니다.The use of sparse alternate data streams allows for multiple data allocations to be associated with a single file or folder without affecting the file size or volume statistics.

파일 그룹Filegroups

모든 데이터베이스에는 주 파일 그룹이 한 개씩 있습니다.Every database has a primary filegroup. 주 파일 그룹은 주 데이터 파일과 다른 파일 그룹에 배치되지 않은 보조 파일을 포함합니다.This filegroup contains the primary data file and any secondary files that are not put into other filegroups. 사용자 정의 파일 그룹을 만들어 데이터 파일을 그룹화함으로써 관리, 데이터 할당 및 배치를 간편하게 수행할 수 있습니다.User-defined filegroups can be created to group data files together for administrative, data allocation, and placement purposes.

예를 들어 3개의 파일(Data1.ndf, Data2.ndf 및 Data3.ndf)을 3개의 디스크 드라이브에 하나씩 만들어서 fgroup1이라는 파일 그룹에 할당할 수 있습니다.For example, three files, Data1.ndf, Data2.ndf, and Data3.ndf, can be created on three disk drives, respectively, and assigned to the filegroup fgroup1. 그런 다음 fgroup1파일 그룹에 한 개의 테이블을 만들 수 있습니다.A table can then be created specifically on the filegroup fgroup1. 이렇게 하면 해당 테이블의 데이터에 대한 쿼리가 3개의 디스크로 분산되므로 성능이 향상됩니다.Queries for data from the table will be spread across the three disks; this will improve performance. RAID(Redundant Array of Independent Disks) 스트라이프 세트에 단일 파일을 만들어 사용해도 이와 동일한 수준으로 성능이 향상될 수 있습니다.The same performance improvement can be accomplished by using a single file created on a RAID (redundant array of independent disks) stripe set. 그러나 파일과 파일 그룹을 사용하면 새 디스크에 새 파일을 쉽게 추가할 수 있습니다.However, files and filegroups let you easily add new files to new disks.

모든 데이터 파일은 다음 표에 나열된 파일 그룹에 저장됩니다.All data files are stored in the filegroups listed in the following table.

파일 그룹Filegroup 설명Description
Primary 주 파일을 포함하는 파일 그룹.The filegroup that contains the primary file. 주 파일 그룹에는 모든 시스템 테이블이 할당됩니다.All system tables are allocated to the primary filegroup.
사용자 정의User-defined 사용자가 데이터베이스를 처음 만들 때 또는 나중에 수정할 때 만드는 파일 그룹Any filegroup that is specifically created by the user when the user first creates or later modifies the database.

기본 파일 그룹Default Filegroup

데이터베이스에서 개체를 만들 때 어떤 파일 그룹에 속하는지 지정하지 않으면 기본 파일 그룹에 할당됩니다.When objects are created in the database without specifying which filegroup they belong to, they are assigned to the default filegroup. 언제든지 정확하게 하나의 파일 그룹이 기본 파일 그룹으로 지정됩니다.At any time, exactly one filegroup is designated as the default filegroup. 기본 파일 그룹의 파일은 다른 파일 그룹에 할당되지 않은 모든 새로운 개체를 보관할 수 있을 만큼 크기가 커야 합니다.The files in the default filegroup must be large enough to hold any new objects not allocated to other filegroups.

PRIMARY 파일 그룹은 ALTER DATABASE 문을 사용하여 변경하지 않으면 기본 파일 그룹입니다.The PRIMARY filegroup is the default filegroup unless it is changed by using the ALTER DATABASE statement. 시스템 개체 및 테이블에 대한 할당은 새 기본 파일 그룹이 아니라 PRIMARY 파일 그룹에 남게 됩니다.Allocation for the system objects and tables remains within the PRIMARY filegroup, not the new default filegroup.

파일 및 파일 그룹 예File and Filegroup Example

다음 예에서는 SQL Server 인스턴스에서 데이터베이스를 만듭니다.The following example creates a database on an instance of SQL Server. 데이터베이스에는 주 데이터 파일, 사용자 정의 파일 그룹 및 로그 파일이 있습니다.The database has a primary data file, a user-defined filegroup, and a log file. 주 데이터 파일은 주 파일 그룹에 있으며 사용자 정의 파일 그룹에는 보조 데이터 파일이 두 개 있습니다.The primary data file is in the primary filegroup and the user-defined filegroup has two secondary data files. ALTER DATABASE 문을 통해 사용자 정의 그룹 파일이 기본 파일 그룹으로 지정됩니다.An ALTER DATABASE statement makes the user-defined filegroup the default. 그런 다음 사용자 정의 파일 그룹을 지정하여 테이블이 생성됩니다.A table is then created specifying the user-defined filegroup. (이 예에서는 일반 경로 c:\Program Files\Microsoft SQL Server\MSSQL.1 을 사용하여 SQL Server 버전 지정을 방지합니다.)(This example uses a generic path c:\Program Files\Microsoft SQL Server\MSSQL.1 to avoid specifying a version of SQL Server.)

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\MSSQL.1\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\MSSQL.1\MSSQL\data\MyDB_FG1_1.ndf',
    SIZE = 1MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB),
  ( NAME = 'MyDB_FG1_Dat2',
    FILENAME =
       'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\data\MyDB_FG1_2.ndf',
    SIZE = 1MB,
    MAXSIZE=10MB,
    FILEGROWTH=1MB)
LOG ON
  ( NAME='MyDB_log',
    FILENAME =
       'c:\Program Files\Microsoft SQL Server\MSSQL.1\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

다음 그림에서는 위 예제의 결과를 요약하여 보여 줍니다.The following illustration summarizes the results of the previous example.

filegroup_example

CREATE DATABASE(SQL Server Transact-SQL)CREATE DATABASE (SQL Server Transact-SQL)

ALTER DATABASE 파일 및 파일 그룹 옵션(Transact-SQL)ALTER DATABASE File and Filegroup Options (Transact-SQL)

데이터베이스 분리 및 연결(SQL Server)Database Detach and Attach (SQL Server)