十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
你是要 dblink 到另外一个 oracle? 还是 dblink 到一个 sql server ?
创新互联是一家专注于网站建设、做网站与策划设计,遂平网站建设哪家好?创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:遂平等地区。遂平做网站价格咨询:18982081108
注:
如果创建全局dblink,必须使用systm或sys用户,在database前加public。
SQL CREATE DATABASE LINK mydblink
2 CONNECT TO test IDENTIFIED BY test123
3 USING '(DESCRIPTION =
4 (ADDRESS_LIST =
5 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.210)(PORT = 1521)))
6 (CONNECT_DATA = (SERVICE_NAME = orcl)
7 )
8 )';
Database link created.
SQL select count(1) from user_tables@mydblink;
COUNT(1)
----------
6
上面的例子,是在当前 Oracle 数据库上面,创建一个 名字叫 mydblink 的数据库链接。
使用 test作为用户名,test123 作为密码。
访问的远程数据库,ip地址是 192.168.1.210,端口号是默认的 1521
远程服务器的服务名是 orcl
Oracle 连接 SQL Server
需要去下载 额外的 网关程序
注意:
本次测试
Oracle (10.2.0.1.0) 服务器 ip 地址: 192.168.1.210
SQL Server (2005 开发者版本) 服务器名(SQL2005)
下载下来的
10201_gateways_win32.zip
该 gateways 程序
可安装在 SQL Server 那台计算机上
本次网关程序,被安装在
D:\oracle\product\10.2.0\tg_1
目录下.
安装过程会提示输入 SQL Server 数据库的信息。
该信息会被生成在
D:\oracle\product\10.2.0\tg_1\tg4msql\admin
目录下的
inittg4msql.ora
文件中。
将其复制粘贴为文件名
initTest2005.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=SQL2005.test
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
下一步,修改
D:\oracle\product\10.2.0\tg_1\NETWORK\ADMIN
目录下的
listener.ora
文件。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\tg_1)
(PROGRAM = extproc)
)
# 追加开始
(SID_DESC =
(SID_NAME = Test2005)
(ORACLE_HOME = D:\oracle\product\10.2.0\tg_1)
(PROGRAM = tg4msql)
)
# 追加结束
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = SQL2005)(PORT = 1521))
)
)
下一步,运行 lsnrctl stop / lsnrctl start
C:\lsnrctl stop
输出略...
C:\lsnrctl start
部分输出略...
服务 "Test2005" 包含 1 个例程。
例程 "Test2005", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
下一步,修改
D:\oracle\product\10.2.0\tg_1\NETWORK\ADMIN
目录下的
tnsnames.ora
文件
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
# 追加开始
TEST2005 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = SQL2005)(PORT = 1521))
)
(CONNECT_DATA =
(SID = Test2005)
)
(HS = OK)
)
# 追加结束
tnsping 测试是否正常。
C:\tnsping test2005
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 03-10月-
2011 14:03:03
Copyright (c) 1997, 2005, Oracle. All rights reserved.
已使用的参数文件:
D:\oracle\product\10.2.0\tg_1\network\admin\sqlnet.ora
已使用 TNSNAMES 适配器来解析别名
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = SQL2005)(PORT = 1521))) (CONNECT_DATA = (SID = Test2005)) (HS = OK))
OK (50 毫秒)
创建数据库链接 (DBLINK)
CREATE DATABASE LINK mssql2005
CONNECT TO "test" IDENTIFIED BY "test123"
USING '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = SQL2005)(PORT = 1521))
(CONNECT_DATA = (SID = Test2005)
(HS = OK)
)
)';
SELECT * FROM test@mssql2005;
客户端链接到服务器端,在客户端登陆页面sql*plus,输入数据库用户名,口令,以及主机字符串就OK,如果服务器是另一台主机,主机字符串为:服务器IP地址oracle要求服务器ip为固定的ip+ "/" + oracle_sid名;oracle_sid名是oracle数据库的实例名,在tnsname.ora文件中可以查看,listener.ora文件中记录着数据库服务,允许客户端链接服务器,建议楼主用PL/SQL工具,它对于oracle数据库的开发,维护都是非常方便的!
EXEC sp_addlinkedserver
@server='Province', --被访问的服务器别名
@srvproduct='ORACLE', --SqlServer默认不需要写
@provider='MSDAORA', --不同的库都是不一样的,OLE DB字符
@datasrc='192.168.88.88/ORCL'--要访问的服务器
GO
EXEC sp_addlinkedsrvlogin
@rmtsrvname='Province', --被访问的服务器别名
@useself='false', --固定这么写
@locallogin='sa', --本地操作应户名
@rmtuser='kobe', --被访问的服务器用户名
@rmtpassword='kobe123'--被访问的服务器用密码
GO
--参数解释:
sp_addlinkedserver:创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行访问。
sp_addlinkedsrvlogin:创建或更新本地 Microsoft® SQL Server™ 实例上的登录与链接服务器上远程登录之间的映射。
现在测试一下,用帐号sa本地登录SqlServer,新建一个查询,输入
SELECT * FROM OPENQUERY(Province, 'select * from t_base_school')
比如:
SELECT organization_id,organization_name FROM OPENQUERY(Province, 'select * from t_base_organizationtree')
没问题的话,就能查询到数据了。
一些常用操作:
--查询操作
SELECT * FROM OPENQUERY(Province, 'select * from t_base_duty')
--删除操作
DELETE FROM OPENQUERY(Province, 'select * from t_base_duty')
--插入操作
INSERT INTO OPENQUERY (province,'SELECT * FROM t_base_role') (role_id,role_name,bureautype_id,is_system,b_use,field_order,b_del,identity_id) VALUES (10,'科比',7,1,0,1,0,2)
--更新操作
UPDATE OPENQUERY (province,'SELECT * FROM t_base_role') SET role_name='科比' WHERE role_id=10
注:技巧(OPENQUERY(Province, 'select * from t_base_duty') 看做是一张表)
前提是电脑必须安装oracle客户端。
配置方法:
1、找到oracle的安装目录。如:C:\oracle\product\10.2.0\db_1\network\ADMIN
2、找到tnsnames.ora文件。
3、用文本方式打开,添加以下内容:
本地实例名 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 远程数据库IP地址)(PORT = 远程服务器端口号))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 远程数据库服务名)
)
)
其中中文部分是需要修改的部分,除第一个“本地实例名”外,其他需要跟远程数据库管理员咨询,本地实例名就是方便自己识别数据库的一个名字,可以自定义。
4、然后打开pl/sql就能看到自己创建的链接,如图: