【问题标题】:How many disk space oracle synonym takes?oracle 同义词占用多少磁盘空间?
【发布时间】:2015-04-05 05:30:06
【问题描述】:

我们在我的公司遇到了问题,因为每个人都共享开发 Oracle 数据库。因此,如果一个开发者想要修改一个过程或包,例如,其他的应用程序将会失败,直到这个第一个开发者结束他的工作。

所以我认为如果我可以在我的数据库中为每个工作需求在数据集对象的同义词(或多个)中创建一个用户会很棒。

例子来了:

例如,我有一个名为 D9877 的需求。我对这个需求的工作是修改一个名为 MYPCKG 的包。所以要开始分配,我首先在我的MYPCKG 的同义词中创建一个Oracle 用户作为D9877。这样,任何修改都将应用于同义词,而不会影响任何其他开发人员。

这是我的问题:

  • 我能否做到这一点而不会导致服务器存储爆炸?

  • oracle 同义词占用多少磁盘空间?

【问题讨论】:

    标签: oracle storage space disk synonym


    【解决方案1】:

    我认为您对同义词的理解不太正确。

    同义词是另一个对象的链接。作为 Windows 上文件的快捷方式或 Linux 上的链接。

    为了能够并行更改某些包,您需要确保您的应用程序可以安装在专用架构上。您可以从主应用程序模式在您的表上创建本地同义词(因为表确实占用空间!)并在您的模式中编译包。其他开发人员可以拥有自己的应用程序版本(即包、视图)。

    但是您需要考虑一些情况,例如触发器(在同一个表上拥有 2 个版本的触发器可能会很棘手)、应用程序执行的表的一些动态 DDL,例如截断表等。

    【讨论】:

    • 所以我认为专用模式会对我有所帮助。虽然它仍然会占用大量磁盘空间,不是吗?
    • 正如我所提到的,数据库中的磁盘空间由表(表空间)占用,而不是由其他对象占用。其他对象在系统字典中注册。它可能需要更多的兆 - 你不应该担心它。我的观点是,在您的私有模式中,您只保留可编译的对象 - 包 - 但所有包含您保留在主模式中的数据的表。所以你不会重复数据
    【解决方案2】:

    同义词占用几个字节的磁盘空间,但这一点都不重要。这种方法不能解决这个问题。

    首先,您似乎误解了同义词的含义。这是同一对象的另一个名称。您不能“对同义词应用修改”,但即使可以,您也会修改对象本身。

    有时可以使用同义词来区分软件包版本。说,你有包A;都用它。您可以制作包 A_VERSION_1 和 A_VERSION_2,A_VERSION_2 的公共同义词 A 和 A_VERSION_2 的私有同义词 A。如果这样做,您将可以使用 A_VERSION_2 调试您的应用程序,而所有其他应用程序都使用 A_VERSION_1。

    坏消息是这种方法也不起作用。它仅在您从应用程序中直接调用 A 时才有效。但是让我们假设我们有两个包,A 和 B(authid 定义器)。 B 使用 A。您从应用程序中调用 B,您应该修改 A。在这种情况下,B 将永远不会查看您的私有同义词。您还需要使用它的私有同义词来制作 B_VERSION_2 等。鉴于数据库对象之间的相互调用次数,这是不可能使用的方法。

    【讨论】:

    • 如果您对对象拥有正确的权限,那么您当然可以“对同义词应用修改”;它会按照你说的修改对象。
    • 怎么样?我不知道这种能力。如果使用 CREATE OR REPLACE 它不会取消引用同义词。如果使用 ALTER PACKAGE 它不能改变正文(它也不会取消引用同义词)。
    • 如果您alter package <synonym name> compile(例如)并且用户对实际包具有正确的权限,您将被允许编译该包。我没有说同义词就是您所描述的指针以外的任何东西。
    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 2011-04-30
    • 2011-02-10
    • 2013-11-02
    • 1970-01-01
    • 2011-09-22
    • 2015-10-07
    • 1970-01-01
    相关资源
    最近更新 更多