我有一个场景,Java开发人员对用于从列-表的col-tbl传输数据的变量进行了更改。 现在,我必须将列varchar(15)更改为varchar(10)。但是,在进行此更改之前-必须处理现有数据以及同一列上的约束/依赖项。
最好的顺序是什么? 我正在考虑先检查约束,然后修剪现有数据,然后更改表。 请建议如何处理约束/依赖关系,以及在处理约束/依赖关系之前,如何检查此类依赖关系。
答案 0 :(得分:0)
模式演化(随着时间的推移,数据库中的表和列发生DDL更改,同时保留现有数据和功能)是一个很好理解的主题,其中包含几种解决方案,其中一些是RDBMS无关的,其他是内置的到RDBMS解决方案。
生产环境的关键要求是既需要正向更改又需要回退,并且可以无人值守运行。
许多开源倡导者使用Liquibase,Liquibase也有商业版本。
用于Linux / Unix / Windows的Db2还提供了一个内置的存储过程SYSPROC.ALTOBJ,它可以自动执行各种模式演变更改,包括减小列的大小。您需要仔细研究其文档,并在非生产环境中对其进行全面测试,直到满意为止。在这里阅读 https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.rtn.doc/doc/r0011934.html
您当然可以使用任何喜欢的语言(包括SQL)来编写自己的脚本,但是请记住,您还应该构建和测试回退脚本。