内容阅读
在知识库中专注阅读,并随时返回相关工具与课程
ORA-22289常见LOB 大对象
无法对未打开的文件执行 FILECLOSE
Cannot perform FILECLOSE on an unopened file
错误描述
尝试关闭未打开的 BFILE。DBMS_LOB.FILECLOSE 需要 BFILE 已通过 DBMS_LOB.FILEOPEN 预先打开。
可能原因
- DBMS_LOB.FILECLOSE 在没有先调用 DBMS_LOB.FILEOPEN 的情况下被调用
- 在 FILEOPEN 和 FILECLOSE 之间发生异常,FILECLOSE 在错误处理程序中被调用
- BFILE 定位器在 FILEOPEN 后被重新初始化
解决方案
- 1关闭前检查文件是否打开:IF DBMS_LOB.FILEISOPEN(v_bfile) = 1 THEN DBMS_LOB.FILECLOSE(v_bfile); END IF;
- 2确保在任何文件操作前调用 FILEOPEN
- 3在异常处理程序中使用 DBMS_LOB.FILECLOSEALL 作为清理
诊断命令
SELECT directory_name, directory_path FROM dba_directories;SELECT * FROM dba_lobs WHERE data_type = 'BFILE';#lob#bfile#fileclose#fileopen