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】:如果您想使用ALIAS
或SYNONYM
,那么您应该使用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 - 为现有表创建表别名/同义词,指向其他现有表的主要内容,如果未能解决你的问题,请参考以下文章
查询以选择具有特定最后一列的所有表 Ibm Db2 z/os