查看: 5371|回复: 11

[invalid date]閏于oracle中存進了invalid date的討論?

[复制链接]
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
跳转到指定楼层
1#
发表于 2004-3-15 12:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天發現了一個奇怪的現象﹕

   一個使用了2年多的系統。3月1日做了8170到8174的升級﹐OS是RH6.2﹐上周終端用戶反應前台出現時間非法錯誤﹐應用開發人員進行了檢查﹐發現在一個表中已存入的一個非法的日期。用戶再次修改或是讀取資料時報錯﹐但是這個非法的日期是如何存入DB的呢?在數據存入DB之前ORACLE會進行合法性檢測。為什么表中會存有非法的數據呢?

用PLSQL developer做了插入非法數的動作﹐發現oracle是會自動檢測的。而且已是非法的數據的欄位不能再次進行讀取和修改。當時很是郁悶。后來又想到前台是DEPHI寫的程式﹐使用了OCI對ORACLE數據進行了寫入和修改。會不會是這個原因呢?


在有了這個猜測﹐又到metalink查了一下﹐還真有這個問題發生在其它的情況下。

1.造成這種情況的最根本的原因是什么?
2.如何避開這種情況呢?
3.為什么在升級ORACLE之前沒有發生這種情況呢?


也許各人出現這種情況的環境不同﹐但我想同大家做一個討論﹐就這個問題。我也會做這個問題相關的學習。以便大家以后有這種情況時﹐可以借鑒﹗

  如果那位DX能詳細的說明這個問題的根由﹐將非常感謝﹐多謝先﹗
招聘 : Java研发
论坛徽章:
1
2#
发表于 2004-3-15 12:53 | 只看该作者
这个问题我也看过,估计是oracle的bug

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
3#
 楼主| 发表于 2004-3-15 13:27 | 只看该作者
最初由 Kamus 发布
[B]非法的日期格式是什么样的? [/B]



比如﹕0000/00/00 00:00:00


很奇怪的﹐現在的數據就是這樣的﹐按道理這種年份為0的數據在數據庫中不存在的。當然這個表中這個欄位沒有做咚悌o可以肯定不是因為咚愫笾貋淼摹

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
4#
 楼主| 发表于 2004-3-15 14:43 | 只看该作者

正在學習中﹐頂一下﹗

正在學習中﹐頂一下﹗

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
5#
 楼主| 发表于 2004-4-30 16:49 | 只看该作者
1.當變更invalid date成合法date後一切正常(通過SQL工具變更,通過OCI程式不能變更,顯示錯誤的日期,不能做變更)。
2.使用sql develop查時,invalide date的欄位顯示為0000/00/00 00:00:00
select  dat_column from dat_table where to_char(dat_column,'yyyymmdd hh24:mi:ss')='0000/00/00 00:00:00'
3.用sqlplus查時出現ORA-01801: date format is too long for internal buffer錯誤。
select  dat_column from dat_table where to_char(dat_column,'yyyymmdd hh24:mi:ss')='0000/00/00 00:00:00'
  用 select to_char(dat_column from dat_table
         where to_char(dat_column,'yyyymmdd hh24:mi:ss')='0000/00/00 00:00:00'
    顯示為'0000/00/00 00:00:00'

4。3月1日DB版本從8170升級到8174後出現以上問題。
  在8170上咝

使用道具 举报

回复
论坛徽章:
117
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主7段
日期:2012-05-15 15:24:11ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32紫蛋头
日期:2013-03-04 17:00:07优秀写手
日期:2013-12-18 09:29:09
6#
发表于 2004-5-4 09:31 | 只看该作者
1.你可以建一个表级触发器监控更新或者插入操作
2.到Metalink提报一个tar,获得官方解释

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
7#
 楼主| 发表于 2004-5-8 14:54 | 只看该作者
1。在表上建了trigger跟蹤它的DML操作。
2。用戶反映有錯誤日期
3。根據trigger確定操作發生的時間點
4。找到對應的log,用logminer做了分析
5。發現。。。。


   1)有問題的SQL是不完整的。
        如:update "FLD"."DESIGNMS"
           set "NO" = 'LHWE04050147',
             "NO2" = 1,
             "ORD_NO" = 'CNB260245004',
             "DIE_NO" = '880-1240',
             "PTS_NO" = 'S03A',
             "VER" = 'X0',
             "TDATE" = TO_DATE('07-5月 -2004 00:00:00', 'DD-MON-YYYY HH24:MI:SS'),
             "AREA" = NULL,
             "QTY" = 6,
             "TYPE" = '正常訂單',
             "DATREQ" = TO_DATE('18-5月 -2004 00:00:00', 'DD-MON-YYYY HH24:MI:SS'),
             "PSCNO" = 'RM-M-H-G-WE-QC',
             "YN_ACCEPT" = '1',
             "ACCEPTMAN" = 'S01013',
             "ACCEPTDATE" = TO_DATE('08-5月 -2004 09:53:31', 'DD-MON-YYYY HH24:MI:SS'),
              "YN_OK" = '0',
             "OKMAN" = NULL,
             "OKDATE" = TO_DATE('
   2)有問題的SQL寫法一樣,均是到OKDATE這個欄位有問題
   3)有問題的SQL是通過OCI操作寫入DB的。
   4)著手分析對應的應用中,引起這個SQL的用戶操作及程式的寫法。




各位有什麼高見,請支招呀!

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
8#
 楼主| 发表于 2004-5-8 14:59 | 只看该作者
這個應用的程式咝辛艘欢螘r間,
一直沒有這個問題出現。
直到我做了DB的update後,
半個月後出現。
出現這種情況是間隔而且無規則的。
而且只有少量的幾十條數據有問題。


我很。。。。
頭痛!

使用道具 举报

回复
论坛徽章:
117
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主7段
日期:2012-05-15 15:24:11ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32紫蛋头
日期:2013-03-04 17:00:07优秀写手
日期:2013-12-18 09:29:09
9#
发表于 2004-5-8 15:58 | 只看该作者
你可以单独写个OCI程序,建立临时表
循环写日期字段,看是否可以再现问题

关于OCI中特殊bug,已经遇到了好多.

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34
10#
 楼主| 发表于 2004-5-8 16:42 | 只看该作者
en,
根據你說的,
我再測一下先!

多謝 eygle 版主!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表