Unable to access lob stream

本文详细解析了在SpringBoot中使用delete方法时遇到的“Unable to access lob stream”错误,并提供了解决方案。通过添加@Transactional注解,确保了事务一致性,避免了先查询再删除时的异常。

一、问题描述

在使用spring boot 操作数据库时,使用delete方法删除数据库记录时,报错。报错信息:

{
	"exception":"JpaSytemException",
	"exceptionMessage":"Unable to access lob stream;nested exception is org.hibernate.HibernateException:Unable to access lob stream",
	"status":false
}

二、解决方案

需要添加注解,才能使用。在repostory接口的delete方法上,需要添加注解,才能使用。

	@Transactional
    public void deleteByName(String name);

三、问题分析

springboot在实现删除方法的时候,底层先调用find方法做查询操作,然后再做删除操作。为保证事物的一致性,需要添加注解。

在 Oracle 数据库使用 `expdp`(数据泵导出)过程中,遇到 `ORA-39171` 和 `ORA-01691: unable to extend lob segment` 错误,通常表明在导出操作期间,数据库无法扩展 LOB 段所需的表空间,导致操作失败。 ### 问题原因 1. **表空间不足**:目标表空间已满,无法为 LOB 段分配更多空间。 2. **临时表空间不足**:导出操作可能涉及大量临时数据处理,若临时表空间不足,也可能引发此问题。 3. **LOB 存储参数配置不当**:如 `CHUNK`、`PCTVERSION` 或 `CACHE` 设置不当,可能导致存储效率低下,增加空间需求。 ### 解决方案 #### 1. 增加表空间容量 - 为受影响的表空间(如 `USERS` 或 `SYSTEM`)添加新的数据文件或扩展现有数据文件的大小。 ```sql ALTER TABLESPACE USERS ADD DATAFILE '/u01/oradata/mydb/users02.dbf' SIZE 10G AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED; ``` - 确保文件系统或存储设备有足够的可用空间支持扩展[^2]。 #### 2. 使用 `REUSE_DUMPFILES` 参数 - 在 `expdp` 命令中使用 `REUSE_DUMPFILES=Y` 参数,允许重用已存在的转储文件,减少临时空间占用。 ```bash expdp aaa/aaa_1234 full=y directory=test dumpfile=expdp_full_%U.dmp logfile=expdp.log filesize=2G parallel=6 reuse_dumpfiles=y ``` #### 3. 优化 LOB 存储参数 - 修改 LOB 列的存储参数,如减少 `CHUNK` 大小或禁用 `CACHE`,以提高存储效率。 ```sql ALTER TABLE my_table MOVE LOB(my_lob_column) STORE AS (CHUNK 8K NOCACHE); ``` #### 4. 使用 `TRANSFORM=DISABLE_ARCHIVE_LOGGING` 参数 - 在导出过程中禁用归档日志记录,减少对表空间的写入压力。 ```bash expdp aaa/aaa_1234 full=y directory=test dumpfile=expdp_full_%U.dmp logfile=expdp.log filesize=2G parallel=6 transform=disable_archive_logging:y ``` #### 5. 调整临时表空间 - 确保临时表空间(`TEMPORARY` 类型)足够大,可以处理导出过程中的临时数据。 ```sql ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/oradata/mydb/temp02.dbf' SIZE 10G AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED; ``` #### 6. 监控和清理表空间 - 定期监控表空间使用情况,清理不必要的对象或归档日志,释放空间。 ```sql SELECT tablespace_name, SUM(bytes) / 1024 / 1024 AS used_mb FROM dba_segments GROUP BY tablespace_name; ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值