DB2 z/OS - 为现有表创建表别名/同义词,指向其他现有表

Posted

技术标签:

【中文标题】DB2 z/OS - 为现有表创建表别名/同义词,指向其他现有表【英文标题】:DB2 z/OS - create table alias / synonym for existing table table, pointing to other existing table 【发布时间】:2016-04-28 15:10:40 【问题描述】:

是否可以为指向其他现有表的现有表创建别名或同义词?

情况:我有一个基于 Java 和 Hibernate 的工具,我正在执行一项任务,将一些区域从旧数据库表 (SchemaOLD.TableOLD) 迁移到新表 (SchemaNEW.TableNEW ) (所有这些都发生在同一个数据库服务器中)。 DONE 事情已经接近尾声了,但我发现一些遗留的第 3 方组件仍然指向原始位置 (SchemaOLD.TableOLD)。由于一些业务限制,我不得不寻找更快的替代解决方案(而不是同时迁移那些其他组件......)。

我需要以某种方式使数据库服务器将 SchemaOLD.TableOLD 字符串“解析”为新字符串 SchemaNEW.TableNEW,以便这些旧组件可以不受干扰地运行同时实际​​从新位置检索数据。我需要这样做数据库中仍然存在新旧表

这有可能吗? 什么是最好的解决方案、别名或同义词?这两者之间的区别对我来说有点不清楚......

谢谢。

【问题讨论】:

也许是一个愚蠢的答案/问题:但为什么不迁移,然后将 NEW 重命名为 OLD? 它是这样的: - 我做了迁移;现在我的工具从新位置读取。 - 我有那些仍然处理旧数据的旧旧组件我需要:让旧旧组件从新位置读取数据,而不更改它们。因此,需要以某种方式将旧字符串“解析”为新字符串。 【参考方案1】:

如果您想使用ALIASSYNONYM,那么您应该使用ALIAS。以下是来自SYNONYM 知识中心页面的注释:

重要提示:使用别名而不是同义词。同义词 类似于别名,但仅支持与别名兼容 以前的版本。未来版本中可能不提供同义词 DB2®。同义词在 DB2 for z/OS® 中的行为与在 DB2 for z/OS® 中的行为不同 其他 DB2 系列产品。编写新 SQL 时不要使用同义词 语句或创建可移植应用程序时。

另一个选项可能是VIEW

CREATE VIEW SchemaOLD.TableOLD AS
    SELECT * FROM SchemaNEW.TableNEW

如果您还需要阻止旧实用程序更新“新”表,您可以考虑在该视图上使用 trigger。

【讨论】:

谢谢,了解您写的关于别名与同义词的内容非常有用。关于意见建议,在SchemaOLD.TableOLD 位置仍然存在的情况下,类似的方法会起作用吗?名为SchemaOLD.TableOLD 的视图和表将同时存在于数据库中... 这是不可能的。这来自the documentation:[视图名称] 不得标识当前服务器上存在的表、视图、别名或同义词......别名也是如此。我想你必须花一些时间来删除 SchemaOLD.TableOLD 表。 还有RENAME 命令,因此您可以将旧表重命名为其他名称,然后创建视图。 RENAME 很快,基本上只是更新该表的目录信息。

以上是关于DB2 z/OS - 为现有表创建表别名/同义词,指向其他现有表的主要内容,如果未能解决你的问题,请参考以下文章

Db2 v12 z/OS 密码哈希表

查询以选择具有特定最后一列的所有表 Ibm Db2 z/os

DB2 Z/OS:查找表中缺失的数据

嵌套表表达式不适用于 db2 z/OS

在 Z/OS 上的 db2 的 JDBC URL 中设置默认表空间?

我想使用 SQL for DB2 z/OS v9 计算模式中所有表中的记录