单位某程序采用sql2000需要从某远程oracle数据库(视图)定时从中调取数据然后进行数据比对...
注:数据库记录数大致为250万条出现问题..本地sql2000数据库 建立了一个DBlink链接远程的数据..
而后使用:(以下为示例)
insert into sqltable (username,userpwd) select id,pwd from openquery (DBlinkName,'select id,pwd from Oracle.info where updatetime > to_date(''2009-12-25'',''YYYY-MM-DD'')')所返回的数据能正常写入sql2000中的sqltable表中...
且程序运行数月一切正常...就在前几天发现无法正常写入数据了..,错误提示:无法转换格式为datetime另外在SQL2000中执行
select * from DBlinkName..Oracle.info 
则正确返回记录且执行 select * from DBlinkName..Oracle.info where sex='女' 也能正常返回但执行 select * from DBlinkName..Oracle.info where updatetime> convert(varchar(100),'2009-12-26',120) 则超时请问问题出在哪里?另外请教有什么更好的方法能完美解决?

解决方案 »

  1.   

    试一下 select * from DBlinkName..Oracle.info where updatetime> '2009-DEC-26'
      

  2.   

    不行 转换datetime失败加上convert也超时
      

  3.   

    另SQL连接oracle的方法.SQL和ORACLE之间的数据查询配置透明网关的步骤
    前一段花了些时间配置 TRANSPARENT GATEWAY
    现在把心得贴出来与大家共享我的OS是WIN2000  
    ORACLE 9.0
    SQLSERVER2000
    HOSTNAME : SVR1
    都使用 tcp/ip 默认端口
    1: 安装 TRANSPARENT GATEWAY 选件(我安装的是FOR MSSQL)
       安装完成了以后有这样一个目录 oracle_home\ora90\tg4msql2: 配置 LISTENER.ORA
        (SID_DESC =
          (GLOBAL_DBNAME = tg4sql) # 可自己命名
          (PROGRAM = tg4msql)
          (SID_NAME = sql2000)  # SID 自己命名
          (ORACLE_HOME = D:\oracle\ora90)
        )3: 在 oracle_home\ora90\tg4msql\admin
       建文件 init<SID>.ora 由于LISTENER里定义SID为 sql2000
       因此文件名为:initsql2000.ora
       其中内容为:
       HS_FDS_CONNECT_INFO=svr1.master # svr1为SQL服务器名
       HS_FDS_TRACE_LEVEL=OFF
       HS_FDS_RECOVERY_ACCOUNT=RECOVER
       HS_FDS_RECOVERY_PWD=RECOVER4: 重启 DATABASE AND LISTENER5: 配置 tnsnames.ora
    tg_sql = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = TCP)(HOST = SVR1)(PORT = 1521)) 
        ) 
        (CONNECT_DATA = 
          (SID = sql2000) 
        ) 
        (HS=OK) 
      ) 6: 建立 DATABASE LINK
    CREATE PUBLIC DATABASE LINK DB_SQL
    CONNECT TO SA IDENTIFIED BY PASSWORD
    USING 'tg_sql'7: 完成,测试
      select * from t_test@db_sql8: 请注意使用 DBLINK 时,INIT.ORA中 GLOBAL_NAME 的设置,
      如果为 ture , 请使用DBLINK的全称,可在 all_db_links 中查到,
      如果为 FALSE, 不必使用全称,当出现 
      “ORA-02019:为找到远程数据库的连接说明”
      时,请使用全称,如:
      select * from t_test@db_sql.US.ORACLE.COM
      

  4.   

    select * from DBlinkName..Oracle.info
    结果中看看你的updatetime列是什么值呀
      

  5.   

    先: isdate() 判断下,把不是的 给你提醒下
    其他的插入
      

  6.   

    时间格式的..  2009-01-01 00:01:00我突然这么尝试:
    select * from DBlinkName..Oracle.info where updatetime> '2009-01-01 00:01:00' 竟然也能返回结果 而又出现的问题是
    2009-01-01 00:01:00 必须是返回记录里包含的值
    例如我将 2009-01-01 00:01:00 改为 2009-01-01 00:01:01  则又超时远程oracle数据库应该没有被改动过...
      

  7.   


    查询 select *,isdate(updatetime)....... 返回1查询条件 where isdate(updatetime)=0 超时。
      

  8.   

    select * from DBlinkName..Oracle.info where convert(char(10),updatetime,120) > '2009-01-01 00:01:01'
      

  9.   

      另外发现的问题,就是只要条件包括 updatetime都会超时。。其他字段都不会   且order by 任何字段都超时
      

  10.   

    我直接用pl查询 一切正常..但是还是存在的问题是...将数据类型dbtype_dbtimestamp转换为datetime 出错 怎样解决?(原来都不会出错的呀)
      

  11.   

    怀疑是 oracle的 updatetime字段 是不是有null之类的数据位处理,或者updatetime是varchar2型,或者updatetime是timestamp型,或者是nls_date的格式设置问题。或者你在oracle那个视图上 强制转换updatetime为date类型,且当updatetime为null时,给他一个默认的值什么的