您的位置:首页 > 数据库 > SQL

【SQL Server学习笔记】13:用SQL做分离DB、附加DB、架构、分区表

2017-09-17 12:22 246 查看

分离数据库

表示将数据库从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提供默认,必须是唯一的。

[1]定义架构

CREATE SCHEMA [架构名] AUTHORIZATION 数据库用户名


例如:

create schema Mysch authorization dbo


表示为数据库用户dbo建立了一个名为Mysch的架构。

注:定义架构时还可以定义表(CREATE TABLE),定义视图(CREATE VIEW),为用户授权(GRANT)等,直接接在CREATE SCHEMA语句后面就行了。

[2]删除架构

SQL Server中,删除架构只能删除不包含任何对象的架构,如果架构中有对象则拒绝删除之(需要先删除对象)。

DROP SCHEMA 架构名


例如:

drop schema Mysch


分区表

分区表将一个表中的数据按水平方式划分到不同的子集中去,这些数据子集可以放到数据库的多个文件组中去。

如果数据量大,而且是分段的,而且对不同段的操作不太相同,有些段操作的多,有些段操作的少,那么适合创建分区表。

注:从物理上这个大表会分成多个小表放到多个文件组中去,但是逻辑上还是一个大表,对用户而言它就是一个大表(可直接对其操作),而由DBMS去思考实际操作的是哪个小表。

[1]创建分区函数

分为左侧分区函数和右侧分区函数,左侧分区函数就是左开右闭区间(…],右侧分区函数就是左闭右开区间[…)。

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语句中指定的。

[2]利用分区函数创建分区方案

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中创建文件组的好处是,我们创建表什么的可以直接在文件组中作,而不用去关心创建在了哪个盘或者哪个数据文件中,这是一种抽象意义上的操作。而且因为文件组中的数据文件是可以在不同盘中的,所以使用文件组有机会增加访问速度。同样地,使用分区表将一个表物理性地拆分到不同的文件组中去,但是我们对这个表的操作却还是之前的那样(抽象意义上的操作)整表操作,而不用关心到底操作的是哪个文件组中的子表,我认为这是保留了用户操作便捷性的同时优化了访问模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: