首先我们要了解什么是RSB?
即Remote Blob Storage,翻译成中文即远程大对象存储。BLOB,即二进制大对象。这个数据可以是文本格式的或二进制格式的。当在SQL Server中使用BLOB数据时,每条记录的数据量一般都远远超过了一个单独记录的8K的限制。
近段时间,我花了很多时间有点试图找到一个能够真正处理SharePoint 2010和RBS 互动的方法.这里我发表一遍文章作为总结,我还是介绍codelplex上面的一个解决方案吧,这样大家能够对这样的问题有一个整体的把握。解决这个问题对于我个人来说,也增加了了解有关SQL Server 2008,RBS框架,和SharePoint 2010中的相关知识。
Sharepoint对FILESTREAM 提供程序是有非常多的限制的,这点你可以阅读相关的SDK来获取相关知识。首先,它只能用于在SQL Server的本地卷。所以,你不能廉价的储存的二进制文件。必须支付高昂的微软授权费用。此外,默认情况下,FILESTREAM的供应商似乎把所有的二进制存在一个文件里。 NTFS格式曾经当一个文件特别大的时候有一些问题。这可能是在较新的平台已经解决了,但总的来说,拥有超大文件的系统多多少少会有一些问题的。我坚信,绝大部分人是不会愿意在自己的系统中出现超大型文件的。
为了让sharepoint能够按照我们的意愿来工作,我们需要自己定义一个provider。本文章所使用的程序源代码我会全部打包成附件给你。你可以在RBS解决方案下载
在我们开始之前,你必须对你的sharepoint服务器的物理结构有一定的了解。确定有多少个前端服务器,这有一个专属名词叫Web Front-End服务器(WFE),如果你有多个WFE,那么你就必须在每台WFE上重复2到9步的操作。
现在我们开始:
1.在SQL的企业管理器里面运行下面的语句
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE NAME = N'##MS_DatabaseMasterKey##') CREATE MASTER KEY ENCRYPTION BY PASSWORD = N'Admin Key Password !2#4'
2.下载 rbs_x64.msi 并且保存到你的每一台WFE上面
3.运行下载的程序
这里再介绍一下安装步骤。
注意:以下过程只是解决那些安装不成功的一个例子罢了,具体项目里面,还需具体情况具体分析。
(1)FileStream一般是没有必要安装的
(2)这里我们使用default
(3)这里没什么讲的(4)配置log,我这里把所有的log都设为警告,你可以根据你的实际情况来填写
(5)这一步,你需要谨慎,因为RBS将会在你的内容数据库运行相应的脚本,当然你还可以设立一个任务,在将来的某个时刻运行,这一点对于部署到真实环境是非常重要的。一般都会选择在夜深人静的时候。。・#%¥
(6)当程序运行完脚本之后,你的内容数据库将会变成下面这个样子
4.下载 RBS解决方案当然你也可以自己写一个,不管怎么样,这都是一个很好的例子
5.看在这篇文章的份上,创建一个文件夹吧,这里为了掩饰,我创建为 c:\CodePlex_RBS_Provider
6.将附件中Binaries文件夹拷贝到c:\CodePlex_RBS_Provider 下面
7.现在用记事本来写一段命令,我这里创建一个c:\CodePlex_RBS_Provider\InstallProvider.cmd
不用着急我这里没有复制代码,代码已经在附件里面了,这里只是一个演示而已。
8.以管理员身份(非常重要)运行这些命令
这里附上一张运行良好的截图
10.以管理员身份运行 SharePoint 2010 Management Shell.
11.运行下列命令让我们的RBS PROVIDER来处理我们的内容数据库
$site = get-spsite http://siteurl/
$rbss = $site.ContentDatabase.RemoteBlobStorageSettings
$rbss.Enable()
$rbss.SetActiveProviderName($rbss.GetProviderNames()[0])
$rbss
同样,为了避免大家出错了还不知道,我这里附上一张运行良好的截图
OK ,你已经完成了所有的操作!
说了这么久,还没有让大家看看我的最后效果。下面我来证明一下这个方法是哦真正有效的。
未装RBS之前,我运行如下命令得到如下结果。
安装好若RBS之后,来看看我的成就
那么究竟哪些数据到哪里去了呢?此时,你不会怀疑我把你的所有数据都搞掉了吧。。。那你岂不是要恨上我一小会?呵呵,答案马上揭晓:
你的数据都在这里好好的存着呢.下面再来谈到两个问题,免除你使用这个方案的后顾之忧。
如何使用已有的BLOB内容
如果你要使用已有的BLOB内容,你运行下面的 PowerShell 就可以了
$rbss.Migrate() ;
这条命令将会把所有的已有的BLOB内容传送到当前活动的RBS Provider存储。
如何将所有的BLOB数据返回到数据库中
如果我们需要遗弃blob的存储方式或者换一个更好的BLOB provider,我们需要PowerShell 运行一下命令
$rbss.SetActiveProviderName("")
$rbss.Migrate()
这句代码会将你所有的blob数据返回到数据库中存储。
有了以上两个解决办法,真可谓是退可守,进可攻。你还在犹豫什么呢?赶快试试吧。
OK 终于写完了这篇文章,今天博客园好像有点问题,中途页面访问不了,提交错误等等。不过,即使如此,我还是完成了这篇文章。
附件:sharepoint的RBS解决方案 如果你觉得这篇文章有价值,请点击推荐