随笔分类 - SQL SERVER
摘要:简介 SQL Server查询分析器是基于开销的。通常来讲,查询分析器会根据谓词来确定该如何选择高效的查询路线,比如该选择哪个索引。而每次查询分析器寻找路径时,并不会每一次都去统计索引中包含的行数,值的范围等,而是根据一定条件创建和更新这些信息后保存到数据库中,这也就是所谓的统计信息。 如何查看统计信息 查看SQL Server的统计信息非常简单,使用如下指令: ...
阅读全文
摘要:简介 我们都听说过RAID,也经常作为SQL DBA、开发人员或构架师在工作中讨论RAID。但是,其实我们很多人都对RAID的原理,等级,以及RAID是如何影响SQL Server性能并不甚了解。 本篇文章就是为了补上这一课。 磁盘构架 今天的磁盘,和70年代45rpm(转/分钟)的唱片机很像(你还能记得吗?),仅仅是一个有着轴(磁道)旋转的媒体(面)并将数据存入称之为扇区的磁盘段。 就像唱片机那样,磁盘驱动器拥有一个摆臂来控制针(在这里可以称之为”磁头”)来访问数据。但对于磁盘来说,并不像唱片机那样只读,而是既可以读又可以写。 为了从...
阅读全文
摘要:在开始阅读本文之前,请确保你已经阅读过上一篇文章,文章地址: 理解SQL Server中的权限体系(上)----主体 简介 在上一篇文章中,我对主体的概念做了全面的阐述。本篇文章接着讲述主体所作用的安全对象以及所对应的权限。 理解安全对象(Securable) 安全对象,是SQL Server 数据库引擎授权系统控制对其进行访问的资源。通俗点说,就是在SQL Server权限体系下控制的对象,因为所有的对象(从服务器,到表,到视图触发器等)都在SQL Server的权限体系控制之下,所以在SQL Server中的任何对象都可以被称为安全对象...
阅读全文
摘要:简介 权限两个字,一个权力,一个限制。在软件领域通俗的解释就是哪些人可以对哪些资源做哪些操作。在SQL Server中,”哪些人”,“哪些资源”,”哪些操作”则分别对应SQL Server中的三个对象,分别为主体(Principals),安全对象(Securables)和权限(Permissions),而权力和限制则是对应了SQL Server中的GRENT和DENY。对于主体,安全对象和权限的初步理解,见图1. 图1.简单理解主体,安全对象和权限的关系 对于图1中的造句来说,并没有主语,也就是并没有说谁给予的权限(难道是上帝?)。你可以理解为S...
阅读全文
摘要:写在前面:搞了SQL Server时间也不短了,对B树的概念也算是比较了解。去网上搜也搜不到用C#或java实现的B树,干脆自己写一个。实现B树的过程中也对很多细节有了更深的了解。 简介 B树是一种为辅助存储设计的一种数据结构,在1970年由R.Bayer和E.mccreight提出。在文件系统和数据库中为了减少IO操作大量被应用。遗憾的是,他们并没有说明为什么取名为B树,但按照B树的性质来说B通常被解释为Balance。在国内通常有说是B-树,其实并不存在B-树,只是由英文B-Tree直译成了B-树。 一个典型的 B树如图1所示。 图1.一个典型的B树 符合如下特征的树才可以...
阅读全文
摘要:简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程。在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在的机房,而是作为当数据库被破解或是备份被窃取后的最后一道防线。通过加密,使得未被授权的人在没有密钥或密码的情况下所窃取的数据变得毫无意义。这种做法不仅仅是为了你的数据安全,有时甚至是法律所要求的(像国内某知名IT网站泄漏密码这种事在中国可以道歉后不负任何责任了事,在米国妥妥的要破产清算)。 SQL Server中的加密简介 在SQL Server2000和以前的版本,是...
阅读全文
摘要:简介 数据库快照,正如其名称所示那样,是数据库在某一时间点的视图。是SQL Server在2005之后的版本引入的特性。快照的应用场景比较多,但快照设计最开始的目的是为了报表服务。比如我需要出2011的资产负债表,这需要数据保持在2011年12月31日零点时的状态,则利用快照可以实现这一点。快照还可以和镜像结合来达到读写分离的目的。下面我们来看什么是快照。 什么是快照 数据库快照是 SQL Server 数据库(源数据库)的只读静态视图。换句话说,快照可以理解为一个只读的数据库。利用快照,可以提供如下好处: 提供了一个静态的视图来为报表提供服务 ...
阅读全文
摘要:简介 在SQL Server中,每一个查询都会找到最短路径实现自己的目标。如果数据库只接受一个连接一次只执行一个查询。那么查询当然是要多快好省的完成工作。但对于大多数数据库来说是需要同时处理多个查询的。这些查询并不会像绅士那样排队等待执行,而是会找最短的路径执行。因此,就像十字路口需要一个红绿灯那样,SQL Server也需要一个红绿灯来告诉查询:什么时候走,什么时候不可以走。这个红绿灯就是锁。 图1.查询可不会像绅士们那样按照次序进行排队 为什么需要锁 在开始谈锁之前,首先要简单了解一下事务和事务的ACID属性。可以参看我之前的一篇关于ACI...
阅读全文
摘要:简介 SQL Server2012中新增的AlwaysOn是一个新增高可用性解决方案。在AlwaysOn之前,SQL Server已经有的高可用性和数据恢复方案,比如数据库镜像,日志传送和故障转移集群.都有其自身的局限性。而AlwaysOn作为微软新推出的解决方案,提取了数据库镜像和故障转...
阅读全文
摘要:简介 SQL Server2012新增的Indirect CheckPoint允许CheckPoint的恢复间隔设置到数据库级别,而不是以前那样实例级别。 在数据库级别设置的恢复时间以秒为单位,而不是在实例级别的以分钟为单位。这可以更精确的保证数据库Recovery的最大时间。 配置Indirect CheckPoint Indirect Checkpoint是数据库级别的。在SQL SERVER中,包括Contained Database,SQL Server把一些设置从实例级别转到了数据库级别。 按照MSDN上对Indirect CheckP...
阅读全文
摘要:简介 SQL SERVER2012实现了类似C#抛出异常的Throw语句。相比较于SQL Server2005之前使用@@ERROR,和SQL Server2005之后使用RAISERROR()引发异常都是一个不小的进步,下面来看一下Throw的用法。 RAISERROR和THROW比较 在SQL Server2005/2008中,使用RAISERROR和TRY…CATCH语句来抛出异常相比较根据@@ERROR进行判断来讲已经进步了很多。但是使用RAISERROR有一个非常不好的一点是无法返回真正出错的行数。如图1所示。 图1.使用RAISER...
阅读全文
摘要:简介 SQL Server 2012新增的Contained Database是为了解决数据库在不同SQL Server实例之间迁移的问题。在以往的情况下,数据库本身并不包含一些实例级别的配置参数(比如:数据库的一些metadata和登录名之类的)将数据库从一台服务器迁移到另一台服务器使用备份和恢复(或分离和附加)使得需要额外工作来设置这些数据库实例级别的metadata,而使用Contained Database,可以将这类信息包含在数据库中,从而大大减少这类工作的工作量。 下面我们从配置Contained Database开始。 配置Contained Data...
阅读全文
摘要:简介 SQL Server2012新增了一些内置函数来让开发人员使用起来更加容易。可以减少代码量,下面我们将SQL Server新增的函数分为几类分别探讨一下。 字符串类函数 SQL Server2012中提供了两个和字符串相关的函数,分别为Concat和Format. Concat如其名称所示,用于连接两个字符串.但比过去的增强是可以免去类型转换的烦恼而直接将多个值连接为一个String值进行返回,如图1所示. 图1.Concat示例 Concat的MSDN链接为:http://msdn.microsoft.com/en-...
阅读全文