介绍
这里我们介绍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 '+@String+' Database'
RETURN @String
END

CREATE DATABASE MyDB;
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数据库的物理文件名是mssqlsystemresource.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数据库开发的初学者,我觉得有必要得到很好的了解系统数据库的基础知识,每一个是什么用途。希望这篇文章能够给你们带来帮助。

参考:http://www.codeproject.com/KB/database/Understanding_SysDatabase.aspx

在Sqlserver数据库历代版本当中,系统数据库有四个,master,model,msdb,tempdb

master----记录 SQL Server 系统的所有系统级信息。这包括实例范围的元数据(例如登录帐户)、端点、链接服务器和系统配置设置。此外,master 数据库还记录了所有其他数据库的存在、数据库文件的位置以及 SQL Server 的初始化信息。因此,如果master 数据库不可用,则 SQL Server 无法启动。在 SQL Server 中,系统对象不再存储在 master 数据库中,而是存储在 Resource 数据库中。

http://msdn.microsoft.com/zh-cn/library/ms187837.aspx

SA的密码存储在这个数据库里哦哦哦,暴力破解吧,少年!

model----在 SQL Server 实例上创建的所有数据库的模板。因为每次启动 SQL Server 时都会创建tempdb,所以 model 数据库必须始终存在于 SQL Server 系统中。

http://msdn.microsoft.com/zh-cn/library/ms186388.aspx

因为是模板数据库,所以你懂的,很多继承类的模板,如安全模板都在这里。

msdb----由 SQL Server 代理用于计划警报和作业,也可以由其他功能(如 Service Broker 和数据库邮件)使用。

http://msdn.microsoft.com/zh-cn/library/ms187112.aspx

应该是仆从数据库,存储一些辅助工作的数据库的信息,如备份,邮件日志。

tempdb----临时存储数据库,这里是存储一些缓存类的操作,如临时表。

http://msdn.microsoft.com/zh-cn/library/ms190768.aspx

 

百度了之后,在MSDN发现Sqlserver数据库里其实还有个隐藏的系统数据库

Resource 数据库

Resource 数据库是只读数据库,它包含了 SQL Server 中的所有系统对象。SQL Server 系统对象(例如 sys.objects)在物理上持续存在于 Resource 数据库中,但在逻辑上,它们出现在每个数据库的 sys 架构中。Resource 数据库不包含用户数据或用户元数据。

Resource 数据库可比较轻松快捷地升级到新的 SQL Server 版本。在早期版本的 SQL Server 中,进行升级需要删除和创建系统对象。由于 Resource 数据库文件包含所有系统对象,因此,现在仅通过将单个 Resource 数据库文件复制到本地服务器便可完成升级。

http://msdn.microsoft.com/zh-cn/library/ms190940.aspx

一些系统表以及Sqlserver每个数据库所有的一些常识,只介绍一些常用的

sys.objects 包含很多信息如Sqlserver2005里用处最大的object_id,存储过程是否是用户创建的等信息,在Sqlserver2005之前的版本是sysobjects,从Sqlserver2005开始每个用户数据库(你自己建立的数据库)都含有这个系统表,表示不知道Sqlserver2000是否是,具体分析见sys.objects (Transact-SQL)。 我用在动态表头上,利用这个表的object_id配合另外一些系统表,就可以实现动态表头。

sys.all_columnssys.columns区别在于一个是列出所有的,一个是只列出当前用户数据库的键值,数据字典表很需要这区别出来这两个表,不然取出的东西会不准确。

还有其他的系统表,可以见对象目录视图 (Transact-SQL)

转载:http://www.cnblogs.com/yzb305070/archive/2011/07/17/2108682.html

关于SQL Server系统数据库详解的更多相关文章

  1. SQL Server表分区详解

    原文:SQL Server表分区详解 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆 ...

  2. MS SQL Server 数据库连接字符串详解

    MS SQL Server 数据库连接字符串详解 原地址:http://blog.csdn.net/jhhja/article/details/6096565 问题 : 超时时间已到.在从池中获取连接 ...

  3. SQL Server系统数据库备份最佳实践

    原文:SQL Server系统数据库备份最佳实践 首先了解主要的系统数据库: 系统数据库 master 包含登录信息和其他数据库的核心信息 msdb 存储作业.操作员.警报.备份还原历史.数据库邮件信 ...

  4. (5.1)sql server系统数据库

    关键词:mssql系统数据库,sql server系统数据库,tempdb的作用 master:它包含一个系统表集合,是整个实例的中央存储库,维护登录账户,其他数据库,文件分布,系统配置设置,磁盘空间 ...

  5. SQL Server 系统数据库

    Sql Server的系统数据库分为:master.model.msdb,resouce和tempdb,这五个数据库在SQL Server中各司其职,作为研发人员,很有必要了解这几个数据库的职责,下面 ...

  6. SQL Server 系统数据库恢复

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/故障恢复/master 概述 SQL Server 维护一组系统级数据库(称为“系统数据库”),这些数据库对于服务器实例的运行至关 ...

  7. Sql Server之数据类型详解

      数据类型是一种属性,用于指定对象可保存的数据的类型,SQL Server中支持多种数据类型,包括字符类型.数值类型以及日期类型等.数据类型相当于一个容器,容器的大小决定了装的东西的多少,将数据分为 ...

  8. SQL Server 安装 功能详解

    安装 SQL Server 功能     在“功能选择”页上,SQL Server 功能分为以下两个主要部分:实例功能和共享功能. “实例功能”表示为每个实例安装一次的组件,这样,您将具有它们的多个副 ...

  9. SQL Server 远程备份详解

    例1: 有A数据库服务器,B本机: 我现在想通过在B机器上通过代码调用SQL来执行A数据库的备份到B机器上 调用的SQL语句为:Backup Database MYDATABASE To Disk=' ...

随机推荐

  1. Socket 网络编程实践经验

    目录 目录 相关文章 Socket 与 HTTP 的区别 生产实践考虑 网络断开重连问题 Heartbeat 心跳机制 使用非阻塞模式下的 select 函数进行 Socket 连接检查 会话过期问题 ...

  2. VMware vSphere 虚拟化简介

    目录 目录 vSphere 简介 vSphere 提供的工具 vCenter vCenter 的功能 vCenter 管理界面上提供的操作功能 HOST CLUSTER TEMPLATE Virtua ...

  3. beanstalkd 安装和配置

    安装 安装以centos为例 yum install beanstalkd 配置 使用centos yum安装,通过查看服务脚本发现有这个配置文件 cat /etc/sysconfig/beansta ...

  4. 测开之路九十七:js的引用方式

    第一种:引用外部js文件 准备一个js文件 <!-- 引用外部的js --><script src="../js/js01.js"></script& ...

  5. SoapUI学习之SOAP和REST的区别

    一.Soap和Rest的定义 SOAP(Simple Object Access Protocol 简单对象访问协议),用于在Web Service中把远程调用和返回封装成机器可读的格式化数据,事实上 ...

  6. 【ABAP系列】SAP ABAP ALV设置背景图片

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP abap ALV设置背景图片 ...

  7. vuejs基础-MVVM结构

    Vue.js 基本代码 和 MVVM 之间的对应关系 处理过程: 每当用户进行业务处理时,如果需要进行业务处理,都会通过网络请求,去请求后端的服务器,此时,我们的这个请求,就会被后端的App.js监听 ...

  8. [c#]Extesion method

    做一个类似Vb.net里面with的方法 public static void Use<T>(this T item, Action<T> work) { work(item) ...

  9. [Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset)

    [Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset) 题面 一个长为 n 的序列 a.有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间 ...

  10. 使用 js 修饰器封装 axios

    修饰器 修饰器是一个 JavaScript 函数(建议是纯函数),它用于修改类属性/方法或类本身.修饰器提案正处于第二阶段,我们可以使用 babel-plugin-transform-decorato ...