数据迁移判断非空约束(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 条评论
登录 后参与评论

相关文章

来自专栏搜云库

Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用

MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可...

35110
来自专栏jouypub

Hive日常操作

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

1313
来自专栏Spark学习技巧

phoenix二级索引

二级索引 二级索引是从主键访问数据的正交方式。Hbase中有一个按照字典排序的主键Rowkey作为单一的索引。不按照Rowkey去读取记录都要遍历整张表,然后按...

4899
来自专栏散尽浮华

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

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

2948
来自专栏性能与架构

HBase 的表结构

HBase 是一个NoSQL数据库,用于处理海量数据,可以支持10亿行百万列的大表,下面就了解一下数据是如何存放在HBase表中的 关系型数据库的表结构 为了更...

34613
来自专栏JadePeng的技术博客

Hadoop Avro支持多输入AvroMultipleInputs

Avro 提供了1.x版本的AvroMultipleInputs,但是不支持2.x API版本,因此修改对应代码,增加对hadoop 2.x API版本的的支持...

2804
来自专栏搜云库

Mycat 读写分离 数据库分库分表 中间件 安装部署,及简单使用

MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可...

4178
来自专栏醉生梦死

MySQL数据导出工具 mysqldump 原

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

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

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

27411
来自专栏乐沙弥的世界

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

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

781

扫码关注云+社区