首页 >> 常识问答 >

问sql 数据库中包含哪几种文件 主数据日志文件解析

2026-11-12 16:45:43

答

sql 数据库以 sqlserver 为例,一个数据库在磁盘上主要分为主数据文件 次要数据文件 事务日志文件这三大类,所有用户表 索引 存储过程 视图这些数据库对象,全部存放在数据文件里面,事务日志文件专门记录数据库每一次修改操作,用来做故障恢复和事务回滚,很多新手会误以为数据库只有一个文件,实际上数据库可以创建多个次要数据文件,把数据分散在不同磁盘,提升读写性能,每个数据库必须至少拥有一个主数据文件和一个事务日志文件,次要数据文件属于可选,不是强制要求,不同文件都有对应的扩展名,主数据文件后缀一般是 mdf,次要数据文件后缀一般是 ndf,事务日志文件后缀一般是 ldf,理解这三类文件的分工非常重要,日常备份 分离附加 扩容 迁移数据库的时候,都需要识别这几种文件,如果迁移的时候只拷贝 mdf 漏掉 ldf,数据库附加之后就会出现异常,无法正常完成事务恢复,这也是运维经常踩坑的地方。

三类文件详细对照表

文件类型扩展名是否必需核心作用
主数据文件mdf必需存放系统表 用户表 索引,记录数据库启动相关信息,是数据库入口文件
次要数据文件ndf可选存放额外业务数据,用来拆分数据,支持多磁盘并行读写
事务日志文件ldf必需记录 insert update delete 等变更操作,支持回滚 崩溃恢复 日志备份

各文件深度说明

主数据文件 mdf,它是数据库的核心入口,数据库里面的系统目录信息就保存在这个文件,数据库实例启动数据库的时候,首先读取主数据文件,一个数据库有且只能有一个主数据文件,就算添加很多 ndf 次要文件,mdf 依旧只有一份,当数据库体积不断变大,单块磁盘空间不够的时候,就可以新增 ndf 次要数据文件,把表和索引分配到 ndf 里面,实现数据文件扩容。

次要数据文件 ndf,它的设计目的就是分担主数据文件压力,适合大型业务库,多 ndf 文件可以分布在不同物理磁盘,提升 IO 读写速度,也可以解决单磁盘容量上限问题,小型业务库一般不会创建 ndf,全部数据都保存在 mdf 里面。

事务日志文件 ldf,这个文件和数据文件是独立分开的,它不会保存业务数据本身,只记录每一笔事务的修改前后信息,当数据库意外断电崩溃,重新启动的时候,数据库引擎会读取 ldf 日志,做前滚和回滚,把数据库恢复到一致状态,同时事务回滚 时间点恢复 日志备份全部依赖 ldf 文件,日志文件会持续增长,如果没有做日志截断或者日志备份,ldf 会一直变大占满磁盘。

文件组相关补充知识

数据文件可以归入文件组,主文件组默认包含 mdf 主数据文件,用户可以自定义文件组,把多个 ndf 次要数据文件放到同一个文件组里面,建表的时候指定表存放到指定文件组,日志文件不能加入文件组,这是重点规则,事务日志文件永远独立,不受文件组管理。

数据库分离附加操作要点

分离数据库之后,磁盘上会保留对应的 mdf ndf ldf 文件,附加数据库的时候,必须选择对应的主数据文件,数据库引擎会自动识别关联的 ndf 和 ldf,如果原来的 ldf 丢失,附加的时候可以选择重建日志,但是重建日志之后,原来的事务历史就丢失,无法再做基于日志的时间点恢复,生产环境不推荐随意重建 ldf。

综合来看,sql 数据库核心就是 mdf 主数据文件 ndf 次要数据文件 ldf 事务日志文件,mdf 和 ldf 是强制必备,ndf 按需添加,数据文件存放业务对象,日志文件负责事务记录与恢复,迁移备份扩容操作的时候一定要分清三种文件,避免遗漏日志文件造成数据库异常。

【常见问题】

问题 1 sql 数据库中包含哪几种文件里面 ndf 可以不创建吗

回答 1 sql 数据库中包含哪几种文件里面 ndf 次要数据文件属于可选文件,小型业务库可以不创建 ndf,所有数据全部保存在 mdf 主数据文件,只有大数据量需要拆分数据的时候才新增 ndf。

问题 2 sql 数据库中包含哪几种文件 ldf 作用是什么

回答 1 sql 数据库中包含哪几种文件里面 ldf 是事务日志文件,ldf 用来记录数据库变更操作,sql 数据库依靠 ldf 实现事务回滚和数据库崩溃恢复,每个数据库必须至少有一个 ldf 文件。

问题 3 sql 数据库中包含哪几种文件迁移的时候只拷贝 mdf 可以吗

回答 1 sql 数据库中包含哪几种文件迁移不能只拷贝 mdf,sql 数据库还需要配套 ldf 事务日志文件,如果还有 ndf 次要数据文件也要一并拷贝,只复制 mdf 附加数据库会出现日志缺失异常。

问题 4 sql 数据库中包含哪几种文件日志文件可以加入文件组吗

回答 1 sql 数据库中包含哪几种文件里面事务日志 ldf 不能加入文件组,文件组只管理 mdf 和 ndf 这类数据文件,sql 数据库日志文件始终独立,不受文件组管理。

【免责申明】

本文内容以 sqlserver 数据库为基础进行讲解,其他类型 sql 数据库比如 mysql 文件结构和 sqlserver 不一样,mysql 不是 mdf ndf ldf 这套结构,学习和生产操作请区分数据库产品,正式操作前做好备份,因混淆数据库类型或者误操作造成数据损坏,由操作者自行承担。

 

相关阅读

最新文章