【问题标题】:Oracle 10g. Create alias for schema while import data甲骨文 10g。导入数据时为模式创建别名
【发布时间】:2013-03-04 19:05:55
【问题描述】:

我有一个带有 Oracle 11 的产品盒和一个名为 A 的模式。出于测试目的,我需要产品数据的本地快照。数据不是很大,所以导出不是问题。我已将A 导出到一组 SQL 文件(使用 DBeaver)中,每个表一个,内容如下:

INSERT INTO A.TABLE1 (F1, F2, F3) VALUES ('v11', 'v21', 'v31');
INSERT INTO A.TABLE1 (F1, F2, F3) VALUES ('v12', 'v22', 'v32');

等等。问题是,出于开发目的,我使用名为 B 的架构,所以在导入时我需要这样的插入:

INSERT INTO B.TABLE1 (F1, F2, F3) VALUES ('v11', 'v21', 'v31');
INSERT INTO B.TABLE1 (F1, F2, F3) VALUES ('v12', 'v22', 'v32');

我知道我可以找到所有INSERT INTO A. 并将其替换为INSERT INTO B.,这将解决我的问题,但也许我可以为架构B 创建某种别名,这样我就可以这样做(伪代码) :

CREATE ALIAS 'A' FOR SCHEMA 'B'
@TABLE1.sql
@TABLE2.sql
DELETE ALIAS 'A'

【问题讨论】:

    标签: sql oracle plsql oracle10g dbeaver


    【解决方案1】:

    完全不使用架构名称编写脚本。或者,如果它是由一些愚蠢的工具生成的,则将其编辑模式名称:)

    在您的驱动程序脚本中,在调用插入脚本之前运行ALTER SESSION SET CURRENT_SCHEMA x

    【讨论】:

      【解决方案2】:

      您不能创建将一个架构映射到另一个架构的别名。

      • 您可能会导致生成脚本的工具完全省略架构名称。然后,您可以在任何您想要的架构中运行 INSERT 语句
      • 您可以使用其他工具。例如,Oracle 导出和导入实用程序(经典或 DataPump)具有可让您从一种模式映射到另一种模式的参数。

      但是,我强烈质疑使用不同于生产环境的模式名称进行开发的智慧。这大大增加了诸如推广代码之类的事情的复杂性。某人(或某些工具)会无意中在查询中将模式前缀添加到表名中。在将脚本从一种环境升级到另一种环境之前,您必须手动编辑脚本,并且最终有人会在升级过程中犯错误并更改代码的功能。

      【讨论】:

      • 我们在 prod 中使用 J2EE 数据源,因此模式名称与应用程序和代码分离。我们的架构和开发过程远非理想,我同意你的看法。 DBeaver 是我笔记本电脑上唯一的工具,它似乎不能省略模式名称。不过,感谢您的快速回答!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 2020-05-21
      • 2022-12-05
      • 2010-10-18
      • 1970-01-01
      相关资源
      最近更新 更多