SQL语句数据库的创建修改,分离,附加,备份,还原
目录
SQL语句数据库的创建、修改,分离,附加,备份,还原
目录
1.数据库的创建:
--SCT为要创建的数据库名称
create database SCT
on primary
(
name='student1',--主数据文件的逻辑名
filename='C:\SCT\DATA\student1.mdf',//数据文件的存储路径
size=10MB,--初始大小
filegrowth=10%,--每次增容时增加的容量大小
maxsize=100MB--主文件的最大增长值,unlimited是无限制
),(
name='student2',--辅助数据文件
filename='C:\SCT\DATA\student2.mdf',
size=20MB,
filegrowth=10MB,
maxsize=200MB
)
log on(
name='studentlog1',
filename='C:\SCT\LOG\studentlog1.ldf',
size=30MB,
filegrowth=2MB,
maxsize=500MB
),(
name='studentlog2',
filename='C:\SCT\LOG\studentlog2.ldf',
size=30MB,
filegrowth=2MB,
maxsize=500MB
)
on primary
的意思是是指定主文件组中包含的文件。
LOG ON 就是指定数据库日志文件,用来对数据库的操作日志。
在主(辅)数据文件或者日志文件中的属性参考上述代码的注释。
2.数据库的修改
例子:
修改SCT数据库,增加一个“fg”文件组,并向文件组(fg)中添加数据文件。
详细解释请看注释
--修改SCT数据库,添加文件组fg
alter database SCT add filegroup fg
--向fg文件组中添加数据文件
alter database SCT add file
(
name='student3',
filename='D:\SCT\student3.ndf',
size=5MB,
maxsize=20MB,
filegrowth=15%
)
to filegroup fg--指向fg文件组,fg是一个文件组名
修改SCT数据库,增 加一个辅助数据文件student3,保存在“D:\SCT”文件夹中,且存放到“fg” 文件组中,初始大小5MB,最大容量是20MB,每次增长15%。
alter database SCT add log file(
name =log1,--名称
filename='D:\SCT\',--路径
size=3MB,
maxsize=10MB,
filegrowth=15%
)
修改SCT数据库,删除辅助数据文件student3.
alter database SCT remove file student3--删除数据文件
以下是对数据库的其他操作
--remove FILEGROUP 文件组名称 --删除文件组
--MODIFY FILE <filespec> --更改文件属性
--MODIFY NAME=新数据库名称 /*更改数据库名称
--MODIFY FILEGROUP 文件组名称 {文件组属性|NAME=新文件组名称}--更改文件组属性,包括更改文件组名称
alter database SCT remove file <删除文件名字>(参考上述例子)
3.数据库的分离
--例句数据库SCT分离
execute sys.sp_detach_db @dbname='SCT'
[@dbname=] ‘database_name’
database_name是要分离的数据库的名称
database_name是sysname值,默认值为NULL。
4.数据库的附加
附加数据库SCT
execute sp_attach_db SCT ,'C:\SCT\DATA\student1.mdf','C:\SCT\LOG\studentlog1.ldf'
/*
附加操作的语法:
execute sp_sttsch_db [@dbname=] ‘dbname’,[@filename1=]’filename_n’,[……16]
[@dbname=]‘dbnam_‘要附加到服务器的数据库的名称,该名称必须是唯一的。
Dbname的值为sysname,默认值为NULL。
[@filename1=]’filename_n’是数据库物理名称,包括路径。最多可以指定16个文件名。
*/
另外一种语法:
--附加数据库语句
--database_name为数据库的名字
CREATE DATABASE database_name
ON <filespec> [ ,...n ]
FOR {ATTACH | ATTACH_REBUILD_LOG}
--attach(附加)
--for attach_rebuild_log
--指定通过附加一组现有的操作系统文件来创建数据库。该选项只限于读/写数据库。
--必须有一个指定主文件的 <filespec> 项。如果缺少一个或多个事务日志文件,将重新生成日志文件。
例子:
create database database_name
on (filename='数据库分离的数据文件完整路径'),
(filename='数据库分离的日志文件完整路径')
for attach
详细查看下述代码:
--语法一
--声明数据库引用
use other_database_name;
go
--附加数据库
create database database_name
on (filename='mdf_path'),
(filename='ldf_path')
for attach
go
--语法二
--声明数据库引用
use other_database_name;
go
--附加数据库
create database database_name
on (
name='logical_file_name'
,filename='filestream_path'
,size= size_number [ KB | MB | GB | TB ]
,maxsize= { max_size_number [ KB | MB | GB | TB ] | unlimited }
,filegrowth= growth_increment [ KB | MB | GB | TB | % ]
),
(
name='logical_log_file_name'
filename='log_filestream_path'
,size= size_number [ KB | MB | GB | TB ]
,maxsize= { max_size_number [ KB | MB | GB | TB ] | unlimited }
,filegrowth= growth_increment [ KB | MB | GB | TB | % ]
)
for { attach with
[ enable_broker | new_broker | error_broker_conversations ]
[,restricted_user]
[,filestream ( directory_name={ 'directory_name' | NULL })]
| attach_rebuild_log }
go
语法解析
--语法解析
--other_database_name
--其它数据库,不能使用要附加的数据库进行附加。
--database_name
--新数据库的名称。数据库名称在SQL Server的实例中必须唯一,并且必须符合标识符规则。
--mdf_path
--数据库分离的数据文件完整路径。
--ldf_path
--数据库分离的日志文件完整路径。
--name
--指定文件的逻辑名称。 指定filename时,
--需要使用name,除非指定for attach子句之一。 无法将filestream文件组命名为primary。
--logical_file_name
--在SQL Server中引用文件时所用的逻辑名称。 Logical_file_name在数据库中必须唯一,并且必须符合标识符规则。
--名称可以是字符或Unicode常量,也可以是常规标识符或分隔标识符。
--filename
--指定操作系统(物理)文件名称。
--filestream_path
--数据库数据文件完整路径
--logical_log_file_name
--数据库日志名称。
--log_filestream_path
--数据库日志文件完整路径
--size
--指定文件的大小。
--将 os_file_name 指定为UNC路径时,不能指定SIZE。 SIZE不适用于FILESTREAM文件组。
--size_number
--文件的初始大小。
--maxsize
--指定文件可增大到的最大大小。将os_file_name指定为UNC路径时,不能指定maxsize。
--max_size_number
--最大的文件大小。可以使用 KB、MB、GB 和 TB 后缀。默认值为 MB。指定一个整数,不包含小数位。
--如果未指定 max_size,文件将一直增长到磁盘变满为止。Max_size 是一个整数值。对于大于2147483647的值,使用更大的单位。
--unlimited
--指定文件将增长到磁盘充满。在SQL Server中,指定为不限制增长的日志文件的最大大小为2TB,而数据文件的最大大小为16TB。
--filegrowth
--指定文件的自动增量。文件的filegrowth设置不能超过max_size_number设置。将os_file_name指定为UNC路径时,不能指定filegrowth。
--filegrowth不适用于filestream文件组。
--growth_increment
--每次需要新空间时为文件添加的空间量。
--该值可以MB、KB、GB、TB 或百分比 (%)为单位指定。
--如果未在数量后面指定MB、KB 或%,则默认值为MB。
--如果指定%,则增量大小为发生增长时文件大小的指定百分比。 定的大小舍入为最接近的64KB的倍数,最小值为64KB。
--值为0时表明自动增长被设置为关闭,不允许增加空间。
--enable_broker
--指定对指定的数据库启用Service Broker。 也就是说,启动了消息传递,
--并且在sys.databases 目录视图中将is_broker_enabled设置为true。数据库保留现有的Service Broker标识符。
--new_broker
--在sys.databases和还原数据库中都创建一个新的service_broker_guid值,并通过清除结束所有会话端点。
--Broker已启用,但未向远程会话端点发送消息。必须使用新标识符重新创建任何引用旧Service Broker标识符的路由。
--error_broker_conversations
--结束所有会话,并产生一个错误指出数据库已附加或还原。
--Broker一直处于禁用状态直到此操作完成,然后再将其启用。数据库保留现有的Service Broker标识符。
--restricted_user
--对于attach,可以指定restricted_user选项。
--restricted_user只允许db_owner固定数据库角色成员以及dbcreator和sysadmin固定服务器角色成员连接到数据库,
--不过对连接数没有限制。无资格用户的尝试将被拒绝。
--filestream
--将包含filestream选项“目录名称”的数据库附加到SQL Server实例中将提示SQL Server验证Database_Directory名称是否唯一。
--directory_name={ 'directory_name' | NULL }
--适用于: SQL Server 2012 (11.x) 到 SQL Server 2017
--与Windows兼容的目录名称。此名称应在SQL Server实例的所有Database_Directory名称中唯一。
--无论SQL Server排序规则设置如何,唯一性比较都不区分大小写。在此数据库中创建FileTable之前,应设置此选项。
--仅在将containment设置为partial之后,才允许使用以下选项。如果将containment设置为none,将发生错误。
--for attach_rebuild_log
--指定通过附加一组现有的操作系统文件来创建数据库。该选项只限于读/写数据库。
--必须有一个指定主文件的 <filespec> 项。如果缺少一个或多个事务日志文件,将重新生成日志文件。
--attach_rebuild_log自动创建一个新的1MB的日志文件。此文件放置于默认的日志文件位置。
--for attach_rebuild_log具有以下要求:完全关闭数据库。所有数据文件(MDF 和 NDF)都必须可用。
--通常,FOR ATTACH_REBUILD_LOG 用于将具有大型日志的可读/写数据库复制到另一台服务器,
--在这台服务器上,数据库副本频繁使用,或仅用于读操作,因而所需的日志空间少于原始数据库。
--不能对数据库快照指定for attach_rebuild_log。
5.数据库备份
参考:
参考:
6.数据库还原
restore database SCT from disk='E:\SQLserver备份\DATA\11.bak'
--SCT为数据库名称
--disk='数据库备份路径'