如何使用Sqlserver 2012 Always on技术
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Sqlserver 2012 Always on技术相关的知识,希望对你有一定的参考价值。
一、启用FileTable 1、修改数据库引擎的属性 打开“SQLServer配置管理器”,修改SQLServer数据库引擎的属性。使用此页可针对此MicrosoftSQLServer2012安装启用FILESTREAM。 (1)针对Transact-SQL访问启用FILESTREAM 选中此项可针对Transact-SQL访问启用FILESTREAM。必须选中此控制选项,才能使用其他控制选项。如果不启用此选项,就不能添加FileStream文件组。 (2)针对文件I/O流访问启用FILESTREAM 选中此项可针对FILESTREAM启用Win32流访问。 (3)Windows共享名 使用此控制选项可输入将用来存储FILESTREAM数据的Windows共享的名称。默认为该SQLServer实例的名称。 (4)允许远程客户端针对FILESTREAM数据启用流访问 选中此控制选项可允许远程客户端访问此服务器上的此FILESTREAM数据。 2、修改服务器的属性 打开“SQLServerManagementStudio”,修改该实例的配置。默认配置如下: 上述选项解释如下: (1)“FILESTREAM访问级别”显示SQLServer实例上支持的FILESTREAM的当前级别。若要更改访问级别,请选择以下值之一: 已禁用 无法将二进制大型对象(BLOB)数据存储在文件系统中。此为默认值。即filestreamaccesslevel=0 已启用Transact-SQL访问 可使用Transact-SQL访问FILESTREAM数据,但不能通过文件系统进行访问。即filestreamaccesslevel=1 已启用完全访问 FILESTREAM数据可使用Transact-SQL以及通过文件系统进行访问。即filestreamaccesslevel=0 注意:在首次启用FILESTREAM时,您可能需要重新启动计算机才能配置驱动程序。 (2)“FILESTREAM共享名称”显示在安装过程中选择的FILESTREAM共享的只读名称。 在本次实验中,我们将“FILESTREAM访问级别”设定为:已启用完全访问。 如果是通过T-SQL脚本执行,则运行以下脚本: EXECsys.sp_configureN'filestreamaccesslevel',N'2' RECONFIGUREWITHOVERRIDE 注意:设置完成之后,重启实例。 3、配置防火墙 若要在防火墙保护的环境中使用FILESTREAM,客户端和服务器都必须能够将DNS名称解析为包含FILESTREAM文件的服务器。FILESTREAM要求Windows文件共享端口139和445处于打开状态。 二、配置文件组 1、添加文件组 完成上述操作之后,就可以为该数据库添加专用于FileStream的文件组。 如果是通过脚本操作,请运行以下脚本: ALTERDATABASE[db01]ADDFILEGROUP[FileStreamFileGroup]CONTAINSFILESTREAM 2、添加文件 完成上述操作之后,就可以为该数据库添加FilStream类型的数据库文件。 在本例中,系统并没有为“FileStream数据”的文件类型创建mdf或ndf文件,而是在文件夹C:\SqlData下面自动创建以逻辑名称命名的文件夹,即C:\SqlData\FileData。其中filestream.hdr文件是FILESTREAM容器的头文件。当这个数据库被删除时,mdf、ndf、log连同这个文件夹都会被删除。 如果是通过脚本操作,请运行以下脚本: ALTERDATABASE[db01]ADDFILE(NAME=N'FileData',FILENAME=N'C:\SqlData\FileData')TOFILEGROUP[FileStreamFileGroup] 注意:在上例中,在运行脚本之前,必须存在C:\SqlData,建议使用右侧的选择按钮选择路径。如果路径不存在,就会报错: 同时不能存在重复的文件夹,即不能存在C:\SqlData\FileData。否则也会报错: 3、启动非事务访问 FileTable使Windows应用程序可以获取FILESTREAM数据的Windows文件句柄而不需要SQLServer事务。为了允许对SQLServer中存储的文件进行此非事务性访问,必须为要包含FileTable的每个数据库在数据库级别上指定所需的非事务性访问级别。 选项解释如下: (1)FILESTREAM非事务访问 为从文件系统到FileTables中存储的FILESTREAM数据的非事务性访问指定以下选项之一:OFF、READ_ONLY或FULL。 如果在服务器上未启用FILESTREAM,则该值将设置为OFF并且被禁用。在本次实验中,将其设置为FULL。 (2)FILESTREAM目录名称 为与所选数据库相关联的FILESTREAM数据指定目录名称。在FileTable文件夹层次结构中,此数据库级目录将成为在实例级别为FILESTREAM指定的共享名称的子级以及在数据库中创建的FileTable的父级。 如果启用非事务性访问时没有提供目录名称,则在以后必须提供它,这样才能在数据库中创建FileTable。 如果是通过脚本执行,如下: ALTERDATABASEdb01 SETFILESTREAM(NON_TRANSACTED_ACCESS=FULL,DIRECTORY_NAME=N'ImageFiles') 注意:更改现有数据库时,调用带DIRECTORY_NAMEFILESTREAM选项的ALTERDATABASE(Transact-SQL)语句。使用这些选项更改目录名称时,数据库必须以独占方式锁定,没有打开的文件句柄。 说明:为检查是否在数据库上启用了非事务性访问,可以查询目录视图,脚本如下: SELECTDB_NAME(database_id),non_transacted_access,non_transacted_access_desc FROMsys.database_filestream_options 三、创建FileTable 1、创建第一个FileTable “SQLServerManagementStudio”只提供一个脚本模板,要想创建FileTable还是得用脚本完成: USEdb01 CREATETABLEImageTable1ASFILETABLE 官方的范本为: USE[db01] CREATETABLE[dbo].[ImageTable1]ASFILETABLEON[PRIMARY]FILESTREAM_ON[FileStreamFileGroup] WITH (FILETABLE_DIRECTORY=N'ImageTable1',FILETABLE_COLLATE_FILENAME=Chinese_PRC_CI_AS) 2、创建第二个FileTable CREATETABLEImageTable2ASFILETABLE 3、获取共享路径 文件表创建之后,就会相应的产生一个文件表共享目录,该目录路径可以通过内建函数获取: SELECTFileTableRootPath('ImageTable1') 本次实验所返回的结果为:\\SQL1\SqlFile\ImageFiles\ImageTable1 4、查看 通过Windows资源管理器,可见已经创建了以GUID命名的文件夹。 通过SQLServerManagementStudio,查看表的结构。 四、操作 1、向文件夹中添加文件 通过“Windows资源管理器”,向文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1中添加一个文件A01.GIF。然后运行脚本: select*fromImageTable1 结果如下: 可见,SQLServer自动在Table中添加了记录。 2、文件改名 运行以下脚本: updateImageTable1setname='Cup.GIF'wherename='A01.GIF' 通过“Windows资源管理器”,查看文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1,可见文件A01.GIF已经被改名为Cup.GIF。 3、查看共享文件夹 我们可以继续复制其他文件,然后通过“Windows资源管理器”,查看文件夹。 4、删除文件 可以使用脚本删除,例如: DeleteImageTable1wherename='Cup.GIF' 或者,通过“Windows资源管理器”直接删除该文件。 五、备份和还原 1、备份数据库 使用SQLServer备份数据库时,FILESTREAM数据将与数据库中的结构化数据一起备份。 2、部分备份 如果不想将FILESTREAM数据与关系数据一起备份,则可以使用部分备份将FILESTREAM文件组排除在外。 六、相关说明 详见/zh-cn/library/gg492086.aspx 1、AlwaysOn 在包含FILESTREAM或FileTable数据的数据库属于某一AlwaysOn可用性组时: FILESTREAM和FileTable函数接受或返回虚拟网络名称(VNN),而非计算机名称。有关这些函数的详细信息,请参阅Filestream和FileTable函数(Transact-SQL)。 通过文件系统API对FILESTREAM或FileTable数据进行的所有访问都应该使用VNN,而非计算机名称。 2、表分区 FileTable不支持分区。通过对多个FILESTREAM文件组的支持,在大多数方案中可以解决纯向上扩展问题,而不必使用分区(不像SQL2008FILESTREAM)。 3、复制 FileTable不支持复制和相关功能(包括事务性复制、合并复制、更改数据捕获和更改跟踪)。 4、视图 可以像为任何其他表一样为FileTable创建视图。但是对于为FileTable创建的视图有以下注意事项: 视图将不具有任何FileTable语义,也就是说,视图中的列(包括“文件属性”列)的行为与常规视图列一样,不具有任何特殊语义,对于表示文件/目录的行也是如此。 可以基于“可更新视图”语义更新视图,但是基础表约束可能拒绝更新,就像在表中一样。 可以通过将文件的路径添加为视图中的显式列,在视图中显示该路径。例如: CREATEVIEWMP3FILESASSELECTcolumn1,column2,…,GetFileNamespacePath()ASPATH,column3,…FROMDocuments 参考技术A 选项的意义主角色中的连接
允许所有连接
如果当前server是primary角色时,primary instance允许所有连接(如:读/写/管理)
允许读/写连接
如果当前server是primary角色时,primary instance只允许读/写连接(如果通过ssms连接,将报错、sqlcmd也是报错)
可读辅助副本
是
如果当前server是primary角色时,所有的secondary servers都是可以看的(通过ssms能看结构、数据,但不能更改)
仅读意向
如果当前server是primary角色时,所有的secondary
servers只允许读连接(需要在建立连接时加入key来标明为只读连接:ApplicationIntent=ReadOnly)
否
如果当前server是primary角色时,所有的secondary servers都不可以看
以上是关于如何使用Sqlserver 2012 Always on技术的主要内容,如果未能解决你的问题,请参考以下文章
Windows Server 2012搭建SQL Server Always On踩坑全记录