【问题标题】:Oracle: is it possible to create a synonym for a schema?Oracle:是否可以为模式创建同义词?
【发布时间】:2011-04-16 08:30:42
【问题描述】:

首先

我是 Oracle 新手,我没有本地的 Oracle 专家来帮助我。

这是我的问题/问题

我有一些 SQL 脚本必须发布到多个 Oracle 实例。 脚本创建存储过程。
创建存储过程的架构不同于包含存储过程从中读取的表的架构。

在不同的实例上,包含表的架构具有不同的名称。

显然,我不想编辑脚本来为不同的实例定制。

有人建议我解决方法可能是设置同义词。

是否可以为每个实例上的表架构定义同义词,并在我的脚本中使用同义词?

有没有其他方法可以在不每次都编辑脚本的情况下完成这项工作?

感谢您的帮助。

【问题讨论】:

    标签: oracle schema synonym


    【解决方案1】:

    知道什么版本的 Oracle 会有所帮助,但as of 10g--No, you can't make a synonym for a schema
    您可以为表创建同义词,这将允许您不在脚本中指定架构。但这意味着同义词必须在每个实例上都相同才能有任何用途......

    另一种选择是将架构引用替换为变量,因此当脚本运行时会提示用户输入架构名称。我更喜欢这种方法,因为它的工作量更少。下面是一个适用于 SQLPlus 的示例:

    CREATE OR REPLACE &schema1..vw_my_view AS
      SELECT *
        FROM &&schema2..some_other_table
    

    这样做的好处在于,运行脚本的人只会为每个变量提示一次,而不是每次遇到变量时。所以要小心拼写错误:)

    【讨论】:

    • 变量听起来是一个非常明智的选择。非常感谢您的建议。我试试看!
    • 要完成这项工作,您需要将引用设为&&schema1..vw_my_view。句点默认用于表示变量名的结束,因此在将它们用于架构时需要两个句点:一个表示变量的结束,另一个作为架构/对象分隔符。
    • @Allan:更新了,我不记得这在 10g 上是个问题,但我也没有将它们用作架构占位符。
    【解决方案2】:

    是的,有一种创建模式同义词的隐藏方法。

    有一个隐藏参数_enable_schema_synonyms。默认为 false ,但您可以将其设置为 true 并创建同义词。

    【讨论】:

    • 自 12 世纪以来! blog.dbi-services.com/…
    • 但它们是全局的 :-/,因此您不能在不同的模式中使用同名的同义词,例如具有混合产品/测试实例,其模式为 customer_mgmt_prodcustomers_mgmt_testproducts_mgmt_prodproducts_mgmt_test,并带有“本地化同义词” customers_mgmtproducts_mgmt 应该引用相应的 testprod 架构。
    【解决方案3】:

    是的,您可以为架构创建同义词。

    select ksppinm, ksppstvl from x$ksppi a, x$ksppsv b where a.indx=b.indx and ksppinm like '%schema%synonym%'
    ALTER SYSTEM SET  "_enable_schema_synonyms" = true SCOPE=SPFILE;
    STARTUP FORCE
    show parameter synonym
    

    假设您已经有一个名为 ORA 的模式...

    CREATE SCHEMA SYNONYM  ORASYN for ORA;   -- create synonym for schema
    CREATE TABLE ORASYN.TAB1(id number(10)); -- create table in schema
    

    更多信息在这里:http://oracle-network.com/database/how-to-create-synonym-for-a-schema/

    【讨论】:

    • 如果可能,添加相关文本和链接。由于链接将来可能会更改
    • 自 12 世纪以来! blog.dbi-services.com/…
    • 请将所有相关内容放在这篇文章中,以便在文章消失时,一些答案的上下文仍然可供未来的访问者使用。 - 这里的链接已经失效了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    相关资源
    最近更新 更多