在sql2008上面建立dblink

本文介绍如何在SQL Server 2008中建立与Oracle数据库的链接服务器(DBLink),包括配置步骤及SQL查询示例。文章详细说明了设置过程中的各个选项卡配置,并对比了两种查询方式的性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在sql2008上面建立dblink
一.建立oracle的链接服务器
1.首先电脑上应该安装有oracle的客户端,并能连接到服务器
  (因为这里是TIPTOP ERP系统+oracle数据库,所以电脑上oracle的安装就先忽略)
2.在sql server2008的Management Stadio 中——链接服务器——新建链接服务器


3.在新建对话框"常规"选项卡里面:
  【链接服务器名字】:自己取一个,我这里写ERP
  【访问接口选择】:Microsoft OLEDB Provider for Oracle 驱动
  【产品名称】:Oracle
  【数据源】:写上自己电脑上tnsnames.ora 文件中配置的服务名;我这里是topprod
  【访问接口字符串】:user id=TEST;password=TEST(可以省略)


4.在新建对话框"安全性"选项卡里面,选择安全性选项页,
  使用此安装上下文建立连接:
  【远程登录】:TEST
  【使用密码】:******

5.SQL的写法有两种
<1>使用T-SQL语法:
  SELECT * FROM LNK1..用户名.表名    --注意用户名称,表名称要大写

EX:SELECT * FROM ERP..SH_CCT.TC_QCS_FILE

<2>使用PLSQL语法:
    select * from openquery(LNK1,'select * from 用户名.表名')

EX:SELECT * FROM openquery(ERP,'SELECT * FROM SH_CCT.TC_QCS_FILE')

第二种访问方式比第一种约快50%;第二种访问方式跟直连ORACLE的速度相当;
第一种访问方式可能会导致一些意外错误,如:该表不存在,或者当前用户没有访问该表的权限。
如果需要访问的column中使用没有精度的数据类型,这两种查询方式都可能会报错,这是ORACLE的BUG,
无法修正,只能通过查询语句的特殊处理规避这一问题:
OLEDB 提供程序 'OraOLEDB.Oracle' 为列提供的元数据不一致。执行时更改了元数据信息。

查询:SELECT * FROM OPENQUERY(TEST, 'SELECT * FROM tableName')
写入:INSERT INTO OPENQUERY(TEST, 'SELECT * FROM tableName WHERE 1>1') VALUES(3,6,'ANDY')
更新:UPDATE OPENQUERY(TEST, 'SELECT * FROM tableName') SET role_id = 'ForTest' WHERE id = 3
删除:DELETE OPENQUERY(TEST, 'SELECT * FROM tableName') WHERE id IN (1,3)


二.建立SQl Server的链接服务器(建立方法同上)
select * from [192.168.1.14].[EFNETDB].[dbo].py05b_shya
Select * From [链接服务器名].[远程数据库名].[所有者].[表名]
Select * from [127.0.0.1].[cntvs].[dbo].[t_class]

 

********************************************************************************************************************************************

大笑大笑==== Till good is better, but better best

大笑大笑====“我的努力不会停止,敬请期待吧!”My trying hard will go on!Please wait and see!

********************************************************************************************************************************************

 

Oracle数据库中,建立动态数据库链接(Dynamic DBLINK)可以通过使用PL/SQL包来实现。以下是创建动态DBLINK的步骤和示例代码: 1. **创建DBLINK用户权限**: 确保当前用户具有创建DBLINK的权限。如果没有,可以使用以下命令授予权限: ```sql GRANT CREATE PUBLIC DATABASE LINK TO your_user; ``` 2. **创建PL/SQL包**: 创建一个PL/SQL包来管理动态DBLINK。以下是一个示例包: ```sql CREATE OR REPLACE PACKAGE dynamic_dblink AS PROCEDURE create_dblink(p_dblink_name IN VARCHAR2, p_username IN VARCHAR2, p_password IN VARCHAR2, p_host IN VARCHAR2, p_port IN VARCHAR2, p_service_name IN VARCHAR2); PROCEDURE drop_dblink(p_dblink_name IN VARCHAR2); END dynamic_dblink; / ``` 3. **创建PL/SQL包体**: 创建一个PL/SQL包体来实现包中的过程: ```sql CREATE OR REPLACE PACKAGE BODY dynamic_dblink AS PROCEDURE create_dblink(p_dblink_name IN VARCHAR2, p_username IN VARCHAR2, p_password IN VARCHAR2, p_host IN VARCHAR2, p_port IN VARCHAR2, p_service_name IN VARCHAR2) AS BEGIN EXECUTE IMMEDIATE ' CREATE DATABASE LINK ' || p_dblink_name || ' CONNECT TO ' || p_username || ' IDENTIFIED BY ' || p_password || ' USING ''(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ' || p_host || ')(PORT = ' || p_port || ')) ) (CONNECT_DATA = (SERVICE_NAME = ' || p_service_name || ') ) )''; EXCEPTION WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20001, 'Error creating DBLINK: ' || SQLERRM); END create_dblink; PROCEDURE drop_dblink(p_dblink_name IN VARCHAR2) AS BEGIN EXECUTE IMMEDIATE 'DROP DATABASE LINK ' || p_dblink_name; EXCEPTION WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20002, 'Error dropping DBLINK: ' || SQLERRM); END drop_dblink; END dynamic_dblink; / ``` 4. **使用PL/SQL创建和删除DBLINK**: 使用上述包中的过程来创建和删除DBLINK: ```sql BEGIN dynamic_dblink.create_dblink('my_dblink', 'username', 'password', 'hostname', '1521', 'service_name'); DBMS_OUTPUT.PUT_LINE('DBLINK created successfully.'); END; / BEGIN dynamic_dblink.drop_dblink('my_dblink'); DBMS_OUTPUT.PUT_LINE('DBLINK dropped successfully.'); END; / ``` 通过这些步骤,你可以在Oracle数据库中动态创建和删除DBLINK
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值