一、启用FileTable
1、修改数据库引擎的属性
打开“SQL Server配置管理器”,修改SQL Server数据库引擎的属性。使用此页可针对此 Microsoft SQL Server 2012安装启用 FILESTREAM。
(1)针对 Transact-SQL 访问启用 FILESTREAM
选中此项可针对 Transact-SQL 访问启用 FILESTREAM。 必须选中此控制选项,才能使用其他控制选项。如果不启用此选项,就不能添加FileStream文件组。
(2)针对文件 I/O 流访问启用 FILESTREAM
选中此项可针对 FILESTREAM 启用 Win32 流访问。
(3)Windows 共享名
使用此控制选项可输入将用来存储 FILESTREAM 数据的 Windows 共享的名称。默认为该SQL Server实例的名称。
(4)允许远程客户端针对 FILESTREAM 数据启用流访问
选中此控制选项可允许远程客户端访问此服务器上的此 FILESTREAM 数据。
2、修改服务器的属性
打开“SQL Server Management Studio”,修改该实例的配置。默认配置如下:
上述选项解释如下:
(1)“FILESTREAM 访问级别”显示 SQL Server 实例上支持的 FILESTREAM 的当前级别。若要更改访问级别,请选择以下值之一:
已禁用
无法将二进制大型对象 (BLOB) 数据存储在文件系统中。此为默认值。即filestream access level=0
已启用 Transact-SQL 访问
可使用 Transact-SQL 访问 FILESTREAM 数据,但不能通过文件系统进行访问。即filestream access level=1
已启用完全访问
FILESTREAM 数据可使用 Transact-SQL 以及通过文件系统进行访问。即filestream access level=0
注意:在首次启用 FILESTREAM 时,您可能需要重新启动计算机才能配置驱动程序。
(2)“FILESTREAM 共享名称”显示在安装过程中选择的 FILESTREAM 共享的只读名称。
在本次实验中,我们将“FILESTREAM 访问级别” 设定为:已启用完全访问。
如果是通过T-SQL脚本执行,则运行以下脚本:
EXEC syssp_configure N'filestream access level', N'2'
RECONFIGURE WITH OVERRIDE
注意:设置完成之后,重启实例。
3、配置防火墙
若要在防火墙保护的环境中使用 FILESTREAM,客户端和服务器都必须能够将 DNS 名称解析为包含 FILESTREAM 文件的服务器。FILESTREAM 要求 Windows 文件共享端口 139 和 445 处于打开状态。
二、配置文件组
1、添加文件组
完成上述 *** 作之后,就可以为该数据库添加专用于FileStream的文件组。
如果是通过脚本 *** 作,请运行以下脚本:
ALTER DATABASE [db01] ADD FILEGROUP [FileStreamFileGroup] CONTAINS FILESTREAM
2、添加文件
完成上述 *** 作之后,就可以为该数据库添加FilStream类型的数据库文件。
在本例中,系统并没有为“FileStream数据”的文件类型创建mdf或ndf文件,而是在文件夹C:\SqlData下面自动创建以逻辑名称命名的文件夹,即 C:\SqlData\FileData。其中filestreamhdr 文件是 FILESTREAM 容器的头文件。当这个数据库被删除时,mdf、ndf、log连同这个文件夹都会被删除。
如果是通过脚本 *** 作,请运行以下脚本:
ALTER DATABASE [db01] ADD FILE ( NAME = N'FileData', FILENAME = N'C:\SqlData\FileData' ) TO FILEGROUP [FileStreamFileGroup]
注意:在上例中,在运行脚本之前,必须存在C:\SqlData,建议使用右侧的选择按钮选择路径。如果路径不存在,就会报错:
同时不能存在重复的文件夹,即不能存在C:\SqlData\FileData。否则也会报错:
3、启动非事务访问
FileTable 使 Windows 应用程序可以获取 FILESTREAM 数据的 Windows 文件句柄而不需要 SQL Server 事务。为了允许对 SQL Server 中存储的文件进行此非事务性访问,必须为要包含 FileTable 的每个数据库在数据库级别上指定所需的非事务性访问级别。
选项解释如下:
(1)FILESTREAM 非事务访问
为从文件系统到 FileTables 中存储的 FILESTREAM 数据的非事务性访问指定以下选项之一:OFF、READ_ONLY 或 FULL。
如果在服务器上未启用 FILESTREAM,则该值将设置为 OFF 并且被禁用。在本次实验中,将其设置为FULL。
(2)FILESTREAM 目录名称
为与所选数据库相关联的 FILESTREAM 数据指定目录名称。在 FileTable 文件夹层次结构中,此数据库级目录将成为在实例级别为 FILESTREAM 指定的共享名称的子级以及在数据库中创建的 FileTable 的父级。
如果启用非事务性访问时没有提供目录名称,则在以后必须提供它,这样才能在数据库中创建 FileTable。
如果是通过脚本执行,如下:
ALTER DATABASE db01
SET FILESTREAM ( NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'ImageFiles' )
注意:更改现有数据库时,调用带 DIRECTORY_NAME FILESTREAM 选项的 ALTER DATABASE (Transact-SQL) 语句。使用这些选项更改目录名称时,数据库必须以独占方式锁定,没有打开的文件句柄。
说明:为检查是否在数据库上启用了非事务性访问,可以查询目录视图,脚本如下:
SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc
FROM sysdatabase_filestream_options
三、创建FileTable
1、创建第一个FileTable
“SQL Server Management Studio”只提供一个脚本模板,要想创建FileTable还是得用脚本完成:
USE db01
CREATE TABLE ImageTable1 AS FILETABLE
官方的范本为:
USE [db01]
CREATE TABLE [dbo][ImageTable1] AS FILETABLE ON [PRIMARY] FILESTREAM_ON [FileStreamFileGroup]
WITH
(FILETABLE_DIRECTORY = N'ImageTable1', FILETABLE_COLLATE_FILENAME = Chinese_PRC_CI_AS)
2、创建第二个FileTable
CREATE TABLE ImageTable2 AS FILETABLE
3、获取共享路径
文件表创建之后,就会相应的产生一个文件表共享目录,该目录路径可以通过内建函数获取:
SELECT FileTableRootPath('ImageTable1')
本次实验所返回的结果为:\\SQL1\SqlFile\ImageFiles\ImageTable1
4、查看
通过Windows资源管理器,可见已经创建了以GUID命名的文件夹。
通过SQL Server Management Studio,查看表的结构。
四、 *** 作
1、向文件夹中添加文件
通过 “Windows资源管理器”,向文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1中添加一个文件A01GIF。然后运行脚本:
select from ImageTable1
结果如下:
可见, SQL Server自动在Table中添加了记录。
2、文件改名
运行以下脚本:
update ImageTable1 set name='CupGIF' where name='A01GIF'
通过“Windows资源管理器”,查看文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1,可见文件A01GIF已经被改名为CupGIF 。
3、查看共享文件夹
我们可以继续复制其他文件,然后通过“Windows资源管理器”,查看文件夹。
4、删除文件
可以使用脚本删除,例如:
Delete ImageTable1 where name='CupGIF'
或者,通过“Windows资源管理器”直接删除该文件。
五、备份和还原
1、备份数据库
使用 SQL Server 备份数据库时,FILESTREAM 数据将与数据库中的结构化数据一起备份。
2、部分备份
如果不想将 FILESTREAM 数据与关系数据一起备份,则可以使用部分备份将 FILESTREAM 文件组排除在外。
当数据库需要处理 *** 作量大、复杂度高的数据的时候需要用到事务。用事务是为了保证数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
一个数据库事务通常包含了一个序列的对数据库的读/写 *** 作。它的存在包含有以下两个目的:
1、为数据库 *** 作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
2、当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的 *** 作互相干扰。
当事务被提交给了数据库管理系统,则数据库管理系统需要确保该事务中的所有 *** 作都成功完成且其结果被永久保存在数据库中,如果事务中有的 *** 作没有成功完成,则事务中的所有 *** 作都需要被回滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。
扩展资料:
数据库事务ACID性质:
1、原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的 *** 作要么全部被执行,要么都不执行。
2、一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态,一致状态的含义是数据库中的数据应满足完整性约束。
3、隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
4、持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。
参考资料来源:
百度百科-数据库事务
百度百科-数据库
事务就是一系列的 *** 作,这些 *** 作完成一项任务只要这些 *** 作里有一个 *** 作没有成功,事务就 *** 作失败,发生
回滚
事件即撤消前面的 *** 作,这样可以保证数据的一致性而且可以把 *** 作暂时放在缓存里,等所有 *** 作都成功有提交数据库,这样保证费时的 *** 作都是有效 *** 作
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
⑴ 原子性(Atomicity)
原子性是指事务包含的所有 *** 作要么全部成功,要么全部失败回滚,因此事务的 *** 作如果成功就必须要完全应用到数据库,如果 *** 作失败则不能对数据库有任何影响。
⑵ 一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
⑶ 隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如 *** 作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的 *** 作所干扰,多个并发事务之间要相互隔离。
即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
关于事务的隔离性数据库提供了多种隔离级别。
⑷ 持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的 *** 作。
ACID,指数据库事务正确执行的四个基本要素的缩写包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求
原子性
整个事务中的所有 *** 作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性
在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
隔离性
两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。
持久性
在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
一 事务处理介绍
事务是这样一种机制,它确保多个SQL语句被当作单个工作单
元来处理。事务具有以下的作用:
一致性:同时进行的查询和更新彼此不会发生冲突,其他
用户不会看到发生了变化但尚未提交的数据。
可恢复性:一旦系统故障,数据库会自动地完全恢复未完
成的事务。
二 事务与一致性
事务是完整性的单位,一个事务的执行是把数据库从一个一
致的状态转换成另一个一致的状态。因此,如果事务孤立执行时
是正确的,但如果多个事务并发交错地执行,就可能相互干扰,
造成数据库状态的不一致。在多用户环境中,数据库必须避免同
时进行的查询和更新发生冲突。这一点是很重要的,如果正在被
处理的数据能够在该处理正在运行时被另一用户的修改所改变,
那么该处理结果是不明确的。
以上就是关于如何利用SQL Server 2012数据库 *** 作事务管理全部的内容,包括:如何利用SQL Server 2012数据库 *** 作事务管理、数据库 *** 作的时候,什么情况下需要用到事务、什么是数据库中的事务等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)