日期:2014-05-18  浏览次数:20467 次

DTS 将数据从Oracle导入到SQL SERVER中的使用参数的问题
Oracle库中有表A  
   
  SQL SERVER 2000 库中有表B,C  
   
  C表存放每次导入的数据的max(id)号  
   
  欲将表A导入到表B(A,B两表的结构相同),每次导入:  
  select * from a where id > c.id  

  我在包设计中
  1\使用"动态属性任务"先把C.id值取到全局变量
  2\在转换数据任务中的源中使用SQL查询 select * from a where id > ?
  然后点击"参数.."按钮,接错
  HResult of 0x80040e51 (-2147217839) returned
  出现意外错误.返回了错误结果,但没有错误信息.


  同样的情况,但是我改成从MSsql数据库导到MSsql数据库,都不报错,也能正常使用参数,

  为什么从Oracle数据库导到Mssql数据库就不行了,是不支持这样,还是说我哪里写错了.

------------------------------------------------
 也想过别的办法来导数据,比如用链接服务器
  EXEC sp_addlinkedserver 'OracleServer', 'Oracle', 'MSDAORA', 'dali'  
  go  
  EXEC sp_addlinkedsrvlogin 'OracleServer', 'FALSE', NULL, 'system', 'manager1'  
  go  

  select * from OPENQUERY(oracleserver, 'SELECT * FROM 表A') a where id >(select max(id) from 表C)
 但问题是我在Oracle数据库中表A相当大(几千万条记录),使用以上语句根本出来不结果.
 Oracl数据库我只有访问权,没办法做什么配置及更改.
 而OpenQuery 又不支持变量参数.我该 怎么办.

哪位高手来分析一下这两种操作的解决方法??在线等啦,比较急!谢谢>



------解决方案--------------------
配置透明网关的步骤


前一段花了些时间配置 TRANSPARENT GATEWAY
现在把心得贴出来与大家共享

我的OS是WIN2000
ORACLE 9.0
SQLSERVER2000
HOSTNAME : SVR1
都使用 tcp/ip 默认端口


1: 安装 TRANSPARENT GATEWAY 选件(我安装的是FOR MSSQL)
安装完成了以后有这样一个目录 oracle_home\ora90\tg4msql

2: 配置 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=RECOVER

4: 重启 DATABASE AND LISTENER

5: 配置 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_sql

8: 请注意使用 DBLINK 时,INIT.ORA中 GLOBAL_NAME 的设置,
如果为 ture , 请使用DBLINK的全称,可在 all_db_links 中查到,
如果为 FALSE, 不必使用全称,当出现 
“ORA-02019:为找到远程数据库的连接说明”
时,请使用全称,如:
select * from t_test@db_sql.US.ORACLE.COM

------解决方案--------------------
学习
------解决方案--------------------
探讨
学习