查找 Oracle 数据库中对象失效的原因和时间?

在典型的运行应用程序中,不太可能看到视图或存储过程变得无效,因为应用程序通常在正常执行期间不会更改表结构,也不会更改视图或存储过程的定义。对表、视图或PL/SQL单元的更改通常发生在应用程序通过补丁脚本或临时的DDL语句进行打补丁或升级时。在应用程序打了补丁以更改一组被引用对象之后,可能会导致依赖对象变为无效。
以下是schema object失效的一些常见的原因:

  • 在一个被引用对象和每个其依赖对象之间,数据库会跟踪涉及到依赖关系的被引用对象的元素。例如,如果一个单表视图仅选择表中的一部分列,则只有这些列涉及到依赖关系。对于一个对象的每个依赖者,如果对依赖关系中的任何元素的定义进行了更改(包括删除该元素),则依赖对象将被标记为无效。相反,如果只对不涉及依赖关系的元素的定义进行了更改,则依赖对象仍然有效
  • 在许多情况下,如果开发人员在更改schema object时小心谨慎,就可以避免依赖对象的失效以及数据库不必要的额外工作。
  • 依赖对象级联失效。 如果任何对象由于任何原因变得无效,则该对象的所有依赖对象都会立即失效。
  • 如果在一个模式对象上撤销了任何对象权限,那么依赖对象将被级联使其无效。

DBA_DEPENDENCIES 视图可以用于检查哪些对象依赖于其他对象,然后查询 DBA_OBJECTS 来检查每个依赖对象的 last_ddl_time — 这将指示哪些对象已经发生了变化,并导致它们变为无效。下面的 SQL 语句可以用于调查。

查找对象的所有依赖关系 ,

SELECT *
FROM DBA_DEPENDENCIES DP
WHERE DP.REFERENCED_OWNER NOT IN ('SYS', 'SYSTEM', 'PUBLIC')
AND DP.REFERENCED_TYPE != 'NON-EXISTENT'
AND DP.NAME = 'TYPE_YOUR_INVALIDATED_OBJECT_NAME'

查找对象(对象内部不含dblink)的所有依赖关系

SELECT *
FROM DBA_DEPENDENCIES DP
WHERE DP.REFERENCED_OWNER NOT IN ('SYS', 'SYSTEM', 'PUBLIC')
AND DP.REFERENCED_TYPE != 'NON-EXISTENT'
AND DP.REFERENCED_LINK_NAME IS NULL
AND DP.NAME = 'TYPE_YOUR_INVALIDATED_OBJECT_NAME'

检查依赖对象的 last_ddl_time

SELECT DISTINCT DO.OWNER,
DO.OBJECT_TYPE,
DO.OBJECT_NAME,
DO.CREATED,
DO.LAST_DDL_TIME
FROM DBA_DEPENDENCIES DP, DBA_OBJECTS DO
WHERE DP.REFERENCED_OWNER = DO.OWNER
AND DP.REFERENCED_NAME = DO.OBJECT_NAME
AND DP.REFERENCED_OWNER NOT IN ('SYS', 'SYSTEM', 'PUBLIC')
AND DP.REFERENCED_TYPE != 'NON-EXISTENT'
AND DP.REFERENCED_LINK_NAME IS NULL
AND DP.NAME = 'TYPE_YOUR_INVALIDATED_OBJECT_NAME'
ORDER BY DO.LAST_DDL_TIME DESC

检查 DBA_AUDIT_TRAIL 来查找在依赖对象上运行 DDL 命令的用户

SELECT *
FROM DBA_AUDIT_TRAIL DT
WHERE TIMESTAMP BETWEEN TO_DATE ('24/05/2021 23:00:00',
'DD/MM/YYYY HH24:MI:SS')
AND TO_DATE ('24/05/2021 23:59:00',
'DD/MM/YYYY HH24:MI:SS')
AND DT.OBJ_NAME IN
('TYPE_YOUR_OBJECT_NAME_RESULT_OF_ABOVE_SQL')
ORDER BY 5

查找对象(内含dblink)的所有依赖关系

SELECT *
FROM DBA_DEPENDENCIES DP
WHERE DP.REFERENCED_OWNER NOT IN ('SYS', 'SYSTEM', 'PUBLIC')
AND DP.REFERENCED_TYPE != 'NON-EXISTENT'
AND DP.REFERENCED_LINK_NAME IS NOT NULL
AND DP.NAME = 'TYPE_YOUR_INVALIDATED_OBJECT_NAME'

检查属于对象(具有dblink的)的依赖对象的 last_ddl_time

SELECT DISTINCT DO.OWNER,
DO.OBJECT_TYPE,
DO.OBJECT_NAME,
DO.CREATED,
DO.LAST_DDL_TIME
FROM DBA_DEPENDENCIES DP, DBA_OBJECTS@dblink
WHERE DP.REFERENCED_OWNER = DO.OWNER
AND DP.REFERENCED_NAME = DO.OBJECT_NAME
AND DP.REFERENCED_OWNER NOT IN ('SYS', 'SYSTEM', 'PUBLIC')
AND DP.REFERENCED_TYPE != 'NON-EXISTENT'
AND DP.REFERENCED_LINK_NAME IS NOT NULL
AND DP.NAME = 'TYPE_YOUR_INVALIDATED_OBJECT_NAME'
ORDER BY DO.LAST_DDL_TIME DESC

检查 DBA_AUDIT_TRAIL 查找在依赖对象上运行 DDL 命令的用户
在 DBLINK 源数据库上运行此命令。

SELECT *
FROM DBA_AUDIT_TRAIL DT
WHERE TIMESTAMP BETWEEN TO_DATE ('24/05/2021 23:00:00',
'DD/MM/YYYY HH24:MI:SS')
AND TO_DATE ('24/05/2021 23:59:00',
'DD/MM/YYYY HH24:MI:SS')
AND DT.OBJ_NAME IN
('TYPE_YOUR_OBJECT_NAME_RESULT_OF_ABOVE_SQL')
ORDER BY 5

相关推荐

  1. 查找 Oracle 数据库对象失效原因时间

    2024-03-22 17:24:02       17 阅读
  2. mysqlOracle 查询某个时间之内数据

    2024-03-22 17:24:02       42 阅读
  3. Oracle模糊查询

    2024-03-22 17:24:02       10 阅读
  4. Oracle怎么设置时区系统时间

    2024-03-22 17:24:02       33 阅读
  5. 设置失效时间失效问题

    2024-03-22 17:24:02       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-22 17:24:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-22 17:24:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-22 17:24:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-22 17:24:02       20 阅读

热门阅读

  1. 如何下载和安装 macOS

    2024-03-22 17:24:02       14 阅读
  2. 山东高新技术企业的审查流程

    2024-03-22 17:24:02       21 阅读
  3. python常见的异常类型

    2024-03-22 17:24:02       16 阅读
  4. C语言实现射击小游戏

    2024-03-22 17:24:02       20 阅读
  5. Leetcode 448. 找到所有数组中消失的数字

    2024-03-22 17:24:02       16 阅读
  6. 代码随想录 二叉树—找树左下角的值

    2024-03-22 17:24:02       14 阅读
  7. 拒绝拖延。

    2024-03-22 17:24:02       12 阅读
  8. C语言学习笔记day12

    2024-03-22 17:24:02       16 阅读
  9. 机器人物理交互控制的作用

    2024-03-22 17:24:02       19 阅读
  10. 哪些行为会导致Instagram 封号?如何避免封号?

    2024-03-22 17:24:02       18 阅读