转 oRACLE DBLINK 使用ITeye - 乐橙lc8

转 oRACLE DBLINK 使用ITeye

2019年02月23日09时30分18秒 | 作者: 鸿畴 | 标签: 数据库,效劳,链接 | 浏览: 1274

oRACLE DBLINK 运用


我用到的部分

create database link xbzw_link
  connect to xbzw identified by xbzw
  using (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST =10.1.10.8)(PORT =1521))
  )
  (CONNECT_DATA =
  (SERVICE_NAME = orcl)
  )
  );

赤色部分为应该自己替换掉的部分

拜访的时分 如 SELECT * FROMTABLE@XBZW_LIKE;

一下是一篇写的不叫不错的参阅文档,附这儿:

1、用dblink链接oracle

(1)与渠道无关的写法:

create public database
link cdt connect to apps
identified by apps using (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.31.205.100)(PORT = 1541))
)
(CONNECT_DATA =
(SERVICE_NAME = CDT)
)
)

(2)能够将单引号内的内容用一个效劳名替代。而将其内容写在tnsname.ora中,这种写法有时不成功。
2、参阅如下内容

俩台不同的数据库效劳器,从一台数据库效劳器的一个用户读取另一台数据库效劳器下的某个用户的数据,这个时分能够运用dblink。
其实dblink和数据库中的view差不多,建dblink的时分需求知道待读取数据库的ip地址,ssid以及数据库用户名和暗码。
创立能够选用两种办法:
1、现已装备本地效劳
create public database
link fwq12 connect to fzept
identified by neu using fjept
CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 暗码 USING ‘本地装备的数据的实例名’;
2、未装备本地效劳
create database link linkfwq
connect to fzept identified by neu
using (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = fjept)
)
);

host=数据库的ip地址,service_name=数据库的ssid。
其实两种办法装备dblink是差不多的,我个人感觉仍是第二种办法比较好,这样不受本地效劳的影响。

数据库衔接字符串能够用NET8 EASY CONFIG或许直接修正TNSNAMES.ORA里界说.

数据库参数global_name=true时要求数据库链接称号跟远端数据库称号相同

数据库大局称号能够用以下指令查出
SELECT * FROM GLOBAL_NAME;

查询远端数据库里的表
SELECT …… FROM 表名@数据库链接名;
查询、删去和刺进数据和操作本地的数据库是相同的,只不过表名需求写成“表名@dblink效劳器”罢了。


顺便说下近义词创立:

CREATE SYNONYM近义词名FOR 表名;
CREATE SYNONYM近义词名FOR 表名@数据库链接名;

删去dblink:DROP PUBLIC DATABASE LINK linkfwq。

假如创立大局dblink,有必要运用systm或sys用户,在database前加public。

3、用dblink链接sqlserver;



参阅1:

经过dblink拜访sqlserver数据库

通用网关
Oracle异构效劳是包含在Oracle数据库中的一个模块,经过运用通明网关(Transparent Gateway)或通用衔接(Generic Connectivity)来拜访其它非Oracle体系的数据。
异构效劳的首要结构如下:
各模块扼要阐明如下:
异构效劳模块:归于Oracle数据库的内核部分,担任大部分异构衔接的处理;
署理通用代码:对一切根据异构效劳产品的通用代码;
驱动:是与非Oracle体系直接交互的模块,实现从异构效劳API到特定非Oracle体系API的映射。
署理:是Oracle Server衔接非Oracle体系的进程,包含两部分即署理通用代码和针对特定非Oracle体系的驱动。署理的方位能够与非Oracle体系在同一台机器上,或与Oracle Server在同一台机器上,或许单独在一台机器上。我这次实践的环境选用的是最终一种。

通明网关和通用衔接实践是异构效劳中署理的两种类型。其间通明网关是功用较强的,它经过署理进程从Oracle Server拜访各地的异构分布式数据库,而供给应用户的感觉是这些数据库仍然是Oracle数据库,Oracle公司供给对大多数商业数据库的通明网关。通用衔接则有较多约束,它运用用户自己供给的ODBC或OLE DB驱动程序作为异构效劳的署理驱动,而且要求这些驱动有必要要装置在Oracle Server的$ORACLE_HOME目录下。

装备进程:
从SQLDB开端:
1. 在SQLDB上创立将要从Oracle数据库拜访SQL Server的用户testuser/testuser,并颁发可拜访CDR的权限;
接下来是GATEWAY:
1.装置好Oracle 9.0.1 Database for Windows后,会发现在%ORACLE_HOME%下有目录tg4msql,以及网关程序$ORACLE_HOME\BIN\tg4msql;
2. 保证在c:\winnt\system32下有ntwdblib.dll,若没有则装置SQL Server2000(装置类型挑选“仅衔接”)。此文件是拜访SQL Server的DB-Library;
3. ping SQLDB看是否通,若不通则在\winnt\system32\drivers\etc\hosts文件中增加一行,用来解析SQLDB的IP地址,很简单不多说了。
4. 修正%ORACLE_HOME%\tg4msql\inittg4msql.ora,这是网关进程启动时需求的初始化文件。只需改下面这一行即可:
HS_FDS_CONNECT_INFO=SQLDB.CDR
5.修正%ORACLE_HOME%\network\admin\listener.ora如下:
LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=tg4msql)
(ORACLE_HOME=e:\Oracle\OraHome_9I) #用你的%ORACLE_HOME%
(PROGRAM=tg4msql)
)
)
最终是ORADB:
1.修正tnsnames.ora
CDR = #CDR是我起的,你能够选用其它
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST= GATEWAY)
(PORT = 1521)
)
(CONNECT_DATA =
(SID = tg4msql) #tg4msql有必要要和GATEWAY上listener.ora中的SID共同
)
(HS = OK) #这很重要,通知Oracle Server要调用异构效劳模块来处理
)
2.修正initora9i.ora(数据库初始化文件)
global_names=true,重启数据库。
不然会在履行sql时报错:ORA-02085: 数据库链接CDR与HO.WORLD相衔接
原因如下:The GLOBAL_NAMES parameter when set to TRUE implies that database link name should be similar to the Global database name to which you are trying to connect.
3.创立拜访SQLDB.CDR的数据库链接
SQL create public database link cdr connect to testuser identified by testuser using ‘CDR’;
4. OK!最终履行SQL测验看是否能正常拜访SQL Server
SQL select count(*) from all_tables@cdr;

参阅2

衔接SQLSERVER的WABAO2数据库 帐号sa 暗码sa

1。查看ORACLE的通明网关(Oracle Transparent Gateway)是否装置,假如装置了在HOME目录下有个tg4msql文件夹存在。假如没有,就运转装置文件自界说装置

2。在HOME\tg4msql\admin下新写initwabao2.ora #留意这个文件姓名 第3步的 SID_NAME 值是这个文件名去掉init
HS_FDS_CONNECT_INFO="SERVER=zhanghuajie;DATABASE=wabao2" #设置SQLSERVER的地址 要拜访的数据库称号
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER

3。HOME\network\admin 下listener.ora部分内容如下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle)
(PROGRAM = extproc)
)
(SID_DESC = #增加了这一段
(SID_NAME = wabao2) #留意这个当地,在第4步要用
(ORACLE_HOME = D:\oracle)
(PROGRAM = tg4msql) #固定
) #完毕
(SID_DESC =
(GLOBAL_DBNAME = zhj)
(ORACLE_HOME = D:\oracle)
(SID_NAME = zhj)
)
)
重启动这台做gateway的TNSListener效劳.

4。tnsnames.ora, 增加下面的内容:
wabao2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = zhanghuajie)(PORT = 1521))
)
(CONNECT_DATA =
(SID = wabao2) #第3步的SID_NAME
)
(HS = ok) #固定值
)

5。 tnsping wabao2
呈现相似如下表明正确:
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = zhanghuajie)(PORT = 1521))) (CONNECT_DATA = (SID = wabao2)) (HS = ok))
OK(20毫秒)

6。设置数据库参数global_names=false。
设置global_names=false不要求树立的数据库链接和意图数据库的大局称号共同。
global_names=true则要求, 多少有些不方便。
oracle9i和oracle8i都能够在DBA用户下用SQL指令改动global_names参数
alter system set global_names=false;

7。树立公有的数据库链接:
create public database link wabao2 connect to sa identified by sa using wabao2;

8。测验
select * from test@wabao2;
select "ID" from test@wabao2; #留意双引号 和大小写


两台不同的数据库效劳器,从一台数据库效劳器的一个用户读取另一台数据库效劳器下的某个用户的数据,这个时分能够运用dblink。
  其实dblink和数据库中的view差不多,建dblink的时分需求知道待读取数据库的ip地址,ssid以及数据库用户名和暗码。
  创立能够选用两种办法:
  1、现已装备本地效劳
 
[点击图片可在新窗口翻开] createpublicdatabase
[点击图片可在新窗口翻开] link fwq12 connecttofzept
[点击图片可在新窗口翻开] identifiedbyneu usingfjept
  CREATE DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 暗码 USING ‘本地装备的数据的实例名’;
  2、未装备本地效劳
[点击图片可在新窗口翻开] createdatabaselink linkfwq
[点击图片可在新窗口翻开]  connecttofzept identifiedbyneu
[点击图片可在新窗口翻开]  using(DESCRIPTION =
[点击图片可在新窗口翻开]  (ADDRESS_LIST =
[点击图片可在新窗口翻开]  (ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))
[点击图片可在新窗口翻开]  )
[点击图片可在新窗口翻开]  (CONNECT_DATA =
[点击图片可在新窗口翻开]  (SERVICE_NAME = fjept)
[点击图片可在新窗口翻开]  )
[点击图片可在新窗口翻开]  );

host=数据库的ip地址,service_name=数据库的ssid。
  其实两种办法装备dblink是差不多的,我个人感觉仍是第二种办法比较好,这样不受本地效劳的影响。

  数据库衔接字符串能够用NET8 EASY CONFIG或许直接修正TNSNAMES.ORA里界说.

  数据库参数global_name=true时要求数据库链接称号跟远端数据库称号相同

  数据库大局称号能够用以下指令查出
  SELECT * FROM GLOBAL_NAME;

  查询远端数据库里的表
  SELECT …… FROM 表名@数据库链接名;
  查询、删去和刺进数据和操作本地的数据库是相同的,只不过表名需求写成“表名@dblink效劳器”罢了。


  顺便说下近义词创立:

  CREATE SYNONYM近义词名FOR 表名;
  CREATE SYNONYM近义词名FOR 表名@数据库链接名;

  删去dblink:DROP  PUBLIC  DATABASE  LINK linkfwq。

  假如创立大局dblink,有必要运用systm或sys用户,在database前加public。
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章