Teradata数据库中临时启用/禁用check constraint的方法
Teradata CHECK约束临时启停操作说明
Teradata 原生支持临时启用/禁用已创建的CHECK约束,无需删除约束后重建,所有操作通过ALTER TABLE语法完成。
操作步骤
前置:确认目标CHECK约束名称
如果你不清楚表上的CHECK约束具体命名,可以先查询系统视图获取约束信息:SELECT ConstraintName, CheckText FROM DBC.ConstraintsV WHERE DatabaseName = '目标库名' AND TableName = '目标表名' AND ConstraintType = 'C'; -- 筛选CHECK类型约束临时禁用CHECK约束
执行下面的语句后,该约束会立即失效,后续所有增改操作不会再校验该约束规则:ALTER TABLE 目标库名.目标表名 MODIFY CONSTRAINT 待禁用的约束名 DISABLED;重新启用CHECK约束
启用分两种场景,根据实际需求选择:- 全量校验后启用(生产环境推荐)
执行时Teradata会全表扫描校验存量数据是否符合约束规则,存在不符合数据时语句直接报错,启用成功后约束为可信状态,优化器可基于约束生成更优执行计划:ALTER TABLE 目标库名.目标表名 MODIFY CONSTRAINT 待启用的约束名 ENABLED; - 跳过存量校验快速启用
仅当你100%确认存量数据全部符合约束规则时使用,执行时不会扫描存量数据,启用速度快,但约束会被标记为非可信状态,优化器不会参考该约束做执行优化:ALTER TABLE 目标库名.目标表名 MODIFY CONSTRAINT 待启用的约束名 ENABLED NO CHECK;
- 全量校验后启用(生产环境推荐)
操作提醒:禁用约束会阻断数据合法性校验,极易产生脏数据,生产环境执行禁用操作前必须评估业务影响,操作完成后建议尽快重新启用约束。
内容的提问来源于stack exchange,提问作者JohnnyDevv
相关产品推荐
相关产品推荐

