25

MSSQL:Default Trace

MSSQL(2k5,2k8)默认运行一个Trace,所以在系统故障是可以使用这个Trace来获取相关信息。
这个Trace跟踪以下事件:
Database
    * Data file auto grow
    * Data file auto shrink
    * Database mirroring status change
    * Log file auto grow
    * Log file auto shrink
Errors and Warnings
    * Errorlog
    * Hash warning
    * Missing Column Statistics
    * Missing Join Predicate
    * Sort Warning
Full-Text
    * FT Crawl Aborted
    * FT Crawl Started
    * FT Crawl Stopped
Objects
    * Object Altered
    * Object Created
    * Object Deleted
Security Audit
    * Audit Add DB user event
    * Audit Add login to server role event
    * Audit Add Member to DB role event
    * Audit Add Role event
    * Audit Add login event
    * Audit Backup/Restore event
    * Audit Change Database owner
    * Audit DBCC event
    * Audit Database Scope GDR event (Grant, Deny, Revoke)
    * Audit Login Change Property event
    * Audit Login Failed
    * Audit Login GDR event
    * Audit Schema Object GDR event
    * Audit Schema Object Take Ownership
    * Audit Server Starts and Stops
Server
    * Server Memory Change
查看Trace是否在运行以及Trace文件所在位置的方法:
select * from ::fn_trace_getinf(0)
当然我们也可以设置是否默认运行这个Trace,相关配置项名字为'default trace enabled'.
 
归类于:数据库 标签:Trace MSSQL
21
十二

Windows 2008 x64 and Microsoft.Jet.OLEDB.4.0

之前写了一篇介绍解析Excel文件的日志,当时因为没法在32位环境下运行而选择了第三方的ExcelReader,现在发现ExcelReader在多线程的情况下可能引起异常,而且现在解析Excel由一台独立服务器来完成,所以可以使用32位的解决方案,即直接使用OLEDB的方式。
 
设置IIS为32位运行模式,在IIS7上比较简单,在进程池上开启Enable 32-bit Application即可。
 
之后发现出现“The ‘Microsoft.Jet.OLEDB.4.0′ provider is not registered on the local machine." 异常信息。
解决这个问题需要去下载一个新的Jet引擎驱动包:MS 2007 Office System Driver
当然安装Office 2007会默认安装此驱动。
 
归类于:数据库 标签:JetOLEDB Access Excel
03
十一

SQLSERVER - 快照(SNAPSHOT)

快照(SNAPSHOT),是自SQLServer 2k5之后加入的新功能,能记录数据库某一时刻的只读静态视图。

实现的原理很简单,SQLServer的数据存储的基本单位是页,创建数据库快照时会创建一个稀疏文件,如果在快照创建之后,源数据库的某个页发生变化,则将旧的页复制到稀疏文件中,写入页和复制页是同时进行的。

查询快照时,如果涉及到变动的页则查询稀疏文件中的备份,否则依然查询源数据中的页。

数据库快照的常用场景
1、维护历史数据以生成报表
2、在进行重大更新之前创建快照来保护数据。
3、减少用户失误带来的影响,比如可以每24小时创建6到12个滚动快照,每创建一个新的快照,就删除最早的快照。
4、用来进行数据库测试和恢复。

对源数据库的限制
1、不能对源数据库进行删除、分离或还原,必须先删除数据库快照,但可以备份
2、源数据库性能会受到影响,因为每次更新页都会对快照执行“写入时复制”操作。
3、源数据库必须处于连接状态,除非该数据库在数据库镜像会话中式镜像数据库。
4、若要在镜像数据库中创建数据库快照,数据库必须处于同步镜像状态。

数据库快照的限制
1、必须与源数据库在同一个服务器实例上
2、始终对整个数据库拍摄快照
3、禁止对model、master、tempdb数据库创建快照
4、不能更改数据库快照文件的任何规范
5、不能备份和还原,附加或分离数据库快照
6、不能在FAT32文件系统或RAW分区上创建快照,应为所用的稀疏文件由NTFS文件系统提供。
7、不支持全文索引,所以若从快照恢复会清除全文索引

创建、恢复、删除数据库快照
CREATE DATABASE SNAPSHOT_NAME ON
(NAME=DB_NAME,FILENAME='physical path')
AS SNAPSHOT OF DB_NAME

RESTORE DATABASE DB_NAME FROM DATABASE_SNAPSHOT='SNAPSHOT_NAME'

DROP DATABASE SNAPSHOT_NAME
 
归类于:数据库 标签:SQLSERVER 快照
29

SQLServer联机丛书 - 实现数据库

1、创建数据库的用户将成为该数据库的所有者,可以更换数据库的所有者。
2、可以创建32,767个数据库,每个数据库可以创建不超过 2,147,483,647个对象。
3、可以为每个数据库创建32,767个文件组,文件组只能包含数据文件不能包含日志文件。
4、一个数据文件只能属于一个文件组。
5、在64位和32位环境中,SQL Server磁盘存储格式均相同,所以可以将32位环境中数据库附加到64位环境,反之亦然。
6、可以即时重命名数据库名称和表名称。
7、可以使用各种目录视图、系统函数和系统存储过程来查看数据库、文件、分区、文件组的属性。
8、不管数据库在什么状态,都可以删除数据库。若只从服务器上删除,可使用sp_detach_db.
 
归类于:数据库 标签:
27

数据库设计 - 数据库应用类型

常见的数据库类型有OLTP和决策支持系统,他们代表了数据库应用的两个方向。
 
OLTP(联机事务处理)
这类型的应用需要管理不断变化的数据,而且通常有大量的并发读写操作。像订票系统和银行事务系统。
设计和优化注意事项
1.并发性控制,确保多个用户不能同时更改相同的数据。比如订票的时候保证两个人不能订到同一张票。
2.原子性控制,确保事务中的所有步骤都作为一个组成功完成。要么全部完成,要么回滚到原始状态。比如如果银行转账失败,要确保双方数据回到初始状态。
3.因为并发读写比较频繁,所以对IO的读取速度要求比较高,建议使用文件组和RAID系统。如果有多块硬盘,可以在每块硬盘上建立一个数据文件,然后将读写频繁的表分配到独立的数据文件中来提高读写速度。
4.缩短事务处理时间,将长期锁减至最少来改善并发性。
5.归档历史数据,减少当前表的数据量,从而缩短备份时间和改善查询性能
6.小心使用索引,每次添加或修改行都会更新索引,所以避免过多索引。
7.备份是尽量避开高峰期
8.最佳的硬件支持。

决策支持系统
与OLTP相反,适用于几乎不需要更改的数据库系统。
注意和优化事项
1、可以建立大量的索引,来提高查询性能。
2、可以对数据进行预处理来加快查询速度。

大部分数据库应用系统介于上面二者之间,所以可以根据自己实际需要进行设计调整。
 
归类于:数据库 标签:数据库设计 数据库应用类型
21

Excel 解析

工作需要,要实现从Excel文件导入数据的功能,问题不难,但也有点弯弯绕。

首先读取Excel文件最简单的方法是使用微软Access的Jet引擎来把Excel文件当做数据集来处理,Excel的每个WorkSheet都可以看做成一张表。

Jet的数据库连接串:
Office 2000~2003
Provider=Microsoft.Jet.OleDb.4.0;Data Source=filename.xls;Extended Properties='Excel 8.0;HDR=YES'
Office 2007
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=filename.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";
 
更多链接串请参见:www.connectionstrings.com/excel

但是Office 现在还没有提供64位版本,所以Jet引擎也没提供64位支持,而我们的IIS是跑在64位服务器上的,虽然能降下来以32位模式运行,但是。。。肯定不是解决问题的最好方案,所以只好去求助第三方解析库了。
 
目前用到的是开源的ExcelDataReader:http://exceldatareader.codeplex.com/ ,同时支持Office 2000 ~ 2007,但在测试的过程中发现对包含中文的Office 2000 ~2003 文件支持不好,会有乱码产生,问题进一步研究中。
 
暂时打算采用CodeProject上的 http://www.codeproject.com/KB/office/ExcelReader.aspx ,但这个只支持Office 2000~2003 ,所以只好混着用了,先实现功能,然后再继续寻找更好的解决方案。
归类于:数据库 标签:Excel 解析
15

SQL Server 中常用的命令、函数、存储过程(持续更新)

 DBCC语言被提供用来作为SQL Server的控制条命令,提供以下功能:
1、维护:对数据库、索引或文件组进行维护任务,共8个语句。
2、信息:收集并显示各种类型信息的任务,共9个语句。
3、验证:对数据库、表、索引、目录、文件组或数据库页的分配进行的验证操作,共7个语句。
4、杂项:其他任务,6个语句。
 
DBCC
1、DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]
删除计划缓存中的所有元素,通过指定计划句柄或 SQL 句柄从计划缓存中删除特定计划,或者删除与指定资源池相关联的所有缓存条目
 
INFORMATION_SCHEMA
 
1、INFORMATION_SCHEMA.TABLES,当前数据库的表信息。
 
 
归类于:数据库 标签:
10

关系数据库之父 - Edgar.F.Codd

大家都说,Edgar F. Codd(通常被称为Ted)是一个才华横溢的人。他的成就之一,是在二十世纪七十年代初开发了一个关系型数据管理模型-- 存储和操作大量业务数据的一个复杂、完整的理论。根据Codd的设计构建的关系数据库成为了当今企业的基础;银行依赖关系数据库来跟踪资金流动;零售商使 用它们来监控库存水平;人力资源部门使用它们来管理员工账户;图书馆、医院和政府机构在其中存储数百万条记录;事实上,世界上几乎所有的企业都在使用某种 容量的关系数据库。自从 Codd公布其理论以来的30年中,关系数据库已经成为一个年收入近130亿美元的行业。

早期生活

Ted Codd于1923年出生在英格兰多塞特郡波特兰市的一个大家庭中。他曾经就读于牛津大学,主修数学和化学专业,第二次世界大战期间曾在 皇家空军服役。第二次世界大战后,Codd动身前往纽约并成为IBM的一名数学编程员。Codd所做的第一个项目是帮助构建一个称为可选顺序电子计算器 (Selective Sequence Electronic Calculator,SSEC)的早期计算机,据说该计算机占据了一栋市区办公楼中的 两层。

在二十世纪六十年代中期,Codd获得了密歇根大学计算机科学专业的博士学位。之后,他调到了IBM位于加利福尼亚州圣何塞市的开发实验室,在那里,他开始从事关系型数据管理模型(这是一个在很大程度上依赖于数学的模型)的开发。

改进数据库

早期的计算机太大、太昂对了,以至于不能广泛地应用于企业。在二十世纪六十年代,计算机开始变得经济有效,并逐渐被私营机构所采用,同时专门针对企业应用开发了许多标准和语言。其中有两个用于处理数据的模型:层次模型和关系网络模型。

在层次模型中,数据记录以层次方式相互关联;主要记录位于上层,后续的各个记录类型在下层分支。在网络模型中,一层中的记录集可能属于邻近的上层 中的两个不同的包含层次中。对于这两种模型,编写查询语句来检索信息要求深入了解数据本身的导航结构,因而这是一个复杂的任务,一般都是由专门的编程人员 来完成的。

Codd提出了一个新的解决方案。在最终收集到1970年具有创新性的技术论文-- "A Relational Model of Data for Large Shared Data Banks"(大型共享数据库的关系数据模型) 中的一系列报告中,Codd建议将数据独立于硬件来存储,程序员使用一个非过程语言来访问数据。Codd的解决方案的关键,是将数据保存在由行和列组成的 简单表中(在这种表中,相似数据的列将各个表相互联系起来),而不是将数据保存在一个层次结构中。按照 Codd的想法,数据库用户或应用程序不需要知道 数据结构来查询该数据。发表了该论文之后不久,Codd又发布了更为详细的指导原则,提出了其指导创建关系数据库的12项原则。

在Codd的理论公开之后,并没有立即被IBM所采纳。IBM已经对一个称为IMS的层次型数据库进行了大量投资,因而它让其他公司和企业家去考 虑如何进一步发展Codd的理论。其中的领袖人物是拉里o埃利森,他在1977年与Ed Oates和Bob Miner一起研制了世界上第一个商用关系 型数据库管理系统,在此过程中,创办了一个公司,后来成为Oracle公司。其余要说的就是数据库的历史了。

但是对Ted Codd来说,历史并没有停留在那儿。虽然直至二十世纪八十年代初,Codd一直就职于IBM,但他也与长期的合作者 Chris Date共同创建了一家咨询服务公司,而且,直到其今年的早些时候去世,Codd还一直继续研究和发表关于数据的规范化、分析和数据建模等主题的文章。
归类于:数据库 标签:关系数据库之父 EdgarFCodd
15

SQLServer:页及区的状态和分配

有三个缩写词:GAM,SGAM,PFS。
GAM(全局分配映射表),GAM页记录已分配的区,每个GAM包含64,000个区,相当于404GB的数据。GAM用一个位来表示所涵盖区间内的每个区的状态,如果位为1,则区可用,否则已分配。
SGAM(共享全局分配映射表),同GAM一样,不过SGAM是用来监控混合区的,如果至少有一个页未有,则标志位为1,否则所有页都在使用中。
FPS(页可用空间),记录每页的分配状态,是否已分配单个页以及每页的可用空间量。PFS 对每页都有一个字节,记录该页是否已分配。如果已分配,则记录该页是为空、已满 1% 到 50%、已满 51% 到 80%、已满 81% 到 95% 还是已满 96% 到 100%。

将区分配给对象后,数据库引擎将使用 PFS 页来记录区中的哪些页已分配或哪些页可用。数据库引擎必须分配新页时,将使用此信息。保留的页中的可用空间量仅用于堆和 Text/Image 页。数据库引擎必须找到一个具有可用空间的页来保存新插入的行时,使用此信息。索引不要求跟踪页的可用空间,因为插入新行的点是由索引键值设置的

在数据文件中,PFS 页是文件头页之后的第一页(页码为 1)。接着是 GAM 页(页码为 2),然后是 SGAM 页(页码为 3)。第一个 PFS 页之后是一个大小大约为 8,000 页的 PFS 页。在第 2 页的第一个 GAM 页之后还有另一个 GAM 页(包含 64,000 个区),在第 3 页的第一个 SGAM 页之后也有另一个 SGAM 页(包含 64,000 个区)。下图显示了数据库引擎用来分配和管理区的页顺序。

 

归类于:数据库 标签:SQLServer 页及区的状态
14

SQL Server 页和区(Pages and Extents)

 页是SQL Server数据存储的最基本单位,数据文件(.mdf或.ndf)分配的磁盘空间可以从逻辑上划分成页(从0到n连续编号). 磁盘I/O操作在页级执行,区是八个物理上连续的页的集合,用来有效地管理页,所以页都存储在区中。日志文件不包含页,而是一系列日志记录。
 
页的大小是8KB,这意味着SQL Server数据库中每MB有128页,16个区。
 
关于页
每页的开头是96字节的标头,用于存储有关页的系统信息,此信息包括页码、页类型、页的可用空间以及拥有该页的对象的分配单元ID。
在数据页上,数据行紧接着标头按顺序放置。页的末尾是行偏移表,对于页中的每一行,每个行偏移表都包含一个条目。每个条目记录对应行的第一个字节也页首的距离,行偏移表中的条目的顺序与页中行的顺序相反。
 
行不能跨页(页的单个行最大数量是8,060字节8kb 1024*8),不包括Text/Image类型的页数据,对于可变长类型的列,如果行超过8060,则从最大长度的列开始,将一个或多个可变长度列移动到ROW_OVERFLOW_DATA分配单元中的页,在原始页上维护一个24字节的指针,如果行的总大小小于8060,就再移回来.执行查询等操作时将延长处理时间,因为这些记录将同步处理,而不是异步。
 
关于区
SQL Server有两种类型的区:
统一区:由单个对象所有,区中的所有8页只能由所属对象使用
混合区,最对由八个对象共享,区中8页可由不同的对象所有。
通常从混合区向新表或索引分配页。当表或索引增长到 8 页时,将变成使用统一区进行后续分配。如果对现有表创建索引,并且该表包含的行足以在索引中生成 8 页,则对该索引的所有分配都使用统一区进行。
归类于:数据库 标签:SQLServer 页和区 Pages Extents