分离数据库
表示将数据库从SQL Server实例中去除,但不是物理性的删除。
使用的是sp_detach_db系统存储过程。
sp_detach_db '数据库名','是否跳过更新统计信息'
例如:
sp_detach_db 'MyNewDB','true'
附加数据库
表示将分离的数据库重新附加到DBMS中。在这之前,应该确保全部数据文件和日志文件在合适的位置。
例如添加刚刚分离的数据库MyNewDB:
create database MyNewDB
on (filename='E:\Source Program\CreatTest\Lzh_dat1.mdf')
for attach
根据主要数据文件就可以找到其它文件的位置,如果在分离之后,某些数据文件的位置进行了移动,则要在ON块中指明这些数据文件移动之后的位置:
create database MyNewDB
on (filename='E:\Source Program\CreatTest\Lzh_dat1.mdf'),
(filename='E:\Source Program\CreatTest\Lzh_dat4.ndf'),
(filename='E:\Source Program\CreatTest\lzh_log1.ldf')
for attach
架构
架构(Schema)是用来存放数据库对象的容器,相当于给它们包了一个文件夹。架构名可以自定义,也可以由DBMS提供默认,必须是唯一的。
定义架构
CREATE SCHEMA [架构名] AUTHORIZATION 数据库用户名
例如:
create schema Mysch authorization dbo
表示为数据库用户dbo建立了一个名为Mysch的架构。
注:定义架构时还可以定义表(CREATE TABLE),定义视图(CREATE VIEW),为用户授权(GRANT)等,直接接在CREATE SCHEMA语句后面就行了。
删除架构
SQLServer中,删除架构只能删除不包含任何对象的架构,如果架构中有对象则拒绝删除之(需要先删除对象)。
DROP SCHEMA 架构名
例如:
drop schema Mysch
分区表
分区表将一个表中的数据按水平方式划分到不同的子集中去,这些数据子集可以放到数据库的多个文件组中去。
如果数据量大,而且是分段的,而且对不同段的操作不太相同,有些段操作的多,有些段操作的少,那么适合创建分区表。
注:从物理上这个大表会分成多个小表放到多个文件组中去,但是逻辑上还是一个大表,对用户而言它就是一个大表(可直接对其操作),而由DBMS去思考实际操作的是哪个小表。
创建分区函数
分为左侧分区函数和右侧分区函数,左侧分区函数就是左开右闭区间(…],右侧分区函数就是左闭右开区间[…)。
CREATE PATITION FUNCTION 分区函数名(分区依据列的数据类型)
AS RANGE [LEFT/RIGHT]
FOR VALUES(值列表)
例如:
create partition function myfun(int)
as range right --注意默认是左,这里是右
for values(15,17,20)
即对int型的分区依据列,根据其值<15,<17,<20,<∞作这样的分区函数。
注:具体的分区依据列是在CREATE TABLE或CREATE INDEX语句中指定的。
利用分区函数创建分区方案
CREATE PARTITION SCHEME 唯一的分区方案名
AS PARTITION 分区函数名
[ALL] TO (文件组名[表])
例如:
create partition scheme FenQuName
as partition myfun
to (LzhGroup2,LzhGroup3,LzhGroup2,LzhGroup3)
如果要全部分到一个文件组中去,可以:
create partition scheme FenQuName
as partition myfun
all to (LzhGroup2)
我觉得在DB中创建文件组的好处是,我们创建表什么的可以直接在文件组中作,而不用去关心创建在了哪个盘或者哪个数据文件中,这是一种抽象意义上的操作。而且因为文件组中的数据文件是可以在不同盘中的,所以使用文件组有机会增加访问速度。同样地,使用分区表将一个表物理性地拆分到不同的文件组中去,但是我们对这个表的操作却还是之前的那样(抽象意义上的操作)整表操作,而不用关心到底操作的是哪个文件组中的子表,我认为这是保留了用户操作便捷性的同时优化了访问模式。