人人都是 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:增長增量
可以使用元數據視圖 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》系列文章索引:
| ?序號? | ?名稱? |
| 1 | ?人人都是 DBA(I)SQL Server 體系結構 |
| 2 | ?人人都是 DBA(II)SQL Server 元數據 |
| 3 | ?人人都是 DBA(III)SQL Server 調度器 |
| 4 | ?人人都是 DBA(IV)SQL Server 內存管理 |
| 5 | ?人人都是 DBA(V)SQL Server 數據庫文件 |
| 6 | ?人人都是 DBA(VI)SQL Server 事務日志 |
| 7 | ?人人都是 DBA(VII)B 樹和 B+ 樹 |
| 8 | ?人人都是 DBA(VIII)SQL Server 頁存儲結構 |
| 9 | ?人人都是 DBA(IX)服務器信息收集腳本匯編 |
| 10 | ?人人都是 DBA(X)資源信息收集腳本匯編 |
| 11 | ?人人都是 DBA(XI)I/O 信息收集腳本匯編 |
| 12 | ?人人都是 DBA(XII)查詢信息收集腳本匯編 |
| 13 | ?人人都是 DBA(XIII)索引信息收集腳本匯編 |
| 14 | ?人人都是 DBA(XIV)存儲過程信息收集腳本匯編? |
| 15 | ?人人都是 DBA(XV)鎖信息收集腳本匯編 |
本文轉自匠心十年博客園博客,原文鏈接:http://www.cnblogs.com/gaochundong/p/everyone_is_a_dba_sqlserver_database_files.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的人人都是 DBA(V)SQL Server 数据库文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统架构师-基础到企业应用架构-系统设计
- 下一篇: 网络测试与分析工具简介