我即将在我们的应用程序中实现一项功能,允许用户"上传"PDF或Microsoft PowerPoint文档,然后应用程序将其提供给查看器中的其他用户(因此他们无法"下载"它在'另存为......'意义上).
我已经知道如何在数据库列中保存和检索任意二进制信息,但由于这将是我们应用程序的一个常用功能,我担心该解决方案会导致数据库表格非常庞大(因为我们知道我们的客户之一会想要放置PowerPoint文档中的视频).
我知道有一种方法可以在Oracle中创建一个"目录"对象,但有没有办法使用此功能来存储和检索保存在数据库服务器上其他位置的二进制文件?
或者我对数据库大小过于偏执?
(为了完整性,我们的应用程序是使用CoreLab/DevArt OraDirect.Net驱动程序到Oracle 10g的.Net WinForms )
几个选项:您可以将BLOB列放在自己的表空间中,具有自己的存储特性; 您可以将BLOB存储在自己的表中,通过ID列链接到另一个表.在任何一种情况下,如您所建议的那样,您可以将列定义为BFILE,这意味着实际文件存储在数据库外部的目录中.可能存在的问题是,BFILE LOB不参与事务,并且不能与数据库的其余部分一起恢复.
从第23页开始的Oracle 10gR2 SQL参考,第2章中讨论了这一点.