摘要:
误区一直以为只要一个表含有聚集索引,那么在data page中的数据行是排序的。比如原来data page中有1.2.4.5.6这样四条记录,那么我要插入3这条记录,应该是先将456三条记录往后移,然后再插入3这条记录。这样的理解是错误的。正解首先从上面的数据行插入说起,如果要移动后面的记录来插入中间的记录,这么会影响性能,这是不允许的。sql server肯定有其他办法来实现有序。今天读inside sql server 2005第七章的时候才明白,其实data page内的数据可以无序,但是可以通过data page中的OFFSET TABLE实现有序。实验我们需要创建一个测试表,并在一个 阅读全文
摘要:
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 往已存在 阅读全文
摘要:
引用: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 阅读全文
摘要:
参考文献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 阅读全文
摘要:
前言在阅读之前可以参考之前的一篇博客:通过DBCC IND分析表组织和索引组织1.DBCC PAGE基础page是sql server中最小的IO单位,在数据库中如果我们只是查询一行记录,也会读取这一行所在的整个页信息。那么page里面是如何存储信息的呢?我们可以通过dbcc page解析页的相信信息。当我们知道page是如何存储数据以后,对于我们后面解析聚集索引和非聚集索引的叶子节点非常有帮助。因为聚集索引的叶子节点是data page,那么我们dbcc page聚集索引的叶子节点,得到的应该就是真实的数据。如果我们dbcc pag非聚集索引的叶子节点,得到的可能是聚集索引的键值,也可能得到 阅读全文
摘要:
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 阅读全文
摘要:
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... 阅读全文
摘要:
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,其他 阅读全文
摘要:
参考文献: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 阅读全文
摘要:
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 阅读全文
摘要:
原文:http://msdn.microsoft.com/en-us/library/ms179355(SQL.90).aspx检查点在数据库中的执行过程:在日志文件中写入LOP_BEGIN_CKPT表示checkpoint开始、记录MinLSN,MinLSN=min(LSN of the start of the checkpoint,LSN of the start of the oldest active transaction)如果数据库使用的是简单恢复模式,则截断(truncate)MinLSN之前的所有VLFs。如果是完整恢复或者是大容量日志模式,不会截断任何事务日志。将dirty 阅读全文
摘要:
官方原文:http://msdn.microsoft.com/en-us/library/ms179355(SQL.90).aspxThe transaction log in a database maps over one or more physical files. Conceptually, the log file is a string of log records(一串日志记录). Physically, the sequence of log records is stored efficiently in the set of physical files that imp 阅读全文
摘要:
引用:http://msdn.microsoft.com/en-us/library/ms180892(SQL.90).aspx The SQL Server 2005 transaction log operates logically as if the transaction log is a string of log records. Each log record is identified by a log sequence number (LSN). Each new log record is written to the logical end of the log wi. 阅读全文
摘要:
引用:http://msdn.microsoft.com/en-us/library/ms186259(SQL.90).aspx最近在学习sql server事务日志的东西,知道现在大部分数据库都支持先写log再写数据的策略,也就是保证数据不先于日志写入磁盘。我们将这样的日志叫做Write-Ahead Transaction Log。Write-Ahead Transaction Log的完整解释可以在MSDN上找打,写的非常详细,也很透彻,不难懂,我把这部分内容摘录下来。Write-Ahead Transaction Log的解释SQL Server 2005 uses a write-ah 阅读全文
摘要:
前言在前篇的一篇博客Sql Server中的表组织和索引组织(聚集索引结构,非聚集索引结构,堆结构)中写到了数据中表和索引的结构。当时在写聚集索引的时候说聚集索引的叶子节点就是真实的数据,而非聚集索引的叶子节点是指针,要么指向聚集索引,要么指向行号。当时就在考虑一个,如果索引都带真实数据了,那么到底是索引大还是表呢呢?今天在msdn上查到了如何估算数据库的大小,其中在估算表的大小时,给出了如下说明:可以使用下列步骤估计在表中存储数据所需的空间:按照估计堆的大小或估计聚集索引的大小中的说明计算堆或聚集索引所需的空间。对于每个非聚集索引,按照估计非聚集索引的大小中的说明计算其所需的空间。对步骤 1 阅读全文
摘要:
活动事务日志所谓活动事务日志,就是所有没有提交的事务所产生的日志记录,以及在它们之后的所有日志记录。如果一个事务还没有提交,那它可以在任何时候回滚。SQL Server必须做好这种准备,以便能够从日志记录中找回修改前的数据内容,完成回滚。在SQL Server里面,所有的日志记录都有严格顺序,中间不可以有任何跳跃。所以如果某个数据库有没有提交的事务,SQL Server会标记所有从这个事务开始的日志记录(不管和这个事务有没有关系)为活动事务日志 。这些日志记录都有可能“需要”被用来做回滚。事务的提交与回滚事务在提交前,所有的操作都是在虚拟的环境中进行的,事务提交时才将事务进行的所有修改更新到数 阅读全文
摘要:
Question:What is Collation? How it will affect SQL Server database, and server?Answer:字符的存储 在将collation之前,我们首先需要知道字符是如何被存储的。在计算机中,所有数据都是用0和1这样的位来描述。一个字节有8位,因此一个字节最多可以描述256个字符。在欧美国家,比如美国,他们的文字字符主要就是26个字母加上一些特殊符号(+-*/等),用一个字节就可以存储,一个国家使用的所有字符就是一个code page,用一个字节存储字符的code page 叫做single-byte code page。但是 阅读全文
摘要:
参考文献:http://www.cnblogs.com/mekong/archive/2009/04/17/1437996.htmlhttp://msdn.microsoft.com/en-us/library/ms186939.aspx前言这几天在查阅sql server collation的问题,这其中就牵涉到了unicode,non-unicode,varchar,nvarchar,ANSI等字符编码的问题。首先我们讲解一些基础背景知识定长或变长所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;有var前缀的,表示是实际存储空 阅读全文
摘要:
0.参考文献[1]SQL Server的还原(2)——STOPAT[2]SQL Server的还原[3]恢复到日志序列号 (SQL Server)1.日志序列号的概述事务日志中的每个记录都由一个日志序列号 (LSN) 唯一标识。并且LSN是有序的,后发生的日志其LSN肯定大于早发生的日志。2.还原到 LSN 的 Transact-SQL 语法通过使用RESTORE语句,可以在 LSN 处或刚好在 LSN 之前停止,如下所示:使用 WITH STOPATMARK='lsn:<lsn_number>'子句,其中 lsn:<lsnNumber>是一个字符串,它 阅读全文
摘要:
参考文献[1]SQL Server的还原[2]如何还原到某个时间点 (Transact-SQL)数据库备份在参考1中我们提到了sqlserver中数据库还原的操作,但是没有提到数据库还原中一个很有用的关键字STOPAT。下面我们就来讨论如何使用STOPAT关键字来还原数据库。--开始:实验4:使用STOPAT关键字来还原数据-------------------------------------step1:创建备份设备EXEC sp_addumpdevice 'disk', 'TESTDB2Backups', 'd:\backup\TESTDB2Bac 阅读全文