创建透明网关
ORACLE实现异构服务的技术叫做透明网关(Transparent Gateway),利用透明网关可以实现和SQL
SERVER、SYBASE、DB2等多种数据库的互联。因此透明网关也是Oracle数据仓库和数据迁移中的一个重要组成部分。
透明网关的体系结构也很简单,在ORACLE和SQL
SERVER之间使用ORACLE透明网关服务器实现互连互通,其中透明网关服务器可以与ORACLE或SQL
SERVER数据库在同一台主机上,也可以是在独立的一台主机上。
本文ORACLE或SQL SERVER数据库在同一台主机上;
SQL Server版本为SQL Server 2000
Oracle版本为Oracle9i 9.2.0.1
操作系统版本为WindowsXP
透明网关的安装和配置
1、运行Oracle安装程序进行透明网关组件的安装
2、选择自定义
3、选择要安装的透明网关
4、系统提示配置
注:Microsoft SQL Server:SQL服务器的地址(IP)
Microsoft SQL数据库: SQL数据库名(如:Northwind)
安装成功后会在以下目录生成如下文件
5、查看%OracleHome%/ora90/tg4msql/admin目录
tg4msql
├─admin --透明网关配置目录
├─inittg4msql.ora –MS SQL Server数据库配置信息
└─tg4msql_tx.sql
├─bin --系统配置的东西
├─nls --定义错误的消息
├─eng
└─jpn
├─demo --提供了一些在SQLServer环境下得demo
├─html --提供了一些SQLServer和Oracle的参考文档
└─trace --提供系统跟踪情况
6.修改inittg4msql.ora, %OracleHome%/ora90/tg4msql/admin/listener.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
#服务器IP与端口用逗号隔开
HS_FDS_CONNECT_INFO="SERVER=127.0.0.1,1433;DATABASE=gwba"
HS_FDS_TRACE_LEVEL=DEBUG
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
7.修改监听文件, %OracleHome%/ora90/network/admin/listener.ora,增加如下
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC
=
(SID_NAME
= PLSExtProc)
(ORACLE_HOME
= D:\oracle\ora90)
(PROGRAM
= extproc)
)
(SID_DESC
=
(GLOBAL_DBNAME
= DB)
(ORACLE_HOME
= D:\oracle\ora90)
(SID_NAME
= DB)
)
(SID_DESC
=
(SID_NAME
= tg4msql)
(ORACLE_HOME
= D:\oracle\ora90)
(PROGRAM
= tg4msql)
)
)
注:标红部分为新增的
8.修改tnsnames.ora,
%OracleHome%/ora90/network/admin/tnsnames.ora,增加如下
TG4MSQL
= --
TG4MSQL:主机连接字符串
(DESCRIPTION =
(ADDRESS_LIST
=
(ADDRESS
= (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA
=
(SID
= tg4msql)
)
(HS=OK) --不知道什么意思,
)
9.重启监听
lsnrctl stop
lsnrctl start
lsnrctl status
10. 测试解析状态
C:/ >tnsping tg4msql
TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0 - Production
on 14-10月-2
007 16:29:43
Copyright (c) 1997 Oracle Corporation. All rights reserved.
已使用的参数文件:
D:\oracle\ora90\network\admin\sqlnet.ora
已使用 TNSNAMES 适配器来解析别名
Attempting to contact (DESCRIPTION= (ADDRESS_LIST = (ADDRESS =
(PROTOCOL=TCP)(HO
ST= 127.0.0.1)(PORT=1521))) (CONNECT_DATA= (SID=tg4msql))
(HS=OK))
OK(20毫秒)
11、创建数据库链接
CREATE PUBLIC DATABASE LINK MStest CONNECT TO “sa” IDENTIFIED BY
“sa” USING ‘TG4MSQL’;
12、察看数据库链接
select * from sys.LINK$
13、测试
易混淆术语介绍:
Db_name:对一个数据库(Oracle
database)的唯一标识,该数据库为第一章讲到的Oracle
database。这种表示对于单个数据库是足够的,但是随着由多个数据库构成的分布式数据库的普及,这种命令数据库的方法给数据库的管理造成一定的负担,因为各个数据库的名字可能一样,造成管理上的混乱。为了解决这种情况,引入了Db_domain参数,这样在数据库的标识是由Db_name和Db_domain两个参数共同决定的,避免了因为数据库重名而造成管理上的混乱。这类似于互连网上的机器名的管理。我们将Db_name和Db_domain两个参数用’.’连接起来,表示一个数据库,并将该数据库的名称称为Global_name,即它扩展了Db_name。Db_name参数只能由字母、数字、’_’、’#’、’$’组成,而且最多8个字符。
Db_domain:定义一个数据库所在的域,该域的命名同互联网的’域’没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的。当然为了管理方便,可以将其等于互联网的域。
Global_name:对一个数据库(Oracle
database)的唯一标识,oracle建议用此种方法命令数据库。该值是在创建数据库是决定的,缺省值为Db_name.
Db_domain。在以后对参数文件中Db_name与Db_domain参数的任何修改不影响Global_name的值,如果要修改Global_name,只能用ALTER
DATABASE RENAME GLOBAL_NAME TO
命令进行修改,然后修改相应参数。
Service_name:该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name.
Db_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service
name 必须与SID一样。
Net service name:网络服务名,又可以称为数据库别名(database
alias)。是客户端程序访问数据库时所需要,屏蔽了客户端如何连接到服务器端的细节,实现了数据库的位置透明的特性。
实例
就是管理相关库的内存结构的名字(由SGA、PGA、服务器进程、用户进程、后台进程等组成)
数据库 就是实际的磁盘上的文件(数据文件、日志文件、控制文件等),负责保存数据,但由对应的实例来操作它的数据
服务名 就是对外公布的名称,为网络监听服务
其实,在我们传统的概念里,数据库是一个统称的名字,在Oracle中,你可以把“数据库”理解成一个大概念,也要把它理解成一个小概念
1、一个Oracle数据库系统中可以同时安装几个数据库,每一个数据库对应一个唯
一的实例,但是OPS系统除外,可以多个实例同时对一个数据库操作,称为并行服务
器
2、只是一个名字,SID即是INSTANCE_NAME,SERVICE_NAMES主要用在监听器中,
为了方便吧,有些是为了传统习惯的延续,有些是为了更方便的使用
3、NET EASY CONFIG操纵的应该是主机字符串,是为客户端服务的
一个数据库可以对外公布多个服务名(SERVICE_NAMES)
一个客户端也可以用多个主机字符串连接到同一个数据库服务器上
4、一个OS上可以装多个Oracle数据库(小的概念),每个库可以对外公布多个服
务名,都通过init.ora和listener.ora来实现
-----------------------------------------------------
1建立net 服务名
linux下 进入
cd
$ORACLE_HOME/network/admin
vi tnsnames.ora
添加
CCPBS_19 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.130.38.19)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = CCPBS)
)
)
保存
退出 然后测试下
>tnsping ccpbs_19
TNS Ping Utility for
Linux: Version 9.2.0.7.0 - Production on 02-JUL-2009 15:16:52
Copyright (c) 1997
Oracle Corporation. All rights reserved.
Used parameter
files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS =
(PROTOCOL = TCP)(HOST = 10.130.38.19)(PORT = 1521))) (CONNECT_DATA
= (SERVICE_NAME = CCPBS)))
OK (20 msec)
测试成功
Windows下的参见
http://article.pchome.net/content-340501.html
2、创建数据库链接,
/home/oracle/>sqlplus /nolog
SQL*Plus: Release
9.2.0.7.0 - Production on Thu Jul 2 16:01:00 2009
Copyright (c) 1982,
2002, Oracle Corporation. All rights
reserved.
SQL>
conn /as sysdba
Connected.
进入系统管理员SQL>操作符下,运行命令:
>create public database link
ecbm_19 connect to ecbm_userName identified by ecbm_pwd using
'CCPBS_19';
Database link created.
格式:
createpublicdatabaselinklink_nameconnecttouseridentifiedbypassword
using'SID';
则创建了一个连接到10.130.38.19 ccpbs上以ecbm_userName
用户的连接
查询数据时带上@ecbm_19 就ok了 如select *
fromemp@ecbm_19;
删除
DROPPUBLICDATABASELINKecbm_19;
3、建立同义词,为了使有关分布式操作更透明,ORACLE数据库里有同义词的对象synonym
SQL>create synonym
bjscottemp for emp@beijing;
于是就可以用bjscottemp来替代带@符号的分布式链接操作emp@beijing。
createpublicsynonympohforpo_headers_all@erp_danzheng_test;
createpublicsynonympapfforper_all_people@erp_danzheng_test;
4、查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令:
SQL>select
owner,object_name from dba_objects where object_type='DATABASE
LINK';