有没有办法在服务器上只编译一个特定的包?
Is there Any way to compile only one particular package on server?
Oracle 服务器在捕获更新包方面不是很聪明。
所以每当我重新编译我的包时。它抛出现有包无效错误。
如果有什么方法可以让我只刷新服务器上的包。所以我不需要反弹服务器和停止每个人都在使用的服务器。
如果您修改了包(我们称它为 PKG_TEST),规范和正文,它都是用
编译的
alter package pkg_test compile;
如果更改了规范,可能会导致其他依赖对象变得无效(这可能就是您所看到的)。
但是,如果您只修改包体,则不必编译规范(因为它没有更改),而只需修改包体:
alter package pkg_test compile body;
无论您对正文做了什么更改,它们都不会使其他对象失效。因此,根据您对该包所做的操作,选择其中一个命令。
最小化 public 函数、过程和变量。 无效对象和 ORA-04068: existing state of packages has been discarded
错误将在最小化后减少 public 对象并最小化包状态。
包规范中的任何函数或过程都是 public。更改这些函数和过程可能会更改其他对象使用包的方式,从而导致失效。此外,public API 应该被彻底记录和测试。这意味着您希望拥有尽可能少的 public API。出于某种原因,大多数 Oracle 程序不必要地将它们的所有过程和函数都放在规范中,而其中大部分只需要在主体中使用。此更改将使您的程序更好、减少依赖性并最大限度地减少无效对象。
包规范中的任何变量也是 public,并将在会话期间保持其值。与任何语言一样,public 变量也应该最小化。由于某些原因,大多数 Oracle 程序也不必要地将许多变量放在规范中,而不是主体中。如果规范中没有变量,则没有包状态,您将看不到 ORA-04068
.
不要在共享系统上开发。 为每个开发人员提供无限数量的数据库并合并版本控制文本文件中的更改。有许多简单而廉价的方法来获取无限数量的数据库——本地安装的数据库、虚拟机、容器等。还有许多简单而廉价的方法来版本控制文本文件——每个现代 IDE 都可以打开和将文件保存到文件系统,然后使用 Git 或 SVN 之类的东西。
让多个开发人员在一个共享系统上工作根本无法扩展。除了 "it was slightly easier to set it up that way" 之外,没有充分的理由再以这种方式发展。
编译正文,不是规范。正如 Littlefoot 建议的那样,尝试更改主体而不是规范。 (虽然依赖项在 10g 中的粒度更小,但这可能不如在现代版本中有用。)
Oracle 服务器在捕获更新包方面不是很聪明。 所以每当我重新编译我的包时。它抛出现有包无效错误。
如果有什么方法可以让我只刷新服务器上的包。所以我不需要反弹服务器和停止每个人都在使用的服务器。
如果您修改了包(我们称它为 PKG_TEST),规范和正文,它都是用
编译的alter package pkg_test compile;
如果更改了规范,可能会导致其他依赖对象变得无效(这可能就是您所看到的)。
但是,如果您只修改包体,则不必编译规范(因为它没有更改),而只需修改包体:
alter package pkg_test compile body;
无论您对正文做了什么更改,它们都不会使其他对象失效。因此,根据您对该包所做的操作,选择其中一个命令。
最小化 public 函数、过程和变量。 无效对象和
ORA-04068: existing state of packages has been discarded
错误将在最小化后减少 public 对象并最小化包状态。包规范中的任何函数或过程都是 public。更改这些函数和过程可能会更改其他对象使用包的方式,从而导致失效。此外,public API 应该被彻底记录和测试。这意味着您希望拥有尽可能少的 public API。出于某种原因,大多数 Oracle 程序不必要地将它们的所有过程和函数都放在规范中,而其中大部分只需要在主体中使用。此更改将使您的程序更好、减少依赖性并最大限度地减少无效对象。
包规范中的任何变量也是 public,并将在会话期间保持其值。与任何语言一样,public 变量也应该最小化。由于某些原因,大多数 Oracle 程序也不必要地将许多变量放在规范中,而不是主体中。如果规范中没有变量,则没有包状态,您将看不到
ORA-04068
.不要在共享系统上开发。 为每个开发人员提供无限数量的数据库并合并版本控制文本文件中的更改。有许多简单而廉价的方法来获取无限数量的数据库——本地安装的数据库、虚拟机、容器等。还有许多简单而廉价的方法来版本控制文本文件——每个现代 IDE 都可以打开和将文件保存到文件系统,然后使用 Git 或 SVN 之类的东西。
让多个开发人员在一个共享系统上工作根本无法扩展。除了 "it was slightly easier to set it up that way" 之外,没有充分的理由再以这种方式发展。
编译正文,不是规范。正如 Littlefoot 建议的那样,尝试更改主体而不是规范。 (虽然依赖项在 10g 中的粒度更小,但这可能不如在现代版本中有用。)