利用异构服务代理(Heterogeneous Services ODBC Agent)实现ODBC配置:
1、设置系统DSN;
2、建立ODBC数据源,若MySQL需要事先安装MyODBC;
3、定义新的数据源,本例为MSSQL的数据源,名称为MSODBC;
4、数据源用户验证;
5、选择相应数据库;
6、数据源相关设置,一般不用更改;
7、连接测试; 配置文件:initMSODBC.orainit<SID_Name>.ora
文件路径:D:\oracle\ora92\hs\admin<oracle_home_directory>\hs\admin
文件内容:
# This is a sample agent init file that contains the HS parameters that are
# needed for an ODBC Agent. #
# HS init parameters
#
HS_FDS_CONNECT_INFO = MSODBC<ODBC Data Source Name>
HS_FDS_TRACE_LEVEL = OFF跟踪开关<ON/OFF>
跟踪文件路径:<oracle_home_directory>\hs\trace
#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>配置文件:listener.ora
文件路径:D:\oracle\ora92\network\admin<oracle_home_directory>\network\admin
文件内容:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:\oracle\ora92)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = Fire)
      (ORACLE_HOME = D:\oracle\ora92)
      (SID_NAME = Fire)
    )
    (SID_DESC=
      (SID_NAME = MSODBC)<SID_Name>,应与tnsnames.ora文件中的<SID_Name>相对应
      (ORACLE_HOME = D:\oracle\ora92)<oracle_home_directory>
      (PROGRAM = HSODBC)<异构服务代理程序>
    )
  )配置文件:tnsnames.ora
文件路径:D:\oracle\ora92\network\admin<oracle_home_directory>\network\admin
文件内容:
MSODBC = <SID_Name>,应与listener.ora文件中的<SID_Name>相对应
  (DESCRIPTION = 
    (ADDRESS = 
      (PROTOCOL=TCP)
      (HOST = RING_ASUS)<ODBC Server Name or IP Address>
      (PORT = 1521)监听端口,默认为1521
    )
    (CONNECT_DATA = 
      (SID = MSODBC)<SID_Name>
    )
    (HS = OK)
  )测试:
1、重新启动Oracle监听服务,OracleOraHome92TNSListener;
2、启动SQL Plus编辑器;
3、用户验证;
4、创建数据库链接,命令如下:
SQL> create public database link msodbc connect to sa identified by baosight using 'msodbc';
msodbc:数据库链接名
sa:MSSQL数据库的用户名
baosight:MSSQL数据库的用户密码
'msodbc':SID_Name5、执行SQL语句:(除DDL,数据定义语言)
SQL> select * from products@msodbc;
products:表名
@msodbc:数据库链接名6、丢弃数据库链接:
SQL> drop public database link msodbc;
msodbc:数据库链接名注意:
    如果需要多个链接,请多重复上述操作!!!
    在执行Insert、Update、Delete及View操作时,使用commit!!!另外:
    还可以利用透明网关(Transparent Gateway For MSSQL)

解决方案 »

  1.   

    透明网关(Transparent Gateway For MSSQL)。配置文件:inittg4msql.orainit<SID_Name>.ora
    文件路径:D:\oracle\ora92\tg4msql\admin<oracle_home_directory>\tg4msql\admin
    文件内容:
    # This is a sample agent init file that contains the HS parameters that are
    # needed for the Transparent Gateway for SQL Server#
    # HS init parameters
    #
    HS_FDS_CONNECT_INFO="SERVER=192.168.0.247;DATABASE=pubs"SERVER=<MSSQL Server Name or IP Address>;DATABASE=<Database Name>
    另一种写法:<MSSQL Server Name>.<Database Name>
    HS_FDS_TRACE_LEVEL=OFF跟踪开关<ON/OFF>
    跟踪文件路径:<oracle_home_directory>\tg4msql\trace
    HS_FDS_RECOVERY_ACCOUNT=RECOVER
    HS_FDS_RECOVERY_PWD=RECOVER配置文件:listener.ora
    文件路径:D:\oracle\ora92\network\admin<oracle_home_directory>\network\admin
    文件内容:
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = PLSExtProc)
          (ORACLE_HOME = D:\oracle\ora92)
          (PROGRAM = extproc)
        )
        (SID_DESC =
          (GLOBAL_DBNAME = Fire)
          (ORACLE_HOME = D:\oracle\ora92)
          (SID_NAME = Fire)
        )
        (SID_DESC=
          (SID_NAME = MSSQL)<SID_Name>,应与tnsnames.ora文件中的<SID_Name>相对应
          (ORACLE_HOME = D:\oracle\ora92)<oracle_home_directory>
          (PROGRAM = tg4msql)<透明网关程序>
        )
      )配置文件:tnsnames.ora
    文件路径:D:\oracle\ora92\network\admin<oracle_home_directory>\network\admin
    文件内容:
    MSSQL = <SID_Name>,应与listener.ora文件中的<SID_Name>相对应
      (DESCRIPTION = 
        (ADDRESS = 
          (PROTOCOL=TCP)
          (HOST = RING_ASUS)<TG Server Name or IP Address>
          (PORT = 1521)监听端口,默认为1521
        )
        (CONNECT_DATA = 
          (SID = MSSQL)<SID_Name>
        )
        (HS = OK)
      )测试同上。
      

  2.   

    以上方法需要保留MSSQL以及Oracle数据库服务器;另外,还可以利用PowerDesigner的逆向功能将MSSQL中的数据结构先改为E-R图,再由E-R图生成Oracle的建表脚本,再将MSSQL中的各表中的数据生成TXT,再在Oracle中导入