系统数据库
在安装SQL Server 2008时,创建了5个系统数据库来存储系统信息和支持数据库操作。在普通的数据库操作中,我们可以看到四个系统数据库master、modle、msdb、tempdb,但是看不到第五个Resource数据库。如果SQL Server实例被配置为用于SQL Server复制的分发服务器,就可以创建分发数据库。
用户数据库
用户数据库是由具有适当权限的任意服务器登录名创建。
数据库规划
数据库管理员应该考虑为什么数据库像现在这样运行和如何运行。管理数据库最好时机是在安装之前。无论是内部开发还是从软件供应商那里购买数据应用程序,数据库管理员都必须深入规划和创建支持数据库。
规划一个数据库时必须决定的第一件事是需要多大的磁盘空间来支持该数据库。一个比较有效和现实的方法是先取得数据库原型(数据库的测试或开发版本),然后在其中填充适量的测试数据。之后,价差磁盘上数据文件的大小,然后将其乘以1.5.其结果应该足够容纳新数据库的初始数据量,而且还会有空间剩余。一旦数据库投入生产环境,监控数据库文件大小就相当重要,因为这样可以分析增长趋势。例如可以配置为当数据库中填充的数据量达到75%是发出警报,这样可以在需要时增加文件的大小,但同时又能以足够的百分比在增长他们,从而避免经常执行增长。
规划事务日志文件的大小更加复杂。要想精确地规划日志大小,必须知道数据库中执行的事务的平均大小、发生的频率以及被修改的表的物理结构。
创建数据库
新建数据库时可使用命令CREATE DATABASE SampleDB,但是这样生成的数据库文件在系统默认的文件夹下,不推荐使用,可以使用图形界面进行创建。在新建数据库界面中“所有者”字段的值为“<默认值>”,这时创建数据库时使用的登录帐户。这个帐户一般是Sa,这是一个内置的SQL Server系统管理员帐户。数据库所有者应该总是为Sa,这样可以避免任何可能发生的问题。数据库的所有者可以完全控制该数据库,要修改数据库的所有权,可以使用TSQL语句ALTER AUTHORIZATION指定任意的有效的登录名,如:ALTER AUTHORIZATION ON DATABASE::SampleDB TO SA
想要检索数据库信息有两种不同的方法,sp_helpdb存储过程可用于检索所有数据库或特定数据库的信息,非常易于用作快速查看,要检索所有数据库,执行存储过程时不使用参数。对于特定数据库,将数据库名称传递给该存储过程,如:
USER Master
GO
EXEC sp_help AdventureWorks2008
GO
EXEC sp_help AdventureWorks2008
还有一种检索数据库信息的方法是是使用目录视图,他们提供的信息比相应的存储过程多,且允许使用标准的TSQL命令,如WHERE和GROUP BY。如使用sys.database目录视图与sys.server_principals目录视图连接起来,查看服务器上所有数据库的基本信息:
SELECT db.name AS database_name,sp.name AS owner,db.create_date,db.compatibility_level,db.recovery_model_desc FROM sys.database db INNER JOIN sys.server_principals sp ON db.owner_sid=sp.sid
数据库文件
在“新建数据库”对话框中的“数据库文件”部分中,第一个数据文件的逻辑名称和第一个日志文件的逻辑名称已经被自动命名,单击对话框底部的“添加”按钮,就会像数据库文件中添加一个新的文件行,新的文件默认类型为“行数据”,也可以通过下拉列表中选择“日志”或“行数据”,一旦创建好数据库,文件类型不可改变。然后在文件组列中单击下拉列表,选择文件组
文件组
数据库时基于组织在文件组中的文件创建的。文件组是用来存放为数据库定义的所有数据和数据库对象的数据文件的逻辑分组。
唯一必须的文件组是主文件组,主要由主数据文件和其他用户定义的数据文件组成。主数据文件的作用是存储针对数据库的所有系统引用,包括指向Resource数据库中定义的对象的指针。如果作为默认文件组,则主文件组包含用户定义的对象以及系统创建的对象的所有对象定义。除了主文件组意外,还可以创建更多的用户定义文件组。
使用用户定义文件组的一个最大好处是控制,如果没有用户定义文件组,那么所有数据都会存储在主文件组中,这样数据库的灵活性和可扩展性都大大削弱。输入新文件组的名称,选中“默认值”复选框,然后单击“确定”按钮,这会把新的用户定义的文件组设置为默认文件组,用户创建的所有对象都会放在这个新的文件组中。这实际上就把系统数据和用户数据分离开来,从而获得对数据库结构的更多控制。使用文件组的一个不错的功能就是可以将该文件组中的数据标记为“只读”,方法是选择“新建文件组”对话框中的“只读”复选框。当在一个数据库中组织不同的对象时,这个选项相当有用,要改变的对象可以放在一个可更ixnd文件组中,而不会改变的对象放在一个只读的文件组中,分离对象可以减少需要备份和还原的数据量,对于大型数据库来说是一个很有用的选项。
文件组带来的性能优势主要有三方面,第一个方面是可以并行读写,这时通过将数据文件分割到多个物理设备实现的。然后,如果把多个物理我呢间放到单个文件组中,可以可获得同样的性能;第二个方面则是将非聚集索引和大型对象数据溢出作为常规数据空间而保留的文件组,将非聚集索引与数据分离可以让数据库引擎同时使用独立的线程从索引中搜搜行位置和从表中检索行,将不经常访问的大型对象数据和事务密集的关系数据分离还可以提升一些实例中的扫描性能;第三个方面,也是最显著的方面,是可以跨多个文件组物理分区大型表。
选项
在“新建数据库”对话框中的左边点击“选项”按钮,会看到各类组织级别的选项
ANSI NULL默认值:在CREATE TABLE或ALTER TABLE操作中添加至表中的列是否允许空置,默认值为False,也就是除非有显示指定,否则添加的列不允许空值,可以手动进行设置
--更改默认值
SET ANSI_NULL_DELT_ON OFF
SET ANSI_NULL_DELT_ON ON
SET ANSI_NULL_DELT_ON OFF
SET ANSI_NULL_DELT_ON ON
更改数据库的选项值
ALTER DATABASE AdventureWorks2008 SET ANSI_NULL_DEFAULT OFF
ALTER DATABASE AdventureWorks2008 SET ANSI_NULL_DEFAULT ON
ALTER DATABASE AdventureWorks2008 SET ANSI_NULL_DEFAULT OFF
ALTER DATABASE AdventureWorks2008 SET ANSI_NULL_DEFAULT ON
ANSI 警告已启用:当设置为True时,只要聚合函数中出现空值,数据库引擎就会发出警告,设定为False时,则不会发出警告,可以在连接级别或者数据库级别设置
SET ANSI_WARNINGS OFF
SET ANSI_WARNINGS ON
SET ANSI_WARNINGS ON
ALTER DATABASE AdventureWorks2008 SET ANSI_WARNINGS OFF
ALTER DATABASE Adventureworks2008 SET ANSI_WARNINGS ON
ALTER DATABASE Adventureworks2008 SET ANSI_WARNINGS ON
算术终止启用:当设置为true的