人人都是 DBA(V)SQL Server 数据库文件

SQL Server 数据库安装后会包含 4 个默认系统数据库:master, model, msdb, tempdb。

SELECT [name]
    ,database_id
    ,suser_sname(owner_sid) AS [owner]
    ,create_date
    ,user_access_desc
    ,state_desc
FROM sys.databases
WHERE database_id <= 4;

master

master 数据库包含用于记录整个服务器安装信息和后续创建的所有数据库的信息,包括磁盘空间信息、文件分配信息、文件使用信息、系统级的配置项信息、网络终结点信息、用户账户信息、各数据库的信息等。

model

model 数据库是一个模板数据库。每次创建新的数据库时,SQL Server 都会生成 model 数据库的一个副本作为新数据库的基础结构。所以,如果想在创建新的数据库时就拥有某些指定对象、权限和属性设置等,可以更改 model 数据库中的内容,新的数据库会自动继承这些设置。

msdb

msdb 数据库由 SQL Server 提供的一些功能服务组件所使用。包括:

  • SQL Server Agent:用于执行计划任务,例如备份和复制任务等。
  • Service Broker:用于提供队列和可靠性消息机制。
  • Jobs
  • Alerts
  • Log Shipping
  • Policies
  • Database Mail
  • Damaged Pages Recovery

tempdb

tempdb 数据库是 SQL Server 的工作空间,其特别之处是当 SQL Server 重启时总是重建而不是恢复该数据库,所以存放的数据在数据库重启后会丢失。tempdb 数据库用于存放由用户显式创建的临时表(Temporary Tables)、查询处理过程的中间数据、排序的中间数据、用于 Snapshot 的行版本数据、游标相关数据等。所有用户都有创建和使用 tempdb 中本地和全局临时表的权利,也就是 # 和 ## 为前缀的临时表。

tempdb 最有可能是在生产环境中创建和删除新对象数量最多的数据库,所以优化对 tempdb 的影响比在用户数据库上的影响更大。由于每个 SQL Server 实例只有一个 tempdb,所以有问题的应用程序会影响到所有其他应用程序中的所有其他用户。

mssqlsystemresource

SQL Server 其实还隐藏着第 5 个神秘系统数据库 mssqlsystemresource,称为系统资源数据库。顾名思义,mssqlsystemresource 数据库中存放的都是系统资源相关的信息,系统内的可执行对象都放在这里,比如 sys.objects$ 对象,后缀为 "$" 的对象在其他数据库中都不可见。这个数据库无法通过 SQL Server Management Studio 直接查看,也无法直接访问,实际上权限的控制导致也无法去修改它。mssqlsystemresource 数据库的主要作用是用于系统升级和补丁安装,以便快速的替换系统内资源定义。

mssqlsystemresource 数据库文件默认存放在 binn 目录下,文件名为 mssqlsystemresource.mdf,同时还存在一个相应的日志文件 mssqlsystemresource.ldf。如果想探究 mssqlsystemresource 数据库的内容,可以拷贝这两个文件到新的目录,重命名文件,重启 SQL Server,然后将重命名后的文件 Attach 为新的数据库。

CREATE DATABASE dennis_resource_copy ON (
    NAME = data
    ,FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.DENNIS\MSSQL\DATA\mssqlsystemresource_copy.mdf‘
    )
    ,(
    NAME = log
    ,FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.DENNIS\MSSQL\DATA\mssqlsystemresource_copy.ldf‘
    )
FOR ATTACH;

这样,SQL Server 对待上面的 dennis_resource_copy 数据库和其他常规数据库没有差别,在 dennis_resource_copy 数据库中修改对象也不会影响 mssqlsystemresource 数据库。

数据库文件

数据库文件实际上和普通的文件系统文件没有什么不同。SQL Server 中允许有 3 中类型的数据库文件:

  • Primary Data Files:每个数据库都有一个主数据文件,使用 .mdf 扩展名。
  • Secondary Data Files:数据库可以没有或者有多个辅助数据文件,使用 .ndf 扩展名。
  • Log Files:每个数据库至少有一个日志文件,使用 .ldf 扩展名。

实际上,针对特殊功能,还存在 FileStream Data Files 和 Full-Text Data Files。

在创建数据库文件时,每个文件都有 5 个属性可以指定:

  • Logical FileName:逻辑文件名
  • Physical FileName:物理文件名
  • Initial Size:初始大小
  • Maximum Size:最大大小
  • Growth Increment:增长增量
CREATE DATABASE DENNIS_TEST ON PRIMARY (
    NAME = DENNIS_TEST_PRIMARY
    ,FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.DENNIS\MSSQL\DATA\DENNIS_TEST_PRIMARY.mdf‘
    ,SIZE = 100 MB
    ,MAXSIZE = 200 MB
    ,FILEGROWTH = 20 MB
    )
    ,(
    NAME = DENNIS_TEST_SECONDARY
    ,FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.DENNIS\MSSQL\DATA\DENNIS_TEST_SECONDARY.ndf‘
    ,SIZE = 10 GB
    ,MAXSIZE = 50 GB
    ,FILEGROWTH = 250 MB
    ) LOG ON (
    NAME = DENNIS_TEST_LOG
    ,FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.DENNIS\MSSQL\DATA\DENNIS_TEST_LOG.ldf‘
    ,SIZE = 2 GB
    ,MAXSIZE = 10 GB
    ,FILEGROWTH = 100 MB
    );

可以使用元数据视图 sys.database_files 查看这些属性。

SELECT * FROM sys.database_files;

数据文件的默认大小是 model 数据库的主数据文件的大小(默认 2M),日志文件的默认大小为 0.5M。

出于分配和管理的目的,可以将数据库的数据文件分为文件组。在某些情况下,可以把数据和索引文件放在特定的文件组、特定的驱动器上以提高性能。

包含主数据文件的文件组称为 Primary Filegroup,并且只会存在一个 Primary Filegroup。如果创建数据库时没有特别说明要把文件放在哪个文件组中,则默认会放到 Primary Filegroup 中。当然,也可以修改默认文件组。

CREATE DATABASE DENNIS_TEST ON PRIMARY (
    NAME = DENNIS_Primary1
    ,FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.DENNIS\MSSQL\DATA\DENNIS_Primary1.mdf‘
    ,SIZE = 10
    ,MAXSIZE = 50
    ,FILEGROWTH = 10
    )
    ,(
    NAME = DENNIS_Primary2
    ,FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.DENNIS\MSSQL\DATA\DENNIS_Primary2.ndf‘
    ,SIZE = 10
    ,MAXSIZE = 50
    ,FILEGROWTH = 10
    )
    ,FILEGROUP DENNIS_Group1 (
    NAME = DENNIS_Grp1Fi1e1
    ,FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.DENNIS\MSSQL\DATA\DENNIS_Grp1Fi1e1.ndf‘
    ,SIZE = 5
    ,MAXSIZE = 30
    ,FILEGROWTH = 5
    )
    ,(
    NAME = DENNIS_Grp1Fi1e2
    ,FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.DENNIS\MSSQL\DATA\DENNIS_Grp1Fi1e2.ndf‘
    ,SIZE = 5
    ,MAXSIZE = 30
    ,FILEGROWTH = 5
    )
    ,FILEGROUP DENNIS_Group2 (
    NAME = DENNIS_Grp2Fi1e1
    ,FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.DENNIS\MSSQL\DATA\DENNIS_Grp2Fi1e1.ndf‘
    ,SIZE = 10
    ,MAXSIZE = 50
    ,FILEGROWTH = 5
    )
    ,(
    NAME = DENNIS_Grp2Fi1e2
    ,FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.DENNIS\MSSQL\DATA\DENNIS_Grp2Fi1e2.ndf‘
    ,SIZE = 10
    ,MAXSIZE = 50
    ,FILEGROWTH = 5
    ) LOG ON (
    NAME = DENNIS_log
    ,FILENAME = ‘C:\Program Files\Microsoft SQL Server\MSSQL11.DENNIS\MSSQL\DATA\DENNIS_log.ldf‘
    ,SIZE = 5 MB
    ,MAXSIZE = 25 MB
    ,FILEGROWTH = 5 MB
    );

数据库配置选项

状态选项(State options)

  • SINGLE_USER | RESTRICTED_USER | MULTI_USER
  • OFFLINE | ONLINE | EMERGENCY
  • READ_ONLY | READ_WRITE

游标选项(Cursor options)

  • CURSOR_CLOSE_ON_COMMIT { ON | OFF }
  • CURSOR_DEFAULT { LOCAL | GLOBAL }

自动选项(Auto options)

  • AUTO_CLOSE { ON | OFF }
  • AUTO_CREATE_STATISTICS { ON | OFF }
  • AUTO_SHRINK { ON | OFF }
  • AUTO_UPDATE_STATISTICS { ON | OFF }
  • AUTO_UPDATE_STATISTICS_ASYNC { ON | OFF }

参数化选项(Parameterization options)

  • DATE_CORRELATION_OPTIMIZATION { ON | OFF }
  • PARAMETERIZATION { SIMPLE | FORCED }

SQL 选项(SQL options)

  • ANSI_NULL_DEFAULT { ON | OFF }
  • ANSI_NULLS { ON | OFF }
  • ANSI_PADDING { ON | OFF }
  • ANSI_WARNINGS { ON | OFF }
  • ARITHABORT { ON | OFF }
  • CONCAT_NULL_YIELDS_NULL { ON | OFF }
  • NUMERIC_ROUNDABORT { ON | OFF }
  • QUOTED_IDENTIFIER { ON | OFF }
  • RECURSIVE_TRIGGERS { ON | OFF }

数据库恢复选项(Database recovery options)

  • RECOVERY { FULL | BULK_LOGGED | SIMPLE }
  • TORN_PAGE_DETECTION { ON | OFF }
  • PAGE_VERIFY { CHECKSUM | TORN_PAGE_DETECTION | NONE }

外部访问选项(External access options)

  • DB_CHAINING { ON | OFF }
  • TRUSTWORTHY { ON | OFF }

数据库镜像选项(Database mirroring options)

  • PARTNER { = ‘partner_server‘ }
  • | FAILOVER
  • | FORCE_SERVICE_ALLOW_DATA_LOSS
  • | OFF
  • | RESUME
  • | SAFETY { FULL | OFF }
  • | SUSPEND
  • | TIMEOUT integer
  • }
  • WITNESS { = ‘witness_server‘ }| OFF }

Service Broker 选项(Service Broker options)

  • ENABLE_BROKER | DISABLE_BROKER
  • NEW_BROKER
  • ERROR_BROKER_CONVERSATIONS

更改跟踪选项(Change Tracking options)

  • CHANGE_TRACKING {= ON [ <change_tracking_settings> | = OFF}

数据库加密选项(Database Encryption options)

  • ENCRYPTION {ON | OFF}

快照隔离选项(Snapshot Isolation options)

  • ALLOW_SNAPSHOT_ISOLATION {ON | OFF }
  • READ_COMMITTED_SNAPSHOT {ON | OFF } [ WITH <termination> ]

可以使用 sys.databases 元数据视图来查看各数据库的选项配置。

SELECT * FROM sys.databases;

可以使用 ALTER DATABASE 命名来修改数据库配置选项。

ALTER DATABASE DENNIS_TEST SET SINGLE_USER;
ALTER DATABASE DENNIS_TEST SET OFFLINE;
ALTER DATABASE DENNIS_TEST SET READ_ONLY;
ALTER DATABASE DENNIS_TEST SET SINGLE_USER WITH NO_WAIT; 

本系列文章《人人都是 DBA》由 Dennis Gao 发表自博客园个人技术博客,未经作者本人同意禁止任何形式的转载,任何自动或人为的爬虫转载或抄袭行为均为耍流氓。

时间: 2024-12-28 04:46:09

人人都是 DBA(V)SQL Server 数据库文件的相关文章

4.2.4 SQL Server数据库文件

4.2.4 SQL Server数据库文件SQL Server将数据存储在数据文件中,将事务记录存储在事务□志文件中.如果通过 一个逻辑数据库名称将它们集合到一起,这些文件就是数据库.SQL Server数据库可以具 有多个数据文件和多个事务日志文件(虽然-个事务日志文件通常已经足够).当首次创建数据库时,它会有一个默认文件扩展名为.mdf的主数据文件.数据库也可 以有默认扩展名为m df的辅助数据文件.这些数据文件可以组合到一个称为文件组的逻辑 组中,第 5 章将对此进行介绍.该数据库至少有一

C# 以附加文件方式连接SQL Server数据库文件

string str = @"data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFileName=z:\ttt.mdf;User Instance=true"; 其中User Instance=true参数不可少. //http://www.cnblogs.com/yuanyuan/archive/2011/02/12/1951871.html Integrated   Security默认值是False,此时需要提供U

SQL SERVER数据库文件删除、分区格式化解决方案

[故障类型]数据库文件删除.分区格式化.文件大小变为"0",或使用备份还原数据库时覆,盖数据库? [典型特征]◎ 数据库文件(MDF.NDF或LDF)丢失"置疑"状态:◎ 数据库数据恢复至早期数据: ◆ 检测流程a. 通过文件系统对丢失的数据库文件进行分析:b. 针对MDF(或NDF)文件内部结构,对硬盘进行全面分析. ◆ 恢复流程a. 将故障硬盘接入安全的数据恢复平台中,对硬盘做完整的全盘镜像,以防二次破坏:b. 分析原来的文件系统格式:c. 查找文件目录索引及文

查看sql server数据库文件信息

--drop table #dbfiles --deallocate cursor1 ------ declare cursor1 cursor for SELECT name from sys.databases where state=0 -- 临时表 www.2cto.com CREATE TABLE #dbfiles ( dbname nvarchar(100), filetype nvarchar(100), filename nvarchar(200) ) declare @name

SQL Server数据库文件. mdf和.mds的导出

1.打开你的管理器-->选择你的数据库-->选择所有任务-- >分离数据库-->之后拷贝一分给别人用就可以了,之后你在附加上你的数据库. 2.拷贝  拷贝数据库的位置:可以通过点击服务器-->右击-->附加-->添加上面查看数据库所在的位置 知道数据库所在的位置后进行拷贝 3.数据库拷贝之后再通过第二步附加上数据库.这样数据库可以再次使用. 数据库也可以通过第二步附加到别的服务器的数据库上,以方便连接重新部署网站或者软件.

SQL Server 数据库文件 4 点注意

1.数据库被分解成逻辑页面,每页8K,在每一个文件中页面从 0 --> x 连续编号: 2.可以通过 [database_id]   [file_id]   [page_id] 的形式引用页面: 3.alter database 扩大文件时会在文件结尾处添加新空间,也就是说新分配空间的首页,就是第x+1页: 4.dbacc shrinkdatabase / shrinkfile 时会从编号最高的页开始删除页面:

人人都是 DBA(VIII)SQL Server 页存储结构

原文:人人都是 DBA(VIII)SQL Server 页存储结构 当在 SQL Server 数据库中创建一张表时,会在多张系统基础表中插入所创建表的信息,用于管理该表.通过目录视图 sys.tables, sys.columns, sys.indexes 可以查看新建的表的元数据信息. 下面使用创建 Customer 表的过程作为示例. USE [TEST] GO DROP TABLE [dbo].[Customer] GO CREATE TABLE [dbo].[Customer]( [I

人人都是 DBA(XV)锁信息收集脚本汇编

什么?有个 SQL 执行了 8 秒! 哪里出了问题?臣妾不知道啊,得找 DBA 啊. DBA 人呢?离职了!!擦!!! 程序员在无处寻求帮助时,就得想办法自救,努力让自己变成 "伪 DBA". 索引 查看 Session 对应的 Thread 和当前 Command 侦测 Deadlocking 或阻塞问题 查看 Task 执行中哪个 Wait Type 最慢 查看当前 Task 的运行情况 查看 Lock Waits 状态 查看 Latch 等待情况 将所有 wait_type 按照

人人都是 DBA(XIV)存储过程信息收集脚本汇编

什么?有个 SQL 执行了 8 秒! 哪里出了问题?臣妾不知道啊,得找 DBA 啊. DBA 人呢?离职了!!擦!!! 程序员在无处寻求帮助时,就得想办法自救,努力让自己变成 "伪 DBA". 索引 获取存储过程 SP 执行次数排名 查看哪个 SP 执行的平均时间最长 查看哪个 SP 执行的平均时间最不稳定 查看哪个 SP 耗费了最多的 CPU 时间 查看哪个 SP 执行的逻辑读最多 查看哪个 SP 执行的物理读最多 查看哪个 SP 执行的逻辑写最多 获取存储过程 SP 执行次数排名