【问题标题】:Comparing one table in 2 schemas to find missing columns比较 2 个模式中的一个表以查找缺失的列
【发布时间】:2017-03-20 05:15:33
【问题描述】:

我进行了研究;我没有找到与我的问题类似的东西。如果我的问题重复了,请见谅,因为我没有在我的研究中找到。

我有 2 个模式,schema1 和 schema2,它们都有相同的 6 个表。

但并非每个表在架构中都有相同的列。

Exp: tab1 在 schema1 中有 40 列,但 tab1 在 schema 2 中有 38 列。所以我想添加 2 个缺失的列。我需要插入一些数据。

我可以手动插入它们,但这需要我一些时间,不是有一个简单的查询吗?

在我的研究中,我发现了对此有所帮助的工具。谢谢

【问题讨论】:

  • 您是否要确保 schema2 具有与 schema 1 完全相同的结构和数据?
  • @DavidAldridge 是的,我很确定。
  • 为什么不使用导出/导入来复制 schema1?
  • 抱歉,我不是 oracle 方面的专家,我知道如何处理用户对象,但是对于重复的模式该怎么做?

标签: oracle


【解决方案1】:

下面将显示 schema1 中不存在于 schema2 中的列。

SELECT table_name, column_name, data_type, data_length
  FROM all_tab_columns
 WHERE owner = 'schema1'
MINUS
SELECT table_name, column_name, data_type, data_length
  FROM all_tab_columns
 WHERE owner = 'schema2'

我编辑了上面的内容以包含 Alex 的建议,以在输出中包含数据类型和长度。

【讨论】:

  • 您可能希望以两种方式运行它以捕获丢弃的列,并且您也可以添加数据和长度列以发现对两者中都存在的列的更改。
  • @moudiz 我不明白为什么您不能在服务器之间执行此操作,但是您必须在一个实例上设置一个 Oracle 数据库链接,该链接指向另一台服务器上的 Oracle 实例。然后,您将修改上述远程服务器查询中的 FROM 语句以包含数据库链接(即 FROM all_tab_columns@db_link
【解决方案2】:

如果您想查看双方的差异,请使用full outer join

select      a.table_name , a.column_name , a.data_type , a.data_length , 
            b.table_name , b.column_name , b.data_type , b.data_length
from        all_tab_columns a full outer join all_tab_columns b 
on          (a.column_name = b.column_name)
where       a.owner = 'OWNER_A'
and         a.table_name = 'TABLE_A'
and         b.owner = 'OWNER_B'
and         b.table_name = 'TABLE_B'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-11
    • 2022-09-27
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多