有不同种类的 LOB 可以存储在数据库或外部文件中。
内部 LOB
数据库中的 LOB 以优化空间并在数据库表空间内提供高效访问的方式存储。
内部 LOB(BLOB、CLOB、NCLOB)还提供数据库服务器的事务支持(提交、回滚等)。
- BLOB(二进制 LOB)用于存储非结构化二进制(也称为“原始”)数据,例如视频剪辑。
- CLOB(字符LOB)用于存储来自数据库字符集的大块字符数据。
- NCLOB(国家字符LOB)用于存储来自国家字符集的大块字符数据。
持久性和临时性 LOB
内部 LOB 可以是持久的或临时的。持久 LOB 是存在于数据库表行中的 LOB 实例。仅在本地应用程序范围内实例化 LOB 时,会创建临时 LOB 实例。
当您将实例插入表行时,临时实例将成为持久实例。
持久性 LOB 使用复制语义方法并参与数据库事务。您还可以在任何事务或系统故障事件中恢复持久性 LOB,并且可以轻松提交或回滚。换句话说,根据与使用数据库对象相关的 ACID 属性与使用持久 LOB 相关。
外部 LOB 和 BFILE 数据类型
外部 LOB 是存储在数据库表空间之外的操作系统文件中的数据对象,没有来自数据库服务器的事务支持。
BFILE 具有只读数据类型。数据库允许对存储在 BFILE 中的数据进行只读字节流访问。您不能从应用程序中写入 BFILE。
数据库对 BFILE 列使用引用语义。存储在 BFILE 类型的表列中的数据在物理上位于操作系统文件中,而不是在数据库表空间中。
BFILEs 基本上用于保存:
- 二进制数据,在您的应用程序运行时不会更改,例如图形。
- 加载到其他大型对象类型中的数据,例如可以操作数据的 CLOB 或 BLOB。
- 适用于字节流访问的数据,例如多媒体。
- 只读数据比较大,避免占用大量数据库表空间。
操作系统访问的任何存储设备都可以保存 BFILE 数据,包括硬盘驱动器、CD-ROM、CD 和 DVD。如果操作系统支持对操作系统文件的流模式访问,则数据库可以访问 BFILE。
BFILE 的安全性
基本上,目录对象用于访问和使用 BFILE。 DIRECTORY 是包含该文件的服务器文件系统中实际物理目录的别名。仅当在 DIRECTORY 对象上获得授权时,才允许用户访问该文件。
- DDL(数据定义语言)SQL 语句如 CREATE、REPLACE、ALTER 和 DROP 与 DIRECTORY 数据库对象一起使用。
- DML(数据管理语言)SQL 语句用于授予和撤销对 DIRECTORY 对象的对象权限。
在一个会话中最多可以同时打开 10 个 BFILES。
Large Objects Datatypes | Description |
---|---|
Binary Large Object (BLOB) | Stores any kind of data in binary format such as images, audio, and video. |
Character Large Object (CLOB) | Stores string data in the database having character set format. Used for large set of characters/strings or documents that use the database character. |
National Character Large Object (NCLOB) | Stores string data in National Character Set format. Used for large set of characters/strings or documents in the National Character Set. Supports characters of varying width format. |
External Binary File (BFILE) | BFILEs can be accessed from your application on a read-only basis. Use BFILEs to store static data, such as image data, that does not need to be manipulated in applications. |