ORACLE 创建DBlink访问SQL SERVER数据库
- 格式:doc
- 大小:221.50 KB
- 文档页数:10
oracle连接ODBCsqlserver数据源的详细步骤⼀. 添加数据源ODBC1.打开数据源或者2.添加数据源3.选择SQL Server4.名称:输⼊ODBC数据源名称描述:随意服务器:输⼊sqlserver服务器名5.SQLSERVER登陆⽤户:登录ID⼀般是:sa ;密码:只有你知道6.选择你连接的数据库7.完成8.测试⼀下⼆.检查DG4ODBC驱动是否已经安装⽅法如下:在Oracle服务器上,cmd窗⼝中执⾏命令(dg4odbc或hsodbc)上图代表安装了DG4ODBC驱动(如果没有安装,需⾃⾏下载安装,此处不介绍具三.配置hsodbc此⽬录下默认存在initdg4odbc.ora,复制这个⽂件,粘贴到上图⽬录中,并将后复制的⽂件改名为initdddb.ora,⽤记事本打开就该配置并保存如下图四.配置监听listener(服务端透明⽹关监听)五.重启监听在命令提⽰符窗⼝依次输⼊如下命令停⽌监听:lsnrctl stop启动监听:lsnrctl start六. 配置TNS(客户端服务命名)DDDB:本地oracle服务命名HOST:oracle服务器IPPORT:监听端⼝SID:刚才命名的SID配置七.创建oracle的DBLINK或者不创建第六步,直接创建DBLINKcreate public database link test_sql connect to “sqlserver⽤户名” identified by “sqlserver密码” using ‘(description=(address= (protocol=tcp)(host=xxx.xxx.xxx.xxx)(port=1521))(connect_data=(SID=SID名称))(HS=OK))';⼋.查询select * from 表名@Test_Sqlgetaway到此这篇关于oracle连接sqlserver数据源ODBC的详细步骤的⽂章就介绍到这了,更多相关oracle sqlserver数据源ODBC内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
Oracle使⽤dblink连接SqlServerOracle使⽤dblink连接SqlServer使⽤场景:当你需要从ORACLE数据库上访问另⼀台SqlServer数据库的数据时,Oracle提供了⼀个⼯具:gateways。
通过这个⼯具,你可以创建dblink来连接sqlserver或其他不同公司的数据库----取决于你安装时的选项。
安装GATEWAYS后,使⽤下列2种⽅式可创建DBLINK⽅式A:create database link bslinkconnect to "username" identified by "password"using '( DESCRIPTION =( ADDRESS = ( PROTOCOL = TCP )( HOST = remoteIP )( PORT = 1433 ))( CONNECT_DATA = (SID = SQLSERVER数据库名 ) ) ( HS=OK ) ) '这种⽅式是不需要配置initdg4msql.ora和tnsnames.⽅式B:1. 在$ORACLE_HOME/dg4msql/admin/initdg4msql ----这步可省略使⽤⽅式A替代配置initdg4msql.ora,以我的例⼦,如下: ******************************复制代码This is a customized agent init file that contains the HS parametersthat are needed for the Database Gateway for Microsoft SQL ServerHS init parametersHS_FDS_CONNECT_INFO=[192.168.101.4]//bsdata ----只需要修改这个IP//数据库名HS_FDS_TRACE_LEVEL=OFFHS_FDS_RECOVERY_ACCOUNT=RECOVERHS_FDS_RECOVERY_PWD=RECOVER复制代码2. 配置Oracle主⽬录下network\admin⽬录下的listener.ora。
透明网关是oracle的一个中间件工具,作用是实现oracle下通过dblink直接访问非oracle数据库的作用,这也意味着可以实现数据同步。
透明网关版本号须和oracle版本一致最好,目前免费,支持的异构数据库有sqlserver informix sysbase,详细的可参考对应版本的说明。
需到官网单独下载,单独安装,有win版本也有linux版本,可以安装在oracle所在主机,也可以安装在单独的主机,配置上可以参考官网使用指南。
配置上:透明网关里1配好到异构数据库的连接信息(connect info),2配好对连接信息的监听(sid);oracle里1配置好"指向网关主机sid的tns",2监听无需变动;配置完毕,首先检查下open_links,##########open_links beginopen_links是oracle的一个参数,你可以通过sql select * from v$parameter / 命令行show parameter open_links 查看open_links和open_links_per_instance的值即可。
在v$parameter中也有open_links的英文定义:max # open links per session就是每个回话最多更开的连接,如果你需要10个dblink,那么这个值就需要修改,修改语句如下:alter system set open_links = 255 scope =spfile;alter system set open_links_per_instance = 255 scope =spfile;然后重启下数据库生效。
##########open_links endopen_links没问题后,注意设置杀软和防火墙规则允许网关和oracle通讯,随后需要建立到"指向网关主机sid的tns"的dblink,在建立dblink前先看下已有的透明网关,防止重名:select * from dba_objects where object_type = 'DATABASE LINK';想删除用:drop public database link xxx;然后就是建立到"指向网关主机sid的tns"的dblink,建立的语句范例如下:create public database link nm1500car3gdb connect to "ccpqry" identified by "ccpqry" using 'nm1500car3gdb'; 注意tns是单引号,ccpqry是异构库的验证,注意用户名和密码用双引号。
通过ORACLE通用连接访问SQLServer数据库的方法要通过Oracle通用连接访问SQL Server数据库,需要使用Oracle 的适配器来连接到SQL Server数据库。
以下是通过Oracle通用连接访问SQL Server数据库的方法:1. 安装并配置Oracle通用连接适配器:- 在Oracle数据库服务器上找到适配器的安装目录。
HS_FDS_CONNECT_INFO = server_nameHS_FDS_TRACE_LEVEL = offHS_FDS_SHAREABLE_NAME = /usr/local/bin/libodbc.so其中server_name是SQL Server数据库的主机名。
SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(SID_NAME = odbc)(ORACLE_HOME = /path/to/oracle_home)(PROGRAM = dg4odbc)其中/oracle_home是Oracle数据库的安装目录。
2.配置ODBC数据源:- 在Oracle数据库服务器上安装必要的ODBC驱动程序以连接到SQL Server数据库。
- 在ODBC数据源管理器中配置一个ODBC数据源,以便Oracle数据库可以通过该数据源连接到SQL Server数据库。
- 确保ODBC数据源名称与initodbc.ora文件中的server_name匹配。
3.创建数据库链接对象:- 在Oracle数据库服务器上创建一个数据库链接对象,该对象将用于连接到SQL Server数据库。
-使用CREATEDATABASELINK语句创建数据库链接对象,语法如下:CREATE DATABASE LINK link_nameCONNECT TO username IDENTIFIED BY passwordUSING 'data_source_name';其中link_name是链接名,username是在SQL Server数据库中的用户名,password是对应的密码,data_source_name是ODBC数据源的名称。
Oracle访问sql server实战全过程1、创建将要从oracle数据库访问sql server的用户testuser/testuser,并授予可访问turbocms的权限(这里我直接用了sa账号,从安全角度看还是创建一个专用账号比较好)。
二、Gateway的配置(%oracle_home%=e:/oracle/ora92)1、安装oracle9i standard edition 或者oracle9i enterprise edition(ip:10.1.9.159),产品要选择透明网关(oracle transparent gateway)里要访问microsoft sql server 数据库(这一步很重要)。
安装时要选择sql server 主机和数据库,我这里是正确配置的server:10.1.9.220,db:turbocms。
2、安装sql server2000(我这里是完全安装,有人说只要安装sql server2000(安装类型选择“仅连接”)就可以,我没有验证。
)3、Ping sqldb看是否同,若不通则在\winnt\system32\drivers\etc\hosts文件中增加一行,用来解析sqldb的ip地址,很简单不多说了。
4、由于在第一步中我选择的是仅安装软件,所以我在这里需要创建一个监听器。
5、拷贝%oracle_home%\tg2msql\inittg4msql.ora改名为init turbocms.ora这是网关进程启动时需要的初始化文件。
如果是访问多个sql server就需要再新建这个文件并修改HS_FDS_CONNECT_INFO=”SERVER=YOURDBSERVER;DATABASE=YOURDB”其他内容不变。
6、修改$oracle_home\network\admin下listener.ora内容如下:Listener=(description_list=(description=(address_list=(address=(protocol=tcp)(host=10.1.9.159)(port=1521)))))Sid_list_listener=(sid_list=(sid_desc=# (global_dbname=test)# (sid_name=test)没有设置全局名,设置后比较麻烦,(sid_name=plsextproc)(oracle_home=e:\oracle\ora92)(program=extproc))(sid_desc=(sid_name=turbocms)(oracle_home=e:\oracle\ora92)(program=tg4msql))#(sid_desc=#(sid_name=turbocms)访问多个数据库是继续添加本段代码#(oracle_home=e:\oracle\ora92)#(program=tg4msql)))7、重启动这台做gateway的windows机器上(ip:10.1.9.159)tnslistener服务。
DB_LINK:dblink 需要创建以下3个权限(DB_LINK不能通过database link提交commit事务与这些DDL)SQL> select distinct privilege as"database link privileges" from role_sys_privs where privilege in('CREATE SESSION','CREATE DATABASE LINK','CREATE PUBLIC DATABASE LINK');【第一种】创建公有DB_LINK:只要是数据库里的用户都可以使用公有dblinkSQL> create public database link test_dblink connect to user_name identified by "user_passwd" using'test_dblink';【第二种】私有dblink:只能在该数据库中由创建该dblink的用户才能使用和删除,其他用户都不可以使用和删除。
create database link test_dblink connect to itpux identified by "itpux" using'test_dblink';用法:select * from test@itpux编辑TNS:vi tnsnames.ora:ora11g =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = db01)))【第三种】全局的dblink: 和共有私有不同的是global dblink创建不用直接在tnsnames.ora中定义,而是直接把服务写在dblink的定义中create public database link test_dblink connect to user_name identified by "password" using'(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.106.142)(PORT = 1521))) (CONNECT_DATA =(SERVICE_NAME = oracletest)))';(其中,test_dblink是自定义的)本机:select instance_name from v$instance@test_dblink; --服务器的oracle实例是lff-----------------------------------------------------------------------------查看 dblinkselect owner,object_name from dba_objects where object_type='DATABASE LINK';--或者select * from dba_db_links;关闭:alter session close database link test_dblink;删除: drop public database link test_dblink;。
oracle数据库链接服务器查询sqlserver的写法要在Oracle数据库中链接SQL Server并执行查询,可以使用以下步骤:1. 从Oracle的SQL Developer或其他工具中,使用Oracle提供的JDBC驱动程序链接到SQL Server数据库。
2. 编写一个包含连接字符串的SQL语句。
连接字符串包括SQL Server的IP地址、端口号、数据库名称、用户名和密码。
例如,连接字符串可以是这样的:jdbc:sqlserver://10.10.10.10:1433;databaseName=TestDB;user=sa; password=1234563. 在Oracle数据库中创建一个数据库连接,其中包括连接字符串。
例如,可以使用以下PL/SQL代码创建一个数据库连接:CREATE DATABASE LINK sqlserver_link CONNECT TO "sa" IDENTIFIED BY "123456" USING 'jdbc:sqlserver://10.10.10.10:1433;databaseName=TestDB;user=sa; password=123456';4. 在该连接上执行 SELECT 语句以查询SQL Server数据库中的数据。
例如,可以使用以下SQL代码执行查询:SELECT * FROM mytable@sqlserver_link;这将返回来自SQL Server数据库中名为 'mytable'的表中的所有行。
注意,使用Oracle与SQL Server之间的联接需要一些配置和测试,以确认是否可以正确地连接到SQL Server数据库。
具体取决于您的环境和要求。
Oracle10g 连接sqlserver hsodbc dblink 方式非透明网关
因为要用到一个接口用Oracle到sqlserver中取数所以就研究了下(此为window系统下)
如果用透明网关的话还要下载几百兆的安装文件麻烦所以用hsodbc方式来连接
192.168.5.155 为本机(oracle服务器)的ip
192.168.5.161 为本机(sqlserver2008r2服务器)的ip
1、odbc的建立
2、配置oracle
3、重启监听
用管理员身份登陆
alter system set global_names = false;
---->设置false不要求建立的数据库链接和目的数据库的全局名称一致
创建djys dblink
create database link djys connect to "用户名" identified by "密码" using 'djy';
select * from sqlserver表名@djys t where t.F1='2430100465';
查出数据ok了
4、注意问题如果监听不能启动请检查配置
我遇到的问题lsnrct.Exe 文件都不见了,可能被杀毒的干掉了(如果cmd 执行lsnrctl status 不能执行就是这个问题了。
困扰了我很久啊!)。
通过ORACLE通用连接访问SQLServer数据库的方法以下的例子,要通过ORACLE通用连接,建立三个ORACLE的DATABASELINK,分别用于访问SQL2000服务器的ET2000,OFSS2000和BK2000数据库.1.在ORACLE服务器上,新建三个ODBC系统数据源,名称分别为ET2000,OFSS2000,BK2000;三个数据源都访问目标的SQLSERVER实例,不同之处仅在与默认连接的数据不同.2.在ORACLE服务器上,ORACLE安装目录(本例中是D:\oracle\product\10.2.0\db_1\)的hs\admin目录下,参照inithsodbc.ora创建initET2000.ora参数配置如下:其中ET2000是默认连接ET2000数据库的ODBC 系统数据源名称HS_FDS_CONNECT_INFO = ET2000HS_FDS_TRACE_LEVEL = 0类似地,创建initOFSS2000.ora和initBK20003.在ORACLE服务器上,ORACLE安装目录(本例中是D:\oracle\product\10.2.0\db_1\)的NETWORK\ADMIN目录下,修改tnsname.ora增加ET2000 =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.180)(PORT = 1521)))(CONNECT_DATA =(SID = ET2000))(HS=OK))类似的,增加OFSS2000和BK2000的配置段4.在ORACLE服务器上,ORACLE安装目录(本例中是D:\oracle\product\10.2.0\db_1\)的NETWORK\ADMIN目录下,修改listener.ora在这个段中,增加SID_DESC的配置SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)(PROGRAM = extproc))(SID_DESC =(SID_NAME = ET2000)(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)(PROGRAM = hsodbc))(SID_DESC =(SID_NAME = OFSS2000)(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)(PROGRAM = hsodbc))(SID_DESC =(SID_NAME = BK2000)(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)(PROGRAM = hsodbc)))5.重启ORACLE服务器TNS服务6.创建ORACLE的DATABASELINK对象ET2000.CREATE PUBLIC DATABASE LINK ET2000CONNECT TO "sa" (user)IDENTIFIED BY "000000" (password)USING 'ET2000' (tns || DBNAME)/类似的建立DATABASELINK OFSS2000和BK2000. 这里用sa用户连接,一般倒数据时用一个有SELECT所有表权限的用户就可以了7.现在就可以使用DATABASELINK通过ORACLE客户端访问SQL 数据库了,例如:SELECT * FROM "tKHXX"@ET2000 访问ET2000库的tKHXX表SELECT * FROM "tOF_JJZH"@OFSS2000 访问OFSS2000库的tOF_JJZH表要注意,表名和字段名最好加双引号,否则会被按大写解析,可能导致报对象不存在的错误.。
oracle透明网关-dblink直接访问异构数据库透明网关是oracle的一个中间件工具,作用是实现oracle下通过dblink直接访问非oracle数据库的作用,这也意味着可以实现数据同步。
透明网关版本号须和oracle版本一致最好,目前免费,支持的异构数据库有sqlserver informix sysbase,详细的可参考对应版本的说明。
需到官网单独下载,单独安装,有win版本也有linux版本,可以安装在oracle所在主机,也可以安装在单独的主机,配置上可以参考官网使用指南。
配置上:透明网关里1配好到异构数据库的连接信息(connect info),2配好对连接信息的监听(sid);oracle里1配置好"指向网关主机sid的tns",2监听无需变动;配置完毕,首先检查下open_links,##########open_links beginopen_links是oracle的一个参数,你可以通过sql select * from v$parameter / 命令行show parameter open_links 查看open_links和open_links_per_instance 的值即可。
在v$parameter中也有open_links的英文定义:max # open links per session就是每个回话最多更开的连接,如果你需要10个dblink,那么这个值就需要修改,修改语句如下:alter system set open_links = 255 scope =spfile;alter system set open_links_per_instance = 255 scope =spfile;然后重启下数据库生效。
##########open_links endopen_links没问题后,注意设置杀软和防火墙规则允许网关和oracle通讯,随后需要建立到"指向网关主机sid的tns"的dblink,在建立dblink前先看下已有的透明网关,防止重名:select * from dba_objects where object_type = 'DATABASE LINK';想删除用:drop public database link xxx;然后就是建立到"指向网关主机sid的tns"的dblink,建立的语句范例如下:create public database link nm1500car3gdb connect to "ccpqry" identified by "ccpqry" using 'nm1500car3gdb'; 注意tns 是单引号,ccpqry是异构库的验证,注意用户名和密码用双引号。
Oracle中使用透明网关链接到Sqlserver
在最近项目中需要从Oracle中访问SQL Server数据库, 自然想到了透明网关. 因为Oracle数据库是Linux上的, 而Linux上的Oracle9i不包括连接到SQL Server的透明网关.就在一台单独的Windows 服务器上安装了透明网关用做Oracle访问SQL Server的桥梁.
环境如下:
Oracle Database Server:Linux + oracle 9.2.0.4 IP:10.194.129.197
Transparent Gateway:Windows 2003 server IP: 10.194.129.225
MS SQL Server:Windows 2003 server + SQL Server 2005 IP: 10.194.129.225
1、Transparent Gateway for SQL Server安装
从Oracle 9i数据库安装光盘setup.exe安装,选择安装客户端
安装类型选择:管理员
安装完客户端后,重新运行setup.exe,安装产品选择Oracle 9i Database 9.2.0.1.0, 安装类型选择"自定义",安装组件选择Oracle Net Services和Oracle Transparent Gateways, 并在此项下选择Oracle Transparent Gateway for Microsoft SQL Server, 安装过程中可以不设置连接到SQL Server 的信息.如下图所示:
以下的IP地址及数据库以实际环境为准
2、编辑%ORACLE_HOME%\tg4msql\admin\init%ORACLE_SID%.ora, 该文件包含了TG for SQL Server的配置信息, 其中%ORACLE_SID%是给TG的"SID", 默认为tg4msql. 修改文件中的行
HS_FDS_CONNECT_INFO="SERVER=10.194.129.225;DATABASE=185life"
其中SERVER后为SQL Server所在的服务器名称或ip地址,Database为连接到的数据库名称.
当然,如果在SQL Server服务器上,有两个sql server实例,则使用‘服务器名"实例名’的方式设置上面的SERVER值,如:
HS_FDS_CONNECT_INFO="SERVER=ZZL\MSSQLSERVER;DATABASE=MSDB"
3、编辑%ORACLE_HOME%"network"admin"listener.ora, 编辑对应listener的SID_LIST
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=%ORACLE_SID%)
(ORACLE_HOME=oracle_home_directory) (PROGRAM=tg4msql)
)
)
例如:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = tg4msql)
(ORACLE_HOME = d:\oracle\ora92) #oracle的主目录
(PROGRAM = tg4msql)
)
)
其中%ORACLE_SID%必须为第二布中设置的SID, 默认值为tg4msql. 修改listener.ora文件后需重启listener使修改生效.如果没有listener.ora文件,请用Net Configuration Assistant或Net Manager 新建一个LISTENER.
以上操作都是在Transparent Gateway所在机器上。
4、在Oracle服务器上:编辑需要连接到透明网关的Oracle Server的
$ORACLE_HOME\network\admin\tnsnames.ora, 例如:
TG4MSQL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.194.129.225)(PORT = 1521)) )
(CONNECT_DATA =
(SERVICE_NAME = tg4msql)
)
(HS = OK)
)
HOST指向Transparent Gateway所在的机器的IP,Service_name为第3步中的SID_NAME
使用tnsping测试服务名是否连通,命令:tnsping tg4msql。
如果不通,请检查防火墙及网络配置。
5、在Oracle数据库中建立连接, 指向TG for SQL Server.
CREATE DATABASE LINK tg4msql CONNECT TO "user" IDENTIFIED BY "password" USING 'tg4msq
其中tg4msql是tnsnames中建立的连接字符串.
ms sql server的用户名和密码必须小写,而且要加双引号
否则会报如下错误:
错误信息:
ORA-28500: connection from ORACLE to a non-Oracle system returned this messsage:
[Transparent gateway from MSSQL][Microsoft][ODBC SQL Server
Driver][SQL Server]??
'sa'????? (SQL State:28000; SQL Code: 18456)
ORA-02063: preceding 2 lines from LINK_ZZL
错误原因:
在CREATE DATABASE LINK LINK_ZZL的连接字符串中,ms sql server的用户名和密码必须小写,而且要加双引号
6、确保CATHS.sql已被运行。
以SYS用户连接上去,查看有没有SYS.HS_FDS_CLASS,如果没有,运行
$ORACLE_HOME/RDBMS"ADMIN"CATHS.SQL
6、测试, 如运行select * from emp@tg4msql等.
访问dblink时说明:
这是基于网关的方式,因此不能在断开网络的情况下本地的oracle连接本地的ms sql server
否则会报如下错误:
ORA-28545: error diagnosed by Net8 when connecting to an agent
NCRO: Failed to make RSLV connection
ORA-02063: preceding 2 lines from LINK_ZZL
7、BUG解决。
如果在第6步出现以下错误提示,则以SYS运行
ERROR at line 1:
ORA-28522: error initializing heterogeneous capabilities ORA-28522: error initializing heterogeneous capabilities
ORA-28559: FDS_CLASS_NAME is <GTW>9.2.0.5.0_128,
FDS_INST_NAME is <link>
ORA-02063: preceding 3 lines from %s
ORA-00604: error occurred at recursive SQL level 1
ORA-24274: no row exists in the HS$_BASE_CAPS table for these parameters
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "SYS.DBMS_HS_UTL", line 431
ORA-06512: at "SYS.DBMS_HS_CHK", line 51
ORA-06512: at "SYS.DBMS_HS_UTL", line 48
ORA-06512: at "SYS.DBMS_HS", line 38
ORA-06512: at line 1。