随笔分类 -  DB:Sql Server

摘要:参考文献SQL Kerberos的原理及实验SQL Server native client与sqlcmd单独安装前言在上一篇博客SQL Kerberos的原理及实验中讲到了windows验证的两种模式分别是NTLM和Kerberos,那么他们有何区别,在功能上又有何不同。NTLM是一种比较简单的方法,能够在大部分情况下完成任务。但是它只能完成单跃点认证(只有一个客户端和一个SQL Server服务器)。有些情况下有双跃点(double hop)甚至多跃点的认证需求,这时候就需要用到Kerberos技术。例如,一个用户利用IE浏览器访问有数据库连接脚本的网页,连接配置为使用它自己的Window 阅读全文
posted @ 2012-08-12 01:25 xwdreamer 阅读(1909) 评论(0) 推荐(0) 编辑
摘要:参考文献Microsoft SQL Server企业级平台管理实践Kerberos ExplainedKerberos (protocol)wiki正文这一周一直在研究kerberos的原理,并做了一些实验,现在做一下总结。首先我们要知道,SQL Server中的验证机制。SQL Server有两种验证机制,一种是windows验证,还有一种是SQL Server验证,这也就对应了两种用户类型,即SQL Server自己的用户账号和Windows用户账号。对于SQL Server账号,SQL Server会对用户发过来的用户名与密码进行核对(比如我们安装数据库是自动创建的sa账号就是sql s 阅读全文
posted @ 2012-08-11 20:13 xwdreamer 阅读(2454) 评论(0) 推荐(1) 编辑
摘要:背景我有一台虚拟机,想要连接sql server,但是又不想安装sql server怎么办。方案sql server有专门的访问客户端叫做sql server native client,然后还有一个命令行连接程序sqlcmd,其中sqlcmd依赖于sql server native client。这两者可以在Microsoft® SQL Server® 2008 R2 功能包下载到。Microsoft® SQL Server® 2008 R2 Native ClientMicrosoft SQL Server 2008 R2 Native Client 阅读全文
posted @ 2012-08-10 18:06 xwdreamer 阅读(9306) 评论(2) 推荐(1) 编辑
摘要:之前写过一篇博客数据库连接池分析分析了,通过代码来分析数据库连接池的作用。这里要搞清楚一个概念,数据库连接池并不是数据库服务的内容,而是客户端应用程序创建的一种应用架构。所以我们在数据库服务器上找不到什么开启数据库连接池的选项。接下来将开启与不开启数据库连接池的区别。使用数据库连接池View Code using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlClient;namespace ConnectionPool{ class Pro... 阅读全文
posted @ 2012-08-07 14:00 xwdreamer 阅读(6407) 评论(0) 推荐(0) 编辑
摘要:参考文献:Sql Server的JDBC测试程序与远程连接前言:之前写过一篇博客:Sql Server的JDBC测试程序与远程连接,现在来讲讲在.net 平台下如何连接sql server数据库。有多种方式可以连接数据库,分别是ODBC,OLEDB,ADO,ADO.NET。每一种连接所使用的驱动程序以及连接字符串都不相同,具体如何写数据库连接字符串可以参考这个网站http://www.connectionstrings.com/。上面列出了大多数数据源的数据库连接字符串。ADO.NET首先我们将如何使用ado.net来连接数据库,这也是使用最频繁的方法了。参考程序如下:View Code us 阅读全文
posted @ 2012-08-07 11:41 xwdreamer 阅读(6561) 评论(0) 推荐(0) 编辑
摘要:之前在sql server configuration manager中的native client 11.0 configuration中设置client protocol的keep alive的时间的时候,发现并不起作用,我即使将keep alive的时间从默认的30000ms改成了25000ms,但是我用netmon测试的时候发现每一次客户端的keepalive还是没30秒发送一次。当时以为我改了sql server configuration manager中的keepalive,但是没有修改相应的注册表,所以我去注册表下查看相应的内容,keepalive所对应的注册表键值如下:HKE 阅读全文
posted @ 2012-08-06 13:50 xwdreamer 阅读(9506) 评论(0) 推荐(0) 编辑
摘要:背景:今天在做keepalive的实验,设法模拟keepalive不成功的场景,从而达到“the local TCP will keep sending “Keep Alive” packet in an interval of KeepAliveInterval for TcpMaxDataRetransmissions times.”的目的。但是通过:stop sqlserver服务,tcp\ip能够检测到服务断开,因此在netmon中可以看到最后一条信息是服务器端发给客户端的的keepalive,scale factor=0。pause sqlserver服务,keepalive继续进行 阅读全文
posted @ 2012-08-03 20:07 xwdreamer 阅读(4529) 评论(0) 推荐(0) 编辑
摘要:参考文献:http://technet.microsoft.com/en-us/library/ms188388.aspx正文本文主要讲解如何使用alter index来rebuild和reorganize索引来清除碎片,rebuild能够完全清除碎片,但是reorganize却不能。Rebuild index--1.准备实验数据select * into Employee from AdventureWorks2008R2.HumanResources.Employee;--2.查看使用空间:Employee 290 72 KB 56 KB 8 KB ... 阅读全文
posted @ 2012-07-31 21:07 xwdreamer 阅读(6334) 评论(0) 推荐(0) 编辑
摘要:在SQL Server标准的已提交读(READ COMMITTED)隔离级别下,一个读操作会和一个写操作相互阻塞。未提交读(READ UNCOMMITTED)虽然不会有这种阻塞,但是读操作可能会读到脏数据,这是大部分用户不能接受的。有些关系型数据库(例如Oracle)使用的是另一种处理方式。在任何一个修改之前,先对修改前的版本做一个复制[WX1],后续的一切读操作都会去读这个复制的版本,修改将创建一个新的版本。在这种处理方式下,读、写操作不会相互阻塞。使用这种行版本控制机制的好处,是程序的并发性比较高,但是缺点是用户读到的虽然不是一个脏数据,但是可能是个正在被修改马上就要过期的数据值[WX.. 阅读全文
posted @ 2012-07-30 15:39 xwdreamer 阅读(9150) 评论(4) 推荐(5) 编辑
摘要:1. What is the structure of a table when it does not have index and have index?1.1.Table OrganizationThe following illustration shows the organization of a table. A table is contained in one or more partitions and each partition contains data rows in either a heap or a clustered index structure. The 阅读全文
posted @ 2012-07-30 11:57 xwdreamer 阅读(2931) 评论(0) 推荐(1) 编辑
摘要:误区一直以为只要一个表含有聚集索引,那么在data page中的数据行是排序的。比如原来data page中有1.2.4.5.6这样四条记录,那么我要插入3这条记录,应该是先将456三条记录往后移,然后再插入3这条记录。这样的理解是错误的。正解首先从上面的数据行插入说起,如果要移动后面的记录来插入中间的记录,这么会影响性能,这是不允许的。sql server肯定有其他办法来实现有序。今天读inside sql server 2005第七章的时候才明白,其实data page内的数据可以无序,但是可以通过data page中的OFFSET TABLE实现有序。实验我们需要创建一个测试表,并在一个 阅读全文
posted @ 2012-07-30 00:50 xwdreamer 阅读(738) 评论(0) 推荐(0) 编辑
摘要:0.参考文献http://msdn.microsoft.com/zh-cn/library/ms172984(SQL.90).aspx1.实验数据我们将利用AdvantureWords2008R2中的Sales.SalesOrderDetail表,其中有12万条数据,非常适合用于测试。不过我们不直接在这张表上做测试,因为这张表上已经有索引了。我们需要新建一张表,将该表中的数据导入我们新建的test和test2表。test和test2的创建方法有两种,我们选择第二种。View Code --实验1:使用INSERT INTO tablename(col1,col2...) SELECT 往已存在 阅读全文
posted @ 2012-07-19 16:09 xwdreamer 阅读(6371) 评论(0) 推荐(0) 编辑
摘要:引用:http://msdn.microsoft.com/en-us/library/ms190969(SQL.105).aspx正文An Index Allocation Map (IAM) page maps the extents in a 4-gigabyte (GB) part of a database file used by an allocation unit. An allocation unit is one of three types(allocation unit 有三种类型,分别是IN_ROW_DATA,LOB_DATA,ROW_OVERFLOW_DATA):IN 阅读全文
posted @ 2012-07-19 13:31 xwdreamer 阅读(1334) 评论(0) 推荐(0) 编辑
摘要:参考文献Difference between an Index and a Primary Key本质区别首先primary key跟unique都是Constraints,属于logical object,而index则是physical object,会占用index page并被保存在磁盘上。Primary key Constraints和unique ConstraintsPrimary key Constraints和unique Constraints都需要保证列是唯一的,不能有重复值,但是一张表只能有一个Primary key Constraints,但是可以有多个unique 阅读全文
posted @ 2012-07-19 10:08 xwdreamer 阅读(7099) 评论(0) 推荐(3) 编辑
摘要:前言在阅读之前可以参考之前的一篇博客:通过DBCC IND分析表组织和索引组织1.DBCC PAGE基础page是sql server中最小的IO单位,在数据库中如果我们只是查询一行记录,也会读取这一行所在的整个页信息。那么page里面是如何存储信息的呢?我们可以通过dbcc page解析页的相信信息。当我们知道page是如何存储数据以后,对于我们后面解析聚集索引和非聚集索引的叶子节点非常有帮助。因为聚集索引的叶子节点是data page,那么我们dbcc page聚集索引的叶子节点,得到的应该就是真实的数据。如果我们dbcc pag非聚集索引的叶子节点,得到的可能是聚集索引的键值,也可能得到 阅读全文
posted @ 2012-07-18 10:42 xwdreamer 阅读(3782) 评论(7) 推荐(5) 编辑
摘要:0.参考文献:Sql Server中的表组织和索引组织(聚集索引结构,非聚集索引结构,堆结构)利用DBCC PAGE查看SQL Server中的表和索引数据1.DBCC IND跟DBCC PAGE简介1.1.DBCC IND命令DBCC IND ( { 'dbname' | dbid }, { 'objname' | objid }, { nonclustered indid | 1 | 0 | -1 | -2 } [, partition_number] )1.2.DBCC输出字段描述Column(列)Meaning(含义)PageFID索引所在文件IDPag 阅读全文
posted @ 2012-07-17 21:13 xwdreamer 阅读(3326) 评论(2) 推荐(3) 编辑
摘要:0.参考文献SELECT INTO 和 INSERT INTO SELECT 两种表复制语句1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1 要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下: --1.创建表 create table OrderDetail2 ( SalesOrderDetailID int primary key not nu... 阅读全文
posted @ 2012-07-17 09:42 xwdreamer 阅读(1247) 评论(0) 推荐(0) 编辑
摘要:sql server会在一下三种情况下认为你不需要维护日志备份:使用BACKUP LOG WITH NO_LOG 或者 BACKUP LOG WITH TRUNCATE_ONLY来进行日志备份简单恢复模式从来没有进行过完整备份对于上述情况,数据库日志会在“足够满”的时候自动截断,以使VLFs重用。日志截断虽然是VLFs重用,但是不会收缩日志文件的大小。---实验:验证日志的自动截断与日志收缩-------------------------------新建pubs数据库USE pubs--step1:查看pubs数据库中的VLFs信息,第一个VLFs的FSeqNo=23,Status=0,其他 阅读全文
posted @ 2012-07-16 19:10 xwdreamer 阅读(535) 评论(0) 推荐(0) 编辑
摘要:参考文献:SQL 2005修改系统表SQL Server 2005中修改系统表的方法如何登入DAC(SQL Server 2005)ResourceDB Location ChangesResourceDB Location Changes1.What is resourcedb?(from msdn)The Resource database is a read-only database that contains all the system objects that are included with SQL Server. SQL Server system objects, suc 阅读全文
posted @ 2012-07-16 15:32 xwdreamer 阅读(2599) 评论(0) 推荐(0) 编辑
摘要:Page LSNs and RecoveryEvery database page has an LSN in the page header that reflects the location in the transaction log of the last log entry that modified a row on this page. Each log record for changes to a data page has two LSNs associated with it. In addition to the LSN for the actual log reco 阅读全文
posted @ 2012-07-16 15:09 xwdreamer 阅读(689) 评论(0) 推荐(0) 编辑