单位某程序采用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) 则超时请问问题出在哪里?另外请教有什么更好的方法能完美解决?
注:数据库记录数大致为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) 则超时请问问题出在哪里?另外请教有什么更好的方法能完美解决?
解决方案 »
- 菜鸟问个问题
- 请高手指点眼高手低的我想问个sql 的问题,或者大家给个答案 (续集)没有满意答案我这回就把分扔了
- 求一极具挑战的的存储过程,高手一定不要放过哦
- 看看我这个问题,不知道怎么写标题好
- 我想在存储过程中创建另外一个数据库,请问应该如何实现!!
- 大家帮忙看看这个SQL错在那里?
- 求问怎么设计数据库表表示拓扑关系
- 关于访问sql server的问题(分不够,可以加)
- 怎样才能用 insert把 “ '”,单引号输入数据库。
- ms sql 已有的两列中插入一列
- dateadd函数中datepart参数数据类型
- 读取外部sql配置文件 出错 Microsoft OLE DB Service Components 错误 '800300fb'
前一段花了些时间配置 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
结果中看看你的updatetime列是什么值呀
其他的插入
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数据库应该没有被改动过...
查询 select *,isdate(updatetime)....... 返回1查询条件 where isdate(updatetime)=0 超时。