SQL Server Database Files

In this article I describe SQL Server database files. A SQL Server Database is a collection of data objects, it contains two operating system files. One is a data file and another is a log file. Data files consist of 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 file groups for allocation and administration purposes.

Basically SQL Server allows the following three types of database files.

Primary data files

Every database has one primary data file that contains a track of all the remainig files in the database, in addition to storing data. By agreement, the extension of a primary data file is MDF.

Secondary data files

A secondary database may be zero or more data files. According to requirements, the extension of a secondary data file is NDF.

Log files

Log files hold all the log information to recover the database. Every database must be at least one log file, the extension of a log file is LDF.

How to create database files

When we create a database, then the SQL Server Database contains two operating system files, MDF and LDF.

If you want to create additional data files, in other words secondary data files like NDF then we can use the following procedure.

Right-click on the database name.

Select "Properties" > "Files".

We will see the two operating system files, MDF and LDF, as in the following:


Now click the "Add" button.

Now we can define file name like in the following screen.

Then click the "OK" button.


New data files have been created; we can check using the following query.

SELECT name,
       RIGHT(physical_name, 4) AS File_DataType,
       type_desc               AS [DESCRIPTION],
FROM   sys.master_files
WHERE  name LIKE 'testing%'


Database files each have several properties. The properties of each file are noted in the sysfiles that contain one row for each file used by a database.

We can check using the following query:

select * from sysfiles


Column Name Description
fileid The file identification number (unique for each database).
groupid The filegroup identification number.
Size The size of the file (in 8-KB pages).
maxsize The maximum file size (in 8-KB pages). A value of 0 indicates no growth, and a value of - 1 indicates that the file should grow until the disk is full.
growth The growth size of the database. A value of 0 indicates no growth. Can be either a number of pages or a percentage of file size, depending on value of status.
status  0x2 = Disk file.
0x40 = Log device.
0x80 = File has been written to since last backup.
0x100000 = Growth is in percentage, not pages.
name The logical name of the file.
filename The name of the physical device, including the full path of the file.