SQLServer系统数据库详解
介绍
这⾥我们介绍SQL Sever内部的系统数据库的作⽤和⽤户数据库之间联系,关于SQL Sever如何管理⽤户数据库的原理,对于每个数据库开发⼈员和DBA都是必须掌握的。
SQL Sever系统数据库是⽤来存储系统级的数据和元数据。
SQL Sever包含了6个系统数据库:Master 、Model 、MSDB 、TempDB 、Resource 、Distribution 。
不知道你有没有疑问?在SQL Sever Manage⾥不是只有4前⾯个数据?
其实系统数据包含了Master, Model, MSDB, TempDB, 和⼀个隐藏的Resource 数据库。如果你的服务是⼀个分布式的据库服务,那就还有个系统的distribution数据库。接下来我们会对这六个系统数据库分别做出解释,说明其⽤途。
Master数据库
Master数据库记录了所有的SQL Server数据库系统的系统级信息。包括实例范围内的元数据,如登录帐号,
终端,连接服务器和系统配置设置元数据。另外,Master是数据库,记录了所有其他数据库的基本信息,以及这些数据库⽂件的位置,并记录为SQL Server的初始化信息。因此,如果Master数据库不可⽤的话,SQL Server是⽆法启动的。但是在SQL Server 2005或者更⾼版本⾥并不是把系统信息存储在master 数据库中,⽽是在Resource数据库。但是,系统的信息在逻辑上表现还是在Master数据库中。⽽且我们知道,这些系统数据库是存放在C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA。
对于Master数据库来说,数据⽂件和⽇⼦⽂件分别是在该路径下的master.mdf和mastlog.ldf。
但是操作Master数据库会有些限制,下⾯列举⼀些case(为了说明原意还是写了英⽂),
Adding files or filegroups.
Changing collation. The default collation is the server collation.
Changing the database owner. Master is owned by dbo.
Creating a full-text catalog or full-text index.
Creating triggers on system tables in the database.
Dropping the database.
Dropping the guest user from the database.
Enabling change data capture.
Participating in database mirroring.
Removing the primary filegroup, primary data file, or log file.
Renaming the database or primary filegroup.
Setting the database to OFFLINE.
Setting the database or primary filegroup to READ_ONLY.
值得注意的是,我们操作Master数据库时,会对当前Master数据库做⼀个备份,⽽且他的备份⼯作⼀般在以下⼀些操作时执⾏:Creating, modifying, or dropping any database
Changing server or database configuration values
Modifying or adding logon accounts
因此不要在Master数据⾥创建对象,否则Master数据库会经常被做备份。⽽且也不要对Master数据库的'TRUSTWORTHY'选项设置为'ON'。
Model数据库
Model数据库是⼀个模板数据库。每当创建⼀个新的数据库(包括系统数据库的TempDB),会创建⼀个以Model数据库为副本数据库,并更改成你创建数据库时所⽤的名称。这样的的优点是可以通过模板数据库先前创建好基本对象,然后创建新数据库,这样新建⽴的数据库就有了该基本对象。
举个例⼦,下⾯是怎么样⽤Model数据库来创建⼀个⾃⼰的数据实例。
USE Model
GO
CREATE FUNCTION dbo.Msg (@String VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
SET @String='Running this from Model for Database'
RETURN @String
END
CREATE DATABASE MyDB;server系统和普通系统的区别
USE MyDB
GO
SELECT dbo.Msg('MyDB');
-----------------------------------------
Running this from Model for MyDB Database
(1 row(s) affected)
CREATE DATABASE DEMO;
USE DEMO
GO
SELECT dbo.Msg('DEMO');
-----------------------------------------
Running this from Model for DEMO Database
(1 row(s) affected)
MSDB数据库
MSDB数据库是SQL Server代理的数据库。这是因为SQL Server代理是通过使⽤MSDB数据库来做存储⾃动化作业定义,作业调度,操作定义,触发提醒定义。代理是负责⼏乎所有⾃动化操作和调度操作。MSDB还包含了所有的⼯作准备,⽐如对于开始任何⼯作,得到了状态或停⽌作业命令,这些都是运⾏在MSDB数据库中。
Use msdb
GO
sp_help_job
sp_start_job
sp_stop_job
MSDB数据库不仅仅是SQL Server代理来⼤量使⽤的唯⼀服务,⽐如Broker服务,数据库邮件服务和Reporting服务也是使⽤MSDB数据库来保存调度信息。除了之外,SQL Server集成服务(SSIS)也利⽤了MSDB数据库为SSIS包存储。
TempDB数据库
TempDB数据库是由SQL Server⽤于暂时存储数据的。TempDB数据库被经常使⽤的在SQL Server操作中,所以认真的计划和评价它的⼤⼩和位置是⾄关重要的,以确保有效的SQL Server数据库操作。TempDB数据库被数据库引擎⽤来保存和存储临时对象(如临时表,视图,游标和表值变量),这些当然也可以由由数据库程序员创建使⽤。
此外,TempDB数据库被SQL Server数据库引擎⽤来保存中间查询结果,⽤于排序操作前或操作其他数据。例如,如果你写⼀个查询,返回100⾏,你想通过⼀个结果的⽇期值排序时,SQL Server可能⾸先把未排序的结果发送到⼀个临时⼯作表中,然后将执⾏排序操作,然后返回排序你的结果。如果联机索引操作执⾏中,tempdb数据库会保存这个索引。
另⼀个需要牢记的⼀点是,对于TempDB数据库,是所有⽤户可以访问的,可以创建和创造和修改临时对象。这种访问有可能会带来死锁和⼤⼩限制的问题,因此就像任何其他SQL Server数据库,对tempdb数据库的监测是很重要的。
Resource数据库
接着介绍下Resource系统数据库。Resource数据库是⼀个只读数据库,包含所有的SQL Server实例使⽤的系统对象。Resource数据库是⽆法访问作为⼀个正常的数据库,也不能像正常数据库那样操作。它在逻辑上被看作是系统模式上的。它不包含任何⽤户数据或元数据。然⽽,它包含了所有的系统对象的结构和说明。
这种设计使得能够快速建⽴⼀个新的服务包应⽤,只要更换⼀个新的现有Resource数据库的。⽽且,假如要恢复⼀个服务包,你也只要把旧的Resource数据库更换成新的Resource数据库。这样极⼤的⽅⾯了数据库服务要求删除或增加了新的系统对象后简单安全运⾏。Resource数据库的物理⽂件名是mssqls
ystemresource.mdf和mssqlsystemresource.ldf。默认情况下,这些⽂件位于 C:\Program
Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\下。每个SQL Server实例都只有⼀个关联的mssqlsystemresource.mdf⽂件,和其它实例不共享此⽂件。资源数据库依赖于master数据库的位置。注意,如果你移动master数据库,则必须同时移动资源数据库到相同的位置。
下⾯的代码可以来确定Resource数据库的版本号:
SELECT SERVERPROPERTY('ResourceVersion');
GO
----------
10.00.1600To determine when the Resource database was last updated, use:
Collapse | Copy Code
SELECT SERVERPROPERTY('ResourceLastUpdateDateTime');
GO
-----------------------
Distribution数据库
最后讲的是Distribution系统数据库。⼀旦服务器实例配置成⼀个复制的分布数据库,Distribution数据库被创建在⽬录中。分发数据库存储元数据和历史数据的所有类型的复制和事务复制的事务。
结束语
对于在MS SQL Server数据库开发的初学者,我觉得有必要得到很好的了解系统数据库的基础知识,每⼀个是什么⽤途。希望这篇⽂章能够给你们带来帮助。
参考:
在Sqlserver数据库历代版本当中,系统数据库有四个,master,model,msdb,tempdb
----记录 SQL Server 系统的所有系统级信息。这包括实例范围的元数据(例如登录帐户)、端点、链接服务器和系统配置设置。此
外,master 数据库还记录了所有其他数据库的存在、数据库⽂件的位置以及 SQL Server 的初始化信息。
因此,如果 master 数据库不可⽤,则 SQL Server ⽆法启动。在 SQL Server 中,系统对象不再存储在 master 数据库中,⽽是存储在 Resource 数据库中。
msdn.microsoft/zh-cn/library/ms187837.aspx
SA的密码存储在这个数据库⾥哦哦哦,暴⼒破解吧,少年!
----在 SQL Server 实例上创建的所有数据库的模板。因为每次启动 SQL Server 时都会创建 tempdb,所以 model 数据库必须始终存在于SQL Server 系统中。
msdn.microsoft/zh-cn/library/ms186388.aspx
因为是模板数据库,所以你懂的,很多继承类的模板,如安全模板都在这⾥。
----由 SQL Server 代理⽤于计划警报和作业,也可以由其他功能(如 Service Broker 和数据库邮件)使⽤。
msdn.microsoft/zh-cn/library/ms187112.aspx
应该是仆从数据库,存储⼀些辅助⼯作的数据库的信息,如备份,邮件⽇志。
-
---临时存储数据库,这⾥是存储⼀些缓存类的操作,如临时表。
msdn.microsoft/zh-cn/library/ms190768.aspx
百度了之后,在MSDN发现Sqlserver数据库⾥其实还有个隐藏的系统数据库
Resource 数据库是只读数据库,它包含了 SQL Server 中的所有系统对象。SQL Server 系统对象(例如 sys.objects)在物理上持续存在于Resource 数据库中,但在逻辑上,它们出现在每个数据库的 sys 架构中。Resource 数据库不包含⽤户数据或⽤户元数据。
Resource 数据库可⽐较轻松快捷地升级到新的 SQL Server 版本。在早期版本的 SQL Server 中,进⾏升级需要删除和创建系统对象。由于Resource 数据库⽂件包含所有系统对象,因此,现在仅通过将单个 Resource 数据库⽂件复制到本地服务器便可完成升级。
⼀些系统表以及Sqlserver每个数据库所有的⼀些常识,只介绍⼀些常⽤的
sys.objects 包含很多信息如Sqlserver2005⾥⽤处最⼤的object_id,存储过程是否是⽤户创建的等信息,在Sqlserver2005之前的版本是sysobjects,从Sqlserver2005开始每个⽤户数据库(你⾃⼰建⽴的数据库)都含有这个系统表,表⽰不知道Sqlserver2000是否是,具体分析见我⽤在动态表头上,利⽤这个表的object_id配合另外⼀些系统表,就可以实现动态表头。
和区别在于⼀个是列出所有的,⼀个是只列出当前⽤户数据库的键值,数据字典表很需要这区别出来这两个表,不然取出的东西会不准确。
还有其他的系统表,可以见
转载:
原⽂链接:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论