SQL Server 2008数据库创建过程和可配置选项(三)

2014-11-24 13:29:16 · 作者: · 浏览: 3
者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
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,
ChineseDescription nvarchar(400) COLLATE Chinese_PRC_CI_AI NULL,
ModifiedDate datetime NOT NULL
)
  SQL Server绝对不是使用饭一起,只是提供了一个框架来存放多种语言。您需要准备产品描述的正确翻译并把它们放到合适的列中,另外还要处理任何因为tempdb的排序规则导致的爱需规则不兼容性。
  表的体系结构:SQL Server使用8KB的数据页春初信息,表中的所有数据都存储在这些数据页中,但数据在页中的组织方式会因表的创建方式和在表创建后所进行的操作有所不同。默认情况下,所有的数据以称为堆的无组织的方式进行存储。SQL Server并不尝试组织或是以任何方式排序数据,也不维护页间的连接。
  SQL Server将所有数据页存放在分区的逻辑单元中,除非明确分隔,否则表一般存储在定义于单个文件组上的单个分区中。不过,通过跨多个由文件组定义管理的文件横向分区表,SQL Server可以把大型表划分为较小的可管理单元。如下创建实验表并进行差序性能测试:
--创建新表
USER AdventureWorks2008
GO