文档章节

DB2 V9.7 - Oracle兼容性问题

Goopand
 Goopand
发布于 2014/11/11 12:11
字数 658
阅读 46
收藏 0

【题记】

今天处理了一个奇怪的DB2问题,描述如下:

用户提出在一个DB2 V9.7数据库中,查询dual伪表的current date结果竟然是datetime型,而不是date型,影响了业务查询结果。

 

接到问题后,立即登录数据库,执行查询 :

db2 "select current date from sysibm.dual"
返回结果:
-----------------------
2014-08-15-10.53.35


db2 "select current date from sysibm.sysdummy1"
返回结果:
-----------------------
2014-08-15-10.53.37


但是,其他DB2 V9.7版本DB2都返回date型:
------------
08/15/2014

 

【分析】

dual伪表来自Oracle,和DB2的sysibm.sysdummy1类似。这里想到了是否设置了Oracle兼容性?

于是和其他库进行对比:这个库的环境变量、db cfg等配置。

1、首先发现db2set环境变量设置了:DB2_COMPATIBILITY_VECTOR=ORA

2、再对比db cfg,发现与Oracle兼容性相关的配置开关都打开了:

Number compatibility = ON
Varchar2 compatibility = ON
Date compatibility = ON

正是这个db cfg变量"date_compat"打开了,才会出现查询的date型,变成了Oracle的datetime型。

至此,原因已经找到:

该DB2数据库开启了Oracle兼容性(DB2_COMPATIBILITY_VECTOR=ORA),并开启了date_compat配置(Date compatibility = ON)。

 

【注意】

1、只有在db2set DB2_COMPATIBILITY_VECTOR=ORA的情况下,新建的数据库,才会开启date_compat兼容性。

   (不支持db2 update db cfg for <db_name> using date_compat ON 的方式)

2、对于一个存在的DB2数据库,设置了db2set DB2_COMPATIBILITY_VECTOR=ORA之后,再db2stop、db2start,并不能开启date_compat兼容性。

    (backup、restore的方式也不行)

 

【备注1】IBM Knowledge Center的解释:

 http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.apdv.porting.doc/doc/r0052867.html?lang=en

  

Usage

The DB2_COMPATIBILITY_VECTOR registry variable is set and updated using the db2set command. Set the DB2_COMPATIBILITY_VECTOR before creating your database.When the DB2_COMPATIBILITY_VECTOR registry variable is set, all databases created should be created as UNICODE databases.

A new setting for the registry variable does not take effect until after the instance has been stopped and then restarted. Existing DB2 packages must be rebound for the change to take effect; packages that are not rebound explicitly will pick up the change on the next implicit rebind.

Example 1

This example sets the registry variable to enable all of the supported Oracle compatibility features:

db2set DB2_COMPATIBILITY_VECTOR=ORA 
db2stop 
db2start

 

Example 2

This example shows how to disable all compatibility features by resetting the DB2_COMPATIBILITY_VECTOR registry variable:

db2set DB2_COMPATIBILITY_VECTOR= 
db2stop 
db2start

 

Note that if a database has been created with the NUMBER data type or the VARCHAR2 data type enabled, use of the DATE data type as TIMESTAMP(0) enabled, or the creation of Oracle data dictionary-compatible views enabled, the database will still be enabled for these features after this db2set command executes.

 

 【备注2】dbforums的讨论:

http://www.dbforums.com/db2/1695306-issues-db2-tables.html

 

 【最后】解决这个问题的办法:

 应用程序的SQL改成如下,即可:   select varchar_format(current_date,'YYYY-MM-DD') from sysibm.dual ;  

 所有的DB2数据库都返回统一格式:2014-08-15    

 或者   select varchar_format(current_date,'MM/DD/YYYY') from sysibm.dual ;   返回:08/15/2014

 

 

 

© 著作权归作者所有

共有 人打赏支持
Goopand
粉丝 12
博文 437
码字总数 237194
作品 0
朝阳
私信 提问
ubuntu 64 装db2 v9.7 server

抓紧下载v9.7linuxx64server.tar.gz,扔到~/Downloads/javasoft 进入到该目录执行 tar -xf v9.7linuxx64server.tar.gz 会发现在该目录下多出一个server目录 cd server sudo ./db2install -b /......

cyper
2013/01/10
0
0
db2残留进程清除

残留进程清除: /opt/ebay/db2/V9.7 # ps aux | grep db2 db2das1 3790 0.1 0.3 105280 7644 ? S 11:00 0:00 /opt/ebay/db2/V9.7/das/bin/db2fmd -i db2das1 -m /opt/ebay/db2/V9.7/das/lib/......

断臂人
2017/08/03
0
0
DB2数据库迁移,使用db2move和db2look工具

背景:把数据从一台旧的服务器迁移到一台新的服务器上。 DB2版本:V9.7 安装数据库: 可以参考这篇blog 1.解压db2安装包 tar -zxvf v9.7linuxx64server.tar.gz 2.进入server目录下,执行安装...

yejunwei
2017/11/06
0
0
SuSE11安装DB2 V9.7(64位)详细步骤

SuSE11安装DB2 V9.7(64位)详细步骤 分类: 数据库开发技术 2015-05-18 10:18:20 SuSE11安装DB2 V9.7(64位)详细步骤 1 安装db2 把db2 V9.7的安装文件db2exc970LNXx8664.tar拷贝到SUSE的桌...

rootliu
2018/04/27
0
0
db2 卸载和安装

Db2 卸载步骤(参考) 开始卸载 1. 删除所有数据库。 可以使用“控制中心”或drop database命令删除数据库。笔者卸载而未删除数据库,结果是重新安装后无法建立同名数据库。 若要显示所有已创...

银河zlm
2016/04/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

生产者消费者问题(PV操作)

一、明确定义 要理解生产消费者问题,首先应弄清PV操作的含义:PV操作是由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号量S的值减...

shzwork
8分钟前
0
0
重新认识网络通信协议

OSI网络分层 应用层 http, smtp,pop3这些都属于应用层协议 为用户的应用程序提供服务 表示层 确保一个系统的应用层发送的信息被另一个系统的应用层接收到 会话层 通过传输层建立数据传输的通...

最胖的瘦子
19分钟前
0
0
【转】分布式数据流的轻量级异步快照

本篇翻译自论文:Lightweight Asynchronous Snapshots for Distributed Dataflows,Flink的容错快照模型即来源于该论文。原文地址:https://arxiv.org/pdf/1506.08603.pdf 分布式数据流的轻量...

yiduwangkai
21分钟前
0
0
java使用反射机制设置私有成员变量的值

写一个方法:public void setProperty(Objectobj, String propertyName, Object value){}, 此方法可将obj对象中名为propertyName的属性的值设置为value。(这里不知道obj对象的propertyNam...

群星纪元
27分钟前
0
0
用 Tapestry 的方式在页面模板中加入注释

<span jwcid="$remove$">这里是注释</span>

LeoXu
27分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部