数据迁移判断非空约束(r2笔记45天)

在数据迁移中,经常会碰到null值的问题,比如在源库中,某些列可能是null值,但是在目标库中,却有非空约束。这样在数据的迁移过程中就会发生问题。 为了更好的对数据的非空问题进行判断,我写了如下的脚本来生成检查的脚本,基本的思路就是生成动态sql,类似 select count(1) from xxx where xxx is null,如果输出结果不为0,说明在源库中存在着非空约束的问题。 脚本需要在目标库中生成,然后在源库执行即可,可以在执行的过程中,考虑加入并行等。 因为非空约束的条件在user_constraints中式long类型卡所以不能做字符串拼接等操作,就当做独立的一列来处理。 sqlplus -s n1/n1 <<EOF set linesize 150 set feedback off set pages 0 col search_pre format a58 col search_condition format a50 spool not_null_constraint_$1.sql_tmp select /*+rule*/ 'select count(1) from ' || table_name || ' where ' search_pre, search_condition, ';' from user_constraints where table_name =upper( '$1') and constraint_type = 'C' and constraint_name in (select constraint_name from user_cons_columns where table_name = upper('$1') and column_name in (select column_name from user_tab_cols where table_name =upper( '$1') and nullable = 'N')); spool off; EOF sed 's/ NOT / /g' not_null_constraint_$1.sql_tmp > not_null_constraint_$1.sql rm not_null_constraint_$1.sql_tmp exit 比如对于表T来说,object_id,object_name含有非空约束。 SQL> desc t Name Null? Type ----------------------------------------- -------- ---------------------------- ID NUMBER OBJECT_ID NOT NULL NUMBER OBJECT_NAME NOT NULL VARCHAR2(30) OBJECT_TYPE VARCHAR2(19) CLOB_TEST CLOB 运行脚本后,生成的sql脚本内容如下所示,达到了预期的目标。 select count(1) from T where "OBJECT_NAME" IS NULL ; select count(1) from T where "OBJECT_ID" IS NULL ;

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-07-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jouypub

Hive日常操作

根据分区查询数据:select table_coulm from table_name where partition_name = '2018-11-01';

2243
来自专栏解Bug之路

MySql之自动同步表结构

在开发过程中,由于频繁的修改数据库的字段,导致rd和qa环境的数据库表经常不一致。 而由于这些修改数据库的操作可能由多个rd操作,很难一次性收集全。人手工去和...

991
来自专栏张善友的专栏

SQL Injection的深入探讨

SQL injection可以说是一种漏洞,也可以说成是一种攻击方法,程序中的变量处理不当,对用户提交的数据过滤不足,都可能产生这个漏洞,而攻击原理就是利用用户...

1937
来自专栏张戈的专栏

MySQL命令行工具:percona-toolkit安装使用初探

导读:percona-toolkit 源自 Maatkit 和 Aspersa 工具,这两个工具是管理 mysql 的最有名的工具,现在 Maatkit 工具已...

4047
来自专栏乐沙弥的世界

配置 RAC 负载均衡与故障转移

    Oracle负载均衡主要是指新会话连接到RAC数据库时,如何判定这个新的连接要连到哪个节点进行工作?通常情况下,负载均...

1071
来自专栏数据和云

【动手实践】Oracle 12.2 新特性:自动的列表分区创建

2017年来了,我们要启动新的学习征程了。在过去我们一直思考,什么样的内容能够更帮助大家了解和学习到有用的知识? 这个『动手实践』栏目就是这样一个改进和尝试吧,...

2986
来自专栏乐沙弥的世界

使用mysqldump导出数据库

    mysqldump是mysql用于转存储数据库的客户端程序。它主要产生一系列的SQL语句,可以封装到文件,该文件包含有所有重建您的数据库所需要的SQL命...

2072
来自专栏散尽浮华

Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

众所周知,binlog日志对于mysql数据库来说是十分重要的。在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlo...

3848
来自专栏杨建荣的学习笔记

外部表简单总结(r3笔记第51天)

对于外部表的使用而言,可能是既陌生又熟悉的感觉,说陌生可能自己真正的使用机会要少一些,而熟悉可能是大家比较常用的通过外部表来查看数据库日志,其实外部表还有更丰富...

28711
来自专栏存储技术

MySQL加锁范围分析

最近,遇到了一个关于mysql 加锁的问题,将当时的情形简化如下,有一个index_test表,表结构如下所示:

5756

扫码关注云+社区

领取腾讯云代金券