利用Oracle 的透明网关,实现Oracle数据库与SQL2000的数据的交换。因我的Oracle 安装在集群上,为了方便所以透明网关安装在SQL服务器端。整个环境如下:
一、实现的环境
1、windows 域环境,为Test.com
2、Oracle 服务器 ,操作系统 Windows 2003,计算机名 Dbserver ,IP 192.168.9.117 , Oracle 10G ,实例为 OraDB
3、SQL2000服务器,操作系统Windows 2003 ,计算机名 sqlDbServer,IP 192.168.9.140,SQL数据库 为 WebDb
二、安装透明网关
在SQL2000服务器端 安装 Oracle 的透明网关
三、透明网关的设置
1、在TG下替换监听文件listener.ora如下,注意修改监听文件中的路径和HOST.
即 D:\oracle\product\10.2.0\tg_1\NETWORK\ADMIN\listener.ora
# listener.ora Network Configuration File: D:\oracle\product\10.2.0\tg_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = tg4msql)
(ORACLE_HOME = D:\oracle\product\10.2.0\tg_1)
(PROGRAM = tg4msql)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = SQLDBserver.test.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
2、在TG下替换inittg4msql.ora,注意按需要修改SQLSERVER的数据库服务器和数据库名称.
即 D:\oracle\product\10.2.0\tg_1\tg4msql\admin\inittg4msql.ora
# 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.9.140;DATABASE= webDb"
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
3、重新启动 在SQL2000服务器端的oracle透明网关的监听服务
四、在Oracle上建立 与SQL的连接
1、用Toad 或其他工具 登陆 Oracle SQL ,运行以下脚本,注意HOST
create public database link " hudb"
connect to sa
identified by " 123456"
using '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = SQLDBserver.test.com)(PORT = 1521))
(CONNECT_DATA = (SID = tg4msql))
(HS=OK)
) ';
2、测试连接
select * from cadmark@ hudb
注:cadmark 为SQL数据库 WebDb上的一个表名,该表不要有大字段。
五、建立数据交换
1、在SQL上建 数据交换表(如果需要的话)
2、在Oracle上见数据交换表或视图(如果需要的话)
3、在Oracle上建 数据交换过程
CREATE OR REPLACE PROCEDURE ProcAutoPutIntoDate AS
begin
。。。
end ProcAutoPutIntoDate;
六、建立定时交换的job
用Toad 或其他工具 在Oracle 上建立一个Job
1、查看Oracle系统是否允许Job
show parameter job_queue_processes; (查询job_queue_processes的值)
如果为0,修改如下:
alter system set job_queue_processes=10; (更新job_queue_processes的值)
2、创建job
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => 'STDOC.PROCAUTOPUTINTODATE;'
,next_date => to_date('26-05-2009 06:00:00','dd/mm/yyyy hh24:mi:ss')
,interval => 'TRUNC(SYSDATE+1)+6/24'
,no_parse => FALSE
);
SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x));
COMMIT;
END;
3、检查job 是否确实已建立
select job,next_date,next_sec,failures,broken from user_jobs;
或
select * from user_jobs;
4、如果发现建错了,删除
BEGIN
SYS.DBMS_JOB.REMOVE(job号);
COMMIT;
END;
/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12368654/viewspace-604115/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12368654/viewspace-604115/