Oracle/DB2 null key index

大数据-玩转数据-Oracle系统知识小结 一、说明 Oracle数据库是甲骨文的核心产品,Oracle 的操作都遵循sql标准,所以各个版本在基本操作方面都变化不大。Oracle划分在大型关系数据库范畴,比较Mysql或Nosql数据库来说,还是缺少些扩容的灵活性,但传统金融、通信、电力、航空、保险、大型企业用得比较多。 二、背景知识、数据建模和Linux 1.关系数据库 关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中 阅读详情


This issue is coming from when migrate DB2 unique index to Oracle.


Concept Definition

- KEY of an index:    A "KEY" is the set of columns making up an index. That is it may be one column or multiple columns.

- NULL KEY of an index: a "NULL KEY" that is a key where all columns are NULL.



DB2 only one "NULL KEY" may exist in a unique index.

When table and index are created as

CREATE TABLE TAB (A DECIMAL(6) not null,
                  B CHAR(10),
                  C DECIMAL(6),
                  PRIMARY KEY(A));

CREATE UNIQUE INDEX IDX ON TAB(B,C);


Following SQL will fail on 2nd statement:

INSERT INTO TAB VALUES(1, NULL, NULL);
INSERT INTO TAB VALUES(2, NULL, NULL);

This is the error message:

DB21034E  The command was processed as an SQL statement because it was not a valid Command Line Processor command.
During SQL processing it returned:SQL0803N
One or more values in the INSERT statement, UPDATE statement, or foreign key update caused by a DELETE statement
are not valid because the primary key, unique constraint or unique index identified by "IDX" 
constrains table "0000000201" from having duplicate values for the index key.  SQLSTATE=23505


Oracle multiple NULL keys may exist in a unique index.

The same operation above can be executed on Oracle without any failure.


This is because Oracle does not index NULL KEYS; whatever unique or not, an Oracle index does not include rows if all indexed columns are null.
This cause a result is that UNIQUE index in Oracle simply does not know about NULL keys. It's literallxy blind to the multiple NULL KEYS issue.


DB2 "unique where not null" index

UNIQUE WHERE NOT NULL is supported in DB2 for z/OS, which allows for duplicate null values to exist on a unique constraint.


So if we create index using:

CREATE UNIQUE WHERE NOT NULL INDEX IDX ON TAB(B,C)


Then we can get same result as Oracle, i.e,; both insert statements can be executed successfully.


Oracle support non-duplicated null index

Solution: to add a constant value field into index, so that the index key could not be null.


For example we create above index using:

CREATE UNIQUE INDEX IDX ON TAB(B,C,1)


The constant '1' does not means the 1st column, it is a constant; so the index key must not be null because the 3rd column is a constant 1.


The solution for migrating UNIQUE index

If all indexed columns are null-able, a constant 1 should be added into Oracle index definition.

For example DB2 index definition

CREATE UNIQUE INDEX IDX ON TAB(B,C)

if both column B and C are null-able, this index should be redefined in Oracle as:

CREATE UNIQUE INDEX IDX ON TAB(B,C,1)


And if there is either column is "not null", it's not necessary to add the constant 1.



In Summary

CREATE UNIQUE WHERE NOT NULL INDEX IDX ON TAB(B,C)   # on DB2

=equal to=

CREATE UNIQUE INDEX IDX ON TAB(B,C)                  # on Oracle



CREATE UNIQUE INDEX IDX ON TAB(B,C)                  # on DB2

=equal to=

CREATE UNIQUE INDEX IDX ON TAB(B,C,1)                # on Oracle




DataX DB2Writer深度解析:原理、避坑与生产级调优 DB2Writer是DataX框架中专用于向IBM DB2写入数据的离线同步插件,其本质并非通用迁移工具,而是基于JDBC封装的、深度适配DB2特性的生产级写入组件。它通过内置连接池、SQLCODE智能重试、MERGE语义实现、LOB流式处理及字符集透传等机制,将DB2的锁机制、日志约束、元数据依赖等底层复杂性封装为可配置能力。技术价值在于降低ETL开发对DB2内核细节的耦合度,提升全量/增量同步任务的稳定性与断点续传可靠性。典型应用于金融、电信等行业中Oracle/Hive→DB2的报表底表构建、核心系统 阅读详情

相关推荐

DB2Writer深度解析:DataX迁移中被低估的关键插件

DB2Writer是DataX生态中专用于DB2数据库写入的核心组件,其本质并非通用JDBC封装,而是需深度适配DB2事务机制、类型系统与JDBC驱动特性的定制化模块。它涉及DB2特有的类型映射(如TIMESTAMP精度、DECIMAL舍入、CLOB分段写入)、连接池与MAXAGENTS资源协同、锁行为(LOCKSIZE升级)及字符集(CCSID/EBCDIC)兼容等底层原理。技术价值在于保障数据原子性落库、可重试写入与生产级可观测性;典型应用于金融级离线迁移、跨版本DB2同步、异构数据仓库构建等强一致性场

weixin_32932149的博客 262

DB2关于标识列(自增列)的对比试验、使用示例

文章转载,原文地址:(https://www.cnblogs.com/millen/archive/2011/10/11/2207550.html) 试验环境: 建表t1、t2分别含有不同类型的标识列id,对比不同点 D:/>db2 connect to test user cwgladm using cwglpass 数据库连接信息 数据库服务器 = DB2/NT 8.2.9 SQL 授权标识 = CWGLADM 本地数据库别名 = TEST .

五行缺火 2082

SQL3148W A row from the input file was not inserted into the table.SQLCODE“-803“ was returned 23505

引言 在一次数据库导入的操作中,由于数据是手动编造的,导致import到DB2数据库的时候发生了报错。 正文 SQL0803N One or more values in the insert statement,UPDATE statement,or foreign key update caused by a DELETE statement are not valid because the primary key ,unique constraint or unique index ident

回忆 2697

DB2 基础: 约束

Leon Kwok, DB2 客户支持, IBM 简介:IBM® DB2® for Linux®, UNIX®, and Windows® (DB2) 使用约束对数据执行业务规则,并保障数据库的完整性。 本文描述 ...

939

db2 import和load

Import和Load 都可以将数据导入到DB2服务器中,但是2者是有很大区别的。 Import 其实执行了SQL 的INSERT 操作。和INSERT 操作一样,Import 执行的时候会激活触发器,所有的约束会强制实现,而且会使用数据库的缓冲池。类似Oracle sql*loader工具的常规路径导入。   Load 工具可以更快的将数据文件导入到数据表中。Load 工具不会与DB2 数据引擎...

weixin_33871366的博客 426

db2报错】 DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1

db2报错-803,23505如何解决

weixin_44712778的博客 5427

is null 和 is not null 都不能利用 索引

  网上有些资料说含有 null 的列不能创建索引,还有资料说因为一般的索引是 b_ 树结构,而 b+ 树不能存储 null 值,所以 is null 和 is not null 都不能利用 索引。为了证明以上说法,我做了一下测试。 1. 测试含有 null 的列是否能创建索引 先创建测试数据 : create table student

cxzhq2002的杂记 1万+

oracle删除索引主键的sql语句,sql 高级 (五)(create index(创建索引) drop)

SQL create index 语句create index语句用于在表中创建索引。在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。用户无法看到索引,它们只能被用来加速搜索/查询。更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。允许使用重复的值:create index index_...

weixin_31440211的博客 5298

DB2&SQL语句性能优化

DB2&SQL语句性能优化标签(空格分隔): DB2 SQL 性能优化资料来源: (转)SQL 优化原则 避免全表扫描 Where中少用NOT、!=、<>、!<、!>、NOT EXISTS、NOT IN、NOT LIKE,它们会引起全表扫描。WHERE子句中的顺序 表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件写在Where子句的末尾。避免Select * Sel

Scfan的博客天涯 1万+

DB2联邦重点

为什么80%的码农都做不了架构师?>>> ...

weixin_33887443的博客 551

SQL CREATE INDEX 语句- 提高数据库检索效率的关键步骤

为了方便其他设备和平台的小伙伴观看往期文章:,关注后即可获取最新文章推送看完如果觉得有帮助,欢迎。

小万哥的博客 1386

SQLines数据库迁移工具:从Oracle到PostgreSQL的完整迁移实战指南

数据库迁移是现代企业数字化转型中的关键挑战,特别是当您需要将Oracle数据库迁移到PostgreSQL时,语法差异、数据类型不兼容、存储过程转换等问题常常让技术团队头疼不已。SQLines作为一款功能强大的开源数据库迁移工具,专门解决跨数据库平台的SQL转换难题,支持包括Microsoft SQL Server、Oracle、MySQL、PostgreSQL、IBM DB2等在内的十多种主流数据

gitblog_00757的博客 231

分析create table 在不同数据库中的情况!

1: sql server 2000 create table moduleConfig ( id int not null primary key, modulename varchar(50), moduleDescript varchar(200), moduleid varchar(50), createtime datetime ) select * from...

beyondsanli的专栏 215

第36章 SQL 撤销索引、撤销表以及撤销数据库教程

通过使用 DROP 语句,可以轻松地删除索引、表和database。

1085

【notes5】git/docker,jenkins/gerrit,mysql/redis/ldap/snmp

硬还原前面回滚掉的版本,commithash因为被回滚掉了,用git log 空(每次提交commit信息)查不到,用git reflog 空(所有操作信息)查,三个区都回滚了保持一致。一般不用git commit -m,直接git commit进入vi界面(进入前要git config core.editor vim设一下vi模式),vi如下写法,注意在最上面写。(会出现Auto-merging自动合并,git pull = git fetch + git merge),进行讨论删除,再。

持续更新ing... 3414

SQL学习笔记|四

SQL CREATE INDEX 语句(索引,在不读取整张表的情况下,索引使得数据库应用程序可以更快地查找数据) 更新一个包含索引的表笔更新一个不包含索引的表需要更多的时间,这是由于索引本身也需要更新时间。 因此,最理想的索引是创建在被搜索列上的。 允许重复行 CREATE INDEX index_name ON table_name (column_name) 不允许重复行 CRE...

JunLi_YNU的博客 302

工作中使用到的单词(软件开发)_第三版

====

sun0322 1万+

AWS DMS异构数据库在线迁移实战:从Oracle到PostgreSQL

数据库迁移是云迁移中的核心环节,尤其在异构引擎间(如Oracle到PostgreSQL)需兼顾数据一致性、业务连续性与实时同步能力。其底层依赖变更数据捕获(CDC)机制,通过解析源库事务日志实现低延迟增量同步,技术价值在于支撑零停机切流与金融级数据准确。典型应用场景包括企业上云、架构升级与多云容灾,而实际落地常受制于类型语义差异、网络抖动、Replication Instance资源配置失当等工程细节。本文聚焦AWS DMS在生产环境中的深度调优与故障治理,覆盖全量并行加载、LOB处理、心跳监控、断点续传及

weixin_33863087的博客 444
上一篇: ksh trap signal
下一篇: Simple usage of ant build file build.xml
假装80后
博客等级 码龄18年 28粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值