SQL Server-数据库的创建、分离、备份、附加和删除
在SQL Server中,每个数据库至少拥有两个操作系统文件:一个数据文件和一个日志文件。
数据文件包含数据和对象;例如数据库表( table),索引( index)、存储过程( storage)、触发器( trigger)和视图(view)等。
日志文件包含数据库中所有更新事务的全部信息,用于恢复数据库。为了便于分配和管理,可以将数据文件集合成若干文件组。在创建数据库对象之前应首先创建数据库。
数据库文件:SQL Server数据库具有三种类型的文件。
主要数据文件:主要数据文件( primary data file)包含数据库的启动信息,并指向数据库中的其他文件。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。主要数据文件的建议文件扩展名是. mdf。
次要数据文件:次要数据文件(no-primary data file)是可选的,由用户定义并存储用户数据。将数据库中的数据分散在不同的文件中有两个好处。其一,次要文件可用于将数据分散到多个磁盘上,这样系统就可以同时对多个硬盘做存取,加快数据处理的速度,提高系统工作效率。其二,如果数据库超过了单个Windows文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长。次要数据文件的建议文件扩展名是. ndf。
事务日志文件:事务日志文件保存用于恢复数据库的日志信息。每个数据库必须至少有一个日志文件。事务日志的建议文件扩展名是.ldf。
在SQL Server 2005 中,数据库中所有文件的位置都记录在数据库的主文件和master系统数据库中。大多数情况下,数据库引擎使用master数据库中的文件位置信息。
文件组:
文件组是指将构成数据库的数个文件集合起来组合成为一个个群体,并给定一个组名。当在数据库中创建数据库对象时,可以特别指定要将某些对象存储在某一特定的组上。SQL Server 2005 中的数据库可由数个文件组组成,其中一个称为主要文件组( primary filegroup),其他则由用户定义,称为非主要文件组。
当创建数据库时,主要文件组包含有主要数据文件和未指定加入组的其他文件,该数据库所属的系统表(systemtable)也是建立在主要文件组上。在其他非主要文件组中,用户可指定其中一个为默认文件组(default filegroup),当用户在数据库上创建对象时,如果未指明该对象要建立在哪一个文件组时,系统会将该对象建立在默认文件组上。默认文件组中的文件必须足够大,能够容纳未分配给其他文件组的所有新对象。如果没有默认文件组的话,则主要文件组为默认的文件组。使用文件组的目的也是为提高执行效率。
事务日志:
在创建一个数据库的同时,系统一定要创建一个对应的事务处理日志文件(transaction log),该文件是用来记录数据库的更新情况的,凡对数据库数据有改变的事务操作都会记录在这个文件中,如insert , update, delete操作等。事务日志的作用是当数据库被破坏时,可以利用它来恢复数据库内容。每个数据库也可以有多个日志文件。其建议文件扩展名为.ldf。
逻辑和物理文件名称:
逻辑文件名(logical_file_name)是在所有Transact-SQL语句中引用数据库物理文件时所使用的名称。逻辑文件名必须符合SQL Server标识符规则,而且在数据库中的逻辑文件名必须是唯一的。
物理文件名(os_file_name)是包括目录路径的数据库物理文件名。它必须符合操作系统文件命名规则。
创建数据库
1.交互式创建数据库
打开SQL Server ,在对象资源管理器中,右击“数据库”,选择“新建数据库”。在窗口中可以对数据库文件进行操作。设置好参数后确认。
2.使用create database语句指定参数创建数据库
2.1 创建数据库
在查询编辑器窗口中输入T-SQL语句:
create database testbase1 --数据库名 on ( name = testbase1_data, --逻辑文件名 filename = 'F:testbase1_data.mdf') --物理文件名 log on ( name = testbase1_log, filename = 'F:testbase1_log.ldf') go
2.2 指定多个参数创建数据库
在查询编辑器窗口中输入T-SQL语句:
create database testbase2 --数据库名 on primary --文件组 ( name = testbase2_prim_sub_dat1, --逻辑文件名 filename = 'F:testbase2_prim_sub1_dat.mdf', --物理文件名 size = 5mb, maxsize = 50mb, filegrowth = 20%), ( name = testbase2_prim_sub_dat2, filename = 'F:testbase2_prim_sub2_dat.ndf', size = 5mb, maxsize = 50mb, filegrowth = 20%), filegroup testbase2_group1 ( name = testbase2_group1_sub1, filename = 'F:testbase2_group1_sub1_dat.ndf', size = 5mb, maxsize = 50mb, filegrowth = 5mb), ( name = testbase2_group1_sub2, filename = 'F:testbase2_group1_sub2_dat.ndf', size = 5mb, maxsize = 50mb, filegrowth = 5mb), filegroup testbase2_group2 ( name = testbase2_group2_sub1, filename = 'F:testbase2_group2_sub1_dat.ndf', size = 5mb, maxsize = 50mb, filegrowth = 15%), ( name = testbase2_group2_sub2, filename = 'F:testbase2_group2_sub2_dat.ndf', size = 5mb, maxsize = 50mb, filegrowth = 15%) log on ( name = testbase2_testbase2_log, filename = 'F:testbase2_log_file.ldf', size = 20mb, maxsize = 500mb, filegrowth = 10mb) go
分离数据库
1.交互式分离数据库
打开SQL Server Management Studio,连接到服务器后,在对象资源管理器中右击testbase1,选择“任务”->“分离”,打开“分离数据库”对话框。
如果“状态”列为“就绪”,表明该数据库 testbasel正处于非活动连接状态,则单击“确定”按钮即可完成分离。
如果 “状态”列为“非就绪”,表明该数据库 testbasel正处于活动连接状态,即正在使用中,则需选中“删除连接”列中的复选框,再单击“确定”按钮即可完成分离。
2.使用系统存储过程分离数据库
在查询编辑器窗口中输入T-SQL语句:
exec sp_detach_db testbase2, true
数据库文件备份
复制数据库testbase1 物理文件到移动硬盘或其他文件夹有两种方法:
1.分离数据库
根据“分离数据库”中的方法,先分离数据库,然后就可以在文件资源管理器中复制数据库文件了。
2.停止 SQL Server 服务
打开SQL Server配置管理器,单击左窗格中的“SQL Server服务”,查看右窗格中列出的所有SQL Server服务项目,如果SQL Server(MSSQLSERVER)项的“状态”是“正在运行”,则右击SQL Server(MSSQLSERVER),在打开的快捷菜单中选择“停止”或“暂停”,系统即打开一个显示停止SQL Server服务的进度指示窗口,停止运行后,SQL Server(MSSQLSERVER)项的“状态”变为“已停止”。
也可以在SQL Server Management Studio中停止 SQL Server 服务。在“对象资源管理器”中右击MXM,左击停止选项。
在SQL Server Management Studio中,查看“对象资源管理器”中 MXM 左侧的图标已变成红色方点(表示此服务已停止运行,服务运行时显示为绿色三角符号)。
服务停止后,就可以在文件资源管理器中复制数据库文件了。
注:如果连接到服务器时出现下面的问题,需要在SQL Server配置管理器中重新启动服务。
附加数据库
1.交互式
(1)使用交互式方法将分离的数据库 testbase1 附加到 SQL Server 服务中。
打开SQL Server Management Studio,连接到服务器后,在对象资源管理器中右击数据库,左击“附加”。
在“附加数据库”对话框中点击“添加”,打开“定位数据库文件”对话框,选择数据库testbase1的数据物理文件后确定。
在“附加数据库”对话框中查看数据库的详细信息。
2.系统存储过程
(2)使用系统存储过程附加数据库。
新建查询,在查询编辑器窗口中输入如下T-SQL语句后执行:
exec sp_attach_single_file_db @dbname = 'testbase1', --数据库名 @physname = 'F:testbase1_data.mdf' --物理文件名
删除数据库
1.交互式
打开SQL Server Management Studio,连接到服务器后,在对象资源管理器中展开“数据库”文件夹。
右击数据库 testbase1,选择“删除”选项。在“删除对象”对话框中点击确定。
2.drop database语句
新建查询,在查询编辑器窗口中输入如下T-SQL语句后执行:
drop database testbase2