大对象限制

大对象在用于数据库时存在某些先天限制,这是因为除了智能大对象之外,大对象本身并不是存储在数据库中,而且也不受服务器直接控制。特别需要注意的两个方面是事务回滚和并行控制。

由于除了智能大对象之外,其他大对象均存储在数据库外部,因此对其进行的任何更改不受服务器控制,而且事务终止时也无法回滚更改。例如,在执行 lld_create() 时,将调用操作系统例程来创建大对象本身。如果回滚的事务包含对 lld_create() 的调用,那么服务器将无法删除您刚才创建的对象。

因此,如果发生错误,您应负责清除所分配的全部资源。例如,如果创建了一个大对象,而且用于创建该大对象的事务已终止,那么应删除所创建的这个对象。同样,如果已经打开了大对象,而且事务已终止(或者已落实),那么应关闭该大对象。

同样原因,Large Object Locator 没有提供对大对象直接进行并行访问控制的方式。如果打开大对象进行写入,可能会有两个独立的进程或用户同时更改该大对象。必须提供锁定行之类的方法,以便保证不能同时有多个用户访问大对象进行写入。