为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。 【DM版本】:8.4 【操作系统】:kylin 【CPU】:海光 【问题描述】*:现场将测试环境的表结构、存储过程更新到生产环境,目前两套环境有哪些差异不是很清楚,客户要求不能影响原有数据,现在我们的方案是在测试环境直接导出dmp文件,然后导入的时候只导入新增表结构和有变化的存储过程,不知道咱们现在的导入、导出能不能支持,导入、导出都不选数据行,另外导入表存在时选跳过,我这样做可不可以满足既更新了环境又不影响原有数据?
不能完全满足。 ROWS=N 确实不动原有数据,但“表存在就跳过”只能建新增表;对已有表的加列、改索引、加约束、加触发器一律不生效。存储过程会迁,但是整批无条件覆盖,不是只导“有变化的”。所以它做不到“把测试环境结构更新到生产”。
原因是 dimp 把“表+索引+约束+触发器+注释”当成一个对象包,表已存在就整包跳过;过程、视图不受“表存在跳过”控制,直接 CREATE OR REPLACE。
建议做法
EXCLUDE=(SEQUENCE)
一句话:只建新增表可以这么做;要“环境一致”,必须补 ALTER 脚本 + 过程名单,单靠一次 dmp 导入不行。以上在 8.1.4.170 实测,8.4 建议用同样小用例再验证一遍,参数名以 dimp help 为准。
不能完全满足。 ROWS=N 确实不动原有数据,但“表存在就跳过”只能建新增表;对已有表的加列、改索引、加约束、加触发器一律不生效。存储过程会迁,但是整批无条件覆盖,不是只导“有变化的”。所以它做不到“把测试环境结构更新到生产”。
原因是 dimp 把“表+索引+约束+触发器+注释”当成一个对象包,表已存在就整包跳过;过程、视图不受“表存在跳过”控制,直接 CREATE OR REPLACE。
建议做法
dimp ... ROWS=N INCLUDE=PROCEDURE:P1,P2 FILE=all.dmp ...
EXCLUDE=(SEQUENCE),或导入后核对 LAST_NUMBER,防止回退撞主键。一句话:只建新增表可以这么做;要“环境一致”,必须补 ALTER 脚本 + 过程名单,单靠一次 dmp 导入不行。以上在 8.1.4.170 实测,8.4 建议用同样小用例再验证一遍,参数名以 dimp help 为准。