Oracle 中触发器无效

2023-12-22

在对表进行某些更改后,我的数据库中的某些触发器变得无效。但他们似乎仍在工作。我遇到的唯一问题是,如果我使用 SQL Developer,触发器的左侧会出现红叉,表明它们无效。这是一个大问题吗?

我知道我可以重新编译触发器来解决这个问题,但我不确定这是否真的是一个值得关注的问题。如果是这样,我将需要检查之前的数百个更改并找出导致问题的原因。谢谢。


每当我们将更改部署到数据库对象时,依赖于它的任何代码都会失效。这会影响触发器、视图和存储过程。但是,下次调用该代码时,数据库将自动重新编译它。

所以我们不需要担心这个,对吧?嗯,是的,在某种程度上。问题是,触发器(或其他)的失效对我们来说是一个标志,表明已经进行了更改,这可能会影响该触发器的操作,这可能会产生副作用。最明显的副作用是触发器无法编译。更巧妙的是,触发器可以编译,但在操作期间会失败。

因此,在开发环境中强制重新编译触发器是一个好主意,以确保我们的更改不会从根本上破坏任何内容。但是,当我们在生产中部署更改时,我们可以跳过这一步,因为我们确信所有内容都会根据需要重新编译。取决于我们的神经:)

Oracle 提供了自动重新编译模式中所有无效对象的机制。

  • 最直接的就是使用DBMS_UTILITY.COMPILE_SCHEMA()。但自 8i 以来,这一直很危险(因为对 Java 存储过程的支持引入了循环依赖的可能性),并且不再保证一次性成功编译所有对象。

  • 在9i中Oracle给了我们一个脚本$ORACLE_HOME/rdbms/admin/utlrp.sql它重新编译了东西。不幸的是它需要 SYSDBA 访问权限。

  • 在 10g 中,他们添加了 UTL_RECOMP 包,它基本上完成了该脚本所做的所有事情。这是重新编译大量对象的推荐方法。不幸的是,它还需要 SYSDBA 访问权限。了解更多 http://download-west.oracle.com/docs/cd/B14117_01/appdev.101/b10802/u_recomp.htm#1000010.

在 11g 中,Oracle 引入了细粒度的依赖管理。这意味着对表的更改会以更细的粒度(基本上是列级别而不是表级别)进行评估,并且只有直接受更改影响的对象才会受到影响。了解更多 http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/dependencies.htm#CHDJIIFC.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle 中触发器无效 的相关文章

随机推荐

  • 查找MySQL中同一列中两个值之间的差异

    我有一个名为 MySQL 的简单表 其中包含股价 Table share prices stock id price date 1 0 05 2010 02 24 01 00 00 2 3 25 2010 02 24 01 00 00 3
  • PySpark - 将 DF 列合并到命名的 StructType 中

    我希望将 PySpark 数据帧的多列合并到StructType 假设我有一个像这样的数据框 columns id dogs cats vals 1 2 0 2 0 1 df sqlContext createDataFrame vals
  • 从 NSString 转换为 NSDate 时日期发生变化

    我正在 NSDateFormatter 的帮助下将 NSString 转换为 NSDate 现在 代码在具有设备和模拟器的所有操作系统中都可以正常工作 但它在英国 美国地区创建不同的输出 这是我正在使用的代码 NSDateFormatter
  • 在球衣请求中获取客户端区域设置

    获得的最佳且更便携的方式是什么客户端区域设置在 Jersey JAX RS 请求的上下文中 我有以下代码 GET Produces text html Path myrequest public Response myRequest Con
  • 从终端删除 Safari cookie

    我正在制作一个涉及从 Applescript 控制 Safari 的应用程序 有没有办法在终端 首选 或Applescript 中删除Safari 的cookie 基本上我想使用终端从菜单中选择 重置 Safari 项目 有没有一种方法可以
  • 两个 无间距

  • 在 mac osx 11.6 上安装 ruby​​ 2.6.x 和 3.0.x 时 ruby​​-install 失败

    运行 ruby install 时 构建失败 rbenv 问题中也报告了这一点 https github com rbenv ruby build issues 1725 https github com rbenv ruby build
  • 使用 AJAX 在 Rails 中自动保存表单

    我正在尝试为 Post new 操作自动保存表单 每隔一分钟左右 我想 POST 到 Post autosave 然后检查first or create 并保存 更新 Posts 表中的记录 但我的问题是 我无法再从表单访问 POST 参数
  • 在视频视图中播放 YouTube 视频

    在我的应用程序中 我有一个视频视图 我想在其中播放 YouTube 视频 为此 我尝试了很多方法 例如 VideoView mVideoView new VideoView this setContentView mVideoView mV
  • C++中的“new”运算符,指针问题

    愚蠢的问题 但是每当你调用 new 时 你总是有一个指针吗 SomeClass person new SomeClass 这是因为您需要一个指针来指向为 SomeClass 变量 person 分配的新内存空间吗 谢谢 If new成功完成
  • kml 谷歌扩展不在模式中

    我居住的司法管辖区使用谷歌地球发布了数据 他们指向的kml文件包含
  • 张量流图构造中没有形状错误,但在图计算过程中出现形状不匹配错误

    张量流图构造没有出现错误 但在图计算过程中出现形状不匹配错误tf gradients 我猜错误是在反向传播中 这是我得到的错误 InvalidArgumentError 请参阅上面的回溯 reshape 的输入是一个具有 16777216
  • Anaconda Prompt 不会启动 _NamespacePath

    我有一个奇怪的错误 我找不到解决方案 每次启动 Anaconda Prompt 运行 Windows 10 时 我都会在底部收到以下错误 即使我尝试使用 conda 我也会收到相同的错误 在安装信息之后 我尝试卸载并重新安装 Anacond
  • CSharpCodeProvider 似乎停留在 .NET 2.0,如何获得新功能?

    我有以下相当标准的代码作为包装器CSharpCodeProvider 这个类工作得很好 并且执行得很好等等 但是 尽管我的应用程序是针对 NET 3 5 构建的 并且在进行此编译时引用了 v3 5 程序集 但我仍然无法访问任何额外好的 C
  • 使用 rustc 和 clang 运行 LLVM 文件

    我正在尝试运行 ll文件带有 clang 并出现链接器错误 我有一个文件test rs它只包含一个 main 函数println 陈述 我使用以下命令生成 LLVM IRrustc emit llvm ir crate type bin t
  • 用于字符串插值的 Swift 协议

    我必须实现什么协议来控制 Swift 中字符串插值中对象的表示方式 我不想指定打印的内容 如下所示 struct A var a A println a 您需要实施Printable协议 该协议应该被那些希望定制自己的类型的类型所采用 文本
  • 为什么 VStack 不能在带有滚动视图的 GeometryReader 中工作?

    我的 vStack 滚动视图在没有 GeometryReader 的情况下也能工作 在 AppleTV 中 我没有在 iOS 中进行测试 然后我添加了几何读取器 VStack 像 ZStack 一样 折叠 我能做什么来解决这个问题 是的 我
  • ASP.NET MVC 站点地图和/或安全调整

    ASP NET MVC 中是否有与 Web 表单中的 SiteMap 和安全调整功能等效的功能 我刚刚开始学习 MVC 一直在寻找解决方案 以防止在学习时走上错误的道路 Check ASP NET MVC 站点地图提供程序 https gi
  • 将 Param 与参数数组绑定

    我有一个函数可以执行此操作 function registerUser firstName lastName address postcode email password params array firstName lastName a
  • Oracle 中触发器无效

    在对表进行某些更改后 我的数据库中的某些触发器变得无效 但他们似乎仍在工作 我遇到的唯一问题是 如果我使用 SQL Developer 触发器的左侧会出现红叉 表明它们无效 这是一个大问题吗 我知道我可以重新编译触发器来解决这个问题 但我不