mysql2008数据库配置_SQLServer2008数据库创建过程和可
配置选项
系统数据库
在安装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
还有⼀种检索数据库信息的⽅法是是使⽤⽬录视图,他们提供的信息⽐相应的存储过程多,且允许使⽤标准的TSQL命令,如WHERE和GROUP BY。如使⽤sys.database⽬录视图与sys.server_principals⽬录视图连接起来,查看服务器上所有数据库的基本信息:
SELECT db.name AS database_name,sp.name AS ate_date,dbpatibility_very_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
更改数据库的选项值
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
ALTER DATABASE AdventureWorks2008 SET ANSI_WARNINGS OFF
ALTER DATABASE Adventureworks2008 SET ANSI_WARNINGS ON
算术终⽌启⽤:当设置为true的时候,任何语句或事务在遇到算术溢出或被零除错误后都将终⽌,设定为False的时候,会发出⼀个警告,但不是终⽌语句。同样可以在连接级别或者数据库级别设置:
SET ARITHABORT OFF
SET ARITHABORT ON
ALTER DATABASE Adventureworks2008 SET ARITHABORT OFF
ALTER DATABASE Adventureworks2008 SET ARITHABORT ON
⾃动创建统计信息:设置为True的时候,数据库引擎为那些JOIN操作的WHERE⼦句或ON⼦句中引⽤的、缺少统计信息的⾮索引列⽣成统计信息
ALTER DATABASE Adventureworks2008 SET AUTO_CREATE_STATISTICS OFF
ALTER DATABASE Adventureworks2008 SET AUTO_CREATE_STATISTICS ON
⾃动更新统计信息:设置为True时,数据库引擎会⾃动更新列的统计信息,从⽽保持最有效的查询计
划,如果设置为False则需要数据库管理员⼿动更新统计信息
ALTER DATABASE Adventureworks2008 SET AUTO_UPDATE_STATISTICS OFF
ALTER DATABASE Adventureworks2008 SET AUTO_UPDATE_STATISTICS ON
⾃动异步更新统计信息:设置为True时,查询中发现的国企统计信息将被更新,但发现这些国企统计信息时正在执⾏的查询不会等待新的统计信息,后续的查询将会利⽤新的统计信息,当设置为False的时候,只有统计信息更新之后才进⾏查询编译:
ALTER DATABASE Adventureworks2008 SET AUTO_UPDATE_STATISTICS_ASYNC OFF
ALTER DATABASE Adventureworks2008 SET AUTO_UPDATE_STATISTICS_ASYNC ON
默认游标:游标始终基于⽣命它的连接。当设置为Global时,制定了⽣命的游标可被统⼀连接上执⾏的任意批处理、存储过程和触发器引⽤。如果设置为Local,游标只能在声明了它的批处理、存储过程或触发器中引⽤
ALTER DATABASE Adventureworks2008 SET CURSOR_DEFAULT LOCAL
ALTER DATABASE Adventureworks2008 SET CURSOR_DEFAULT GLOBAL
验证页:验证页为数据库管理员可以为写页设定不同的选项。可⽤的选项包括Checksun,Torn_Page_Detection和None。对于性能来说最好的选择的None,但是此设置会使数据库⽆法检测到数据损坏。Checksun提供了最好的保证,⽆论是数据写操作还是写操作之后发⽣的对磁盘数据的任意修改都会被校验和验证检测到,但是会占⽤最多的CPU周期;Torn_Page_Detection选项是⼀种检测损坏页的低成本⽅法,但是只会检测在写操作期间发⽣的页损坏,推荐设置是Checksun
ALTER DATABASE Adventureworks2008 SET PAGE_VERITY NONE
ALTER DATABASE Adventureworks2008 SET PAGE_VERITY TORN_PAGE_DETECTION
ALTER DATABASE Adventureworks2008 SET PAGE_VERITY CHECKSUM
参数化:默认情况下数据库引擎将⼀些查询参数化,这样即使在WHERE⼦句中定义了不同的值,创建并编译的查询计划也可重⽤,如果设置为简单,SQL Server会决定参数化哪些查询和不参数化哪些查询;设置为强制时,SQL Server会把所有可参数化的查询参数化,⽽同样的查询会得到⼀个参数化查询计划。强制⾃动参数化优势能改善性能,但是需要仔细监控以确保它对性能没有负⾯影响
ALTER DATABASE Adventureworks2008 SET PARAMETERIZATION SIMPLE
ALTER DATABASE Adventureworks2008 SET PARAMETERIZATION FORCED
允许带引号的标识符:默认情况下SQL Server使⽤⽅括号来界定对象,只有在对象名中包含嵌⼊的空格或保留字时才需要界定对象。ANSI 标准定界符是双引号,下⾯的例⼦说明了如何使⽤⽅括号和双引号创建和引⽤⼀个包含嵌⼊空格的对象:
USER Adventureworks2008
GO
CREATE TABLE "Sales.USA Customers"
(AccuNumber int IDENTITY(1,1) NOT NULL,
"Last Name" varchar(75) NOT NULL,
"First Name" varchar(75) NOT NULL)
SELECFT AcctNumber,"Last Name","First Name" FROM "Sales.USA Customers"
USER Adventureworks2008
GO
CREATE TABLE [Sales.USA Customers]
(AccuNumber int IDENTITY(1,1) NOT NULL,
[Last Name] varchar(75) NOT NULL,
[First Name] varchar(75) NOT NULL)
SELECFT AcctNumber,[Last Name],[First Name] FROM [Sales.USA Customers]
当“允许带引号的标识符”为True的时候,⽅括号和双引号都可以使⽤,为False的时候,值有⽅括号定界符可以使⽤,要在连接级别或者数据库级别进⾏设置的时候如下
SET QUOTED_IDENTIFIER OFF
SET QUOTED_IDENTIFIER ON
ALTER DATABASE Adventureworks2008 SET QUOTED_IDENTIFIER OFF
ALTER DATABASE Advetnureworks2008 SET QUOTED_IDENTIFIER ON
递归触发器已启⽤:递归触发器是⼀项⾼级编程技术,它允许统⼀触发器在同⼀事务中按顺序执⾏多次。当设置为False是,这⼀操作时不允许的。
ALTER DATABASE Adventureworks2008 SET RECURSIVE_TRIGGERS OFF
ALTER DATABASE Adventureworks2008 SET RECURSIVE_TRIGGERS ON
限制访问:限制访问选项使数据库管理员可以把对数据库的访问限制为⼀组已定义的登录名。该选项的默认值是MULTI_USER,允许多个⽆权限的⽤户访问数据库,此外还有两个选项SINGLE_USER和RESTRICTED_USER,如果设置为SINGLE_USER,那么⼀次就只有⼀个⽤户帐户可以访问数据库,如果设置为RESTRICTED_USER,那么只有db_owner,dbcreator或者sysadmin的成员可以连接⾄数据库。要在数据库级别进⾏设置,可以使⽤如下命令
ALTER DATABASE Adventureworks2008 SET MULTI_USER
ALTER DATABASE Adventureworks2008 SET RESTRICTED_USER
ALTER DATABASE Adventureworks2008 SET SINGLE_USER
⽣成数据库创建脚本
⼏乎每⼀个创建或修改数据库对象的配置屏幕都包括脚本操作选项。单击“脚本”按钮可⽤的脚本操作选项会显⽰,单击任何脚本操作都将⽣成⼀个脚本,脚本复制您在图形化界⾯中指定的所有设置。然后通过这个脚本,可以使⽤同样的选项创建新的数据库,值需要改变数据库和相关⽂件的逻辑及物理名称即可。
另外⼀种重⽤脚本的⽅法是使⽤变量替代对象和⽂件的实际名称,接下来只需要更新变量值并执⾏脚本,创建数据定义语⾔Data
Definition LanguageDDL脚本时唯⼀棘⼿的部分是必须使⽤动态SQL,因为在DDL脚本中不能直接使⽤变量,下⾯的例⼦演⽰了如何使⽤动态SQL来创建⼀个新的数据库,并将⼀个⽤户定义的⽂件组标记为默认⽂件组:
DECLARE @DatabaseName AS nvarchar(255)
DECLARE @FileGroupName AS nvarchar(255)
SET @DatabaseName=N'SlateGravel'
SET @FileGroupName=N'UserData'
EXECUTE(
'CREATE DATABASE '+@DatabaseName+' ON PRIMARY
( NAME="'+@DatabaseName+'",
FILENAME="S:\SQLDataFiles\'+@DatabaseName+'_data.mdf",
SIZE=20MB,MAXSIZE=100MB,FILEGROWTH=30%),
FILEGROUP UserData
(NAME="'+@FileGroupName+'",
FILENAME="S:\SQLDataFiles\'+DatabaseName+'_data.ndf",
SIZE=2048KB,FILEGROWTH=20%)
LOG ON
(NAME="'+@dATABAEnAME+'_log",
FILENAME="T:\SQLLogFiles\'+@DatabaseName+'_log.ldf",
SIZE=100MB,FILEGROWTH=20%);
ALTER DATABASE '+@DatabaseName+'MODIFY FILEGROUP '+@FileGroupName+' DEFAULT'
)
架构
架构是⼀种对象容器,在SQL Server 2008中引⽤数据库对象是,设定对象引⽤的上下⽂是很重要的。每个⽤于都被指派⼀个默认的架构,当他们登录到SQL Server应引⽤数据库对象时,这个默认架构将在该对象的引⽤⽅式中发挥独特的作⽤。例如,假设在
AdventureWorks2008数据库中创建了⼀个名为FredF的⽤户,并把默认架构Sales指派给他。如果FredF登录并执⾏SELECT * FROM CreditCard查询,由于其默认架构师Sales,CreditCard将被解析为Adventureworks2008.Sales.CreditCard。由于Sales.CreditCard 表存在,因此查询将返回该表的内容,如果FredF执⾏SELECT * FROM Person查询,Person将被解析为
Adventureworks2008.Sales.Person,这是⼀个并不存在的表。因此,SQL Server会返回“⽆效的对象名称”这个错误。
要创建架构唯⼀需要的信息是指定架构名称,架构的所有权默认属于运⾏创建脚本的⽤户,但可以把任何有效的数据库⽤户指定为所有者,最简单的⽅法就是把dbo指定为架构所有者
USER AdventureWorks2008
GO
mysql配置与安装过程CREATE SCHEMA Operations AUTHORIZATION dbo
该CREATE SCHEMA语句之后的任何架构作⽤于的语句都将位于刚才创建的架构的作⽤于内。记住,架构作⽤于总是起始于⽤户的默认架构,如果⼀个被引⽤的对象不是作⽤域限定的,解析将返回到dbo架构
如果视图删除⼀个包含对象的架构,将会产⽣错误,如果仍然需要架构中的对象,可以使⽤ALTER SCHEMA语句把它转移到另⼀个架构中,如把表DeliveryDriver从Operations架构转移到Production架构中。
ALTER SCHEMA Production TRANSFER Operations.DeliveryDriver
不能从数据库中删除拥有架构的对象,这就是为什么让dbo⽤户拥有所有架构的原因之⼀。要想改变⼀个架构的所有权,需要改变架构的AUTHORIZATION属性:
ALTER AUTHORIZATION ON SCHEMA::Operations TO FredF
表
表的排序规则:创建数据库时,可以配置不同于服务器的排序规则⽀持。对于包含字符数据的表列来说也是如此,如创建⼀个各地客户可以使⽤⾃⼰的语⾔浏览器和搜索产品⽬录的表:
USER AdventureWorks2008
GO
CREATE TABLE Production.GlobalProductDescription(
ProductDescriptionID int IDENTITY(1,1) NOT NULL,
EnglishDescription nvarchar(400) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
FrenchDescription nvarchar(400) COLLATE French_CI_AS NULL,
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论