遇到的ORA-04045和ORA-16000错误

ORA-04045错误:这个错误通常表示数据库中的某个对象(如表、视图或同义词)无效。这可能是因为对象的定义发生了变化,例如基表的结构被修改,导致依赖于它的对象无效。
ORA-16000错误:这个错误表示数据库或插接式数据库是以只读访问方式打开的。这意味着数据库实例不允许进行写操作,包括重新编译或重新验证视图等。

解决办法:
办法1,直接在主库查询该视图,这会自动触发视图的自动编译,并同步到从库执行。例如,执行 SELECT * FROM 视图名称;

办法2,在主数据库上手动编译无效的对象。示例:ALTER VIEW 用户名.视图名 COMPILE;

按办法2思路,批量生成编译语句

SELECT 'ALTER VIEW ' || OWNER || '.' || OBJECT_NAME || ' COMPILE;'
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'VIEW' AND STATUS = 'INVALID'
and OWNER = 'UserName1' 

 按办法1思路,批量生成执行语句

--查询一些用户下,失效的视图,并生成批量执行语句
SELECT 'SELECT * FROM ' || OWNER || '.' || OBJECT_NAME || ' WHERE 1=2;'
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'VIEW' AND STATUS = 'INVALID'
and OWNER in ( 'Y111','G222','T333' )

 

posted on 2025-01-22 15:32  yi-sheng  阅读(1770)  评论(0)    收藏  举报