Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103789643
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-15 13:19:54

    来源:赛迪网技术社区    作者:yuanyang

  使用SQL的本地服务名为TG4MSQL,可以任意写,SID必须是Listiner.ora中指定的那个SID_NAME,PORT也必须是监听中指定的PORT,主机等都要符合一致。 到此为止,我们把透明网关大致已经配置好啦,如果要访问SQL,还要使用数据库链才方便。

4 在SQL中创建登录帐号xzh口令xzh,使用可以访问PUBS数据库。

  
  CREATE DATABASE LINK sql CONNECT TO xzh IDENTIFIED BY xzh
  
  USING ‘TG4MSQL’
  

这里的USING ‘TG4MSQL’是tnsnames.ora中配置好的本地服务名,sql是我们以后要引用的数据库链名。

  
  SQL>SELECT * FROM sales@sql
  

如果有数据返回,表示我们访问SQL数据库的通道已经建成,请大胆使用吧,但对远程异构数据库不充许进行DDL操作。

  
  SQL>CREATE TABLE all_users@tg4msql FRIN all_users;
  

ERROR 位于第 1 行。ORA-02021: 不允许对远程数据库进行 DDL 操作。

二 SQL访问ORACLE的方法

1 通过行集函数OPENDATASOURCE

  
      OPENDATASOURCE ( provider_name, init_string )
  
    SELECT *
  
  FROM OPENDATASOURCE(
  
       'MSDAORA',
  
       'Data Source=xzh.oracle;User ID=POS;Password=POS')..POS.A0325

MSDAORA是OLEDB FOR ORACLE的驱动,初始化字符串指定本地服务名、用户名、口令。然后引用表中数据时要以服务器..用户名.表名。注意一定是四部分组成,用户名与表名一定要大写。

  
      SELECT * INTO PUBS.DBO.A0325 FROM 
  
  OPENDATASOURCE(
  
       'MSDAORA',
  
       'Data Source=xzh.oracle;User ID=POS;Password=POS' )..POS.A0325
  

将ORACLE中POS模式的A0325导入SQL的PUBS数据库。

2 通过SQL的链接服务器引用ORACLE的数据

查看已经存在的链接服务器:

  
    SELECT*FROM SYSSERVERS
  

添加链接服务器到SQL:

  
    EXEC SP_ADDLINKEDSERVER
  
    @server = 'ORCL',  ORCL是SQL中链接服务器名称
  
    @srvproduct = 'Oracle',  Oracle    固定的            
  
    @provider = 'MSDAORA',  MSDAORA  固定的
  
    @datasrc = 'xzh.oracle' DataSrc   本地服务名
  
    EXEC SP_DROPSERVER ‘ORCL’删除链接服务器
  

在这里声明一下,如果现在就访问ORACLE肯定不能,因为没有提供登录ORACLE的用户名/口令EXEC SP_ADDLINKEDSRVLOGIN 'ORCL', false, 'sa', 'POS', 'POS'Sa是SQL本地登录帐号,POS/POS是ORACLE的登录帐号,但这句话对我们要达到的目的没有帮助。

  
  SELECT * FROM ORCL..POS.A0325
  

还是四部分组成,注意事项同上,为什么不行呢,本人一直在寻找解决办法,最后发现通过SQL语句没法解决,只有打开SQL的企业管理器。

  
  SELECT * FROM ORCL..POS.A0325  --这次终于OK。
  
  SELECT * FROM OPENQUERY(ORCL, 'SELECT * FROM POS.A0325')
  

3 使用SQL的OPENROWSET函数

  SELECT a.*
  
  FROM OPENROWSET('MSDAORA',
  
 'xzh.oracle';'POS';'POS', POS.A0325) AS a ORDER BY a.ID
  

有些地方要用别名才能引用,请大家注意。

4使用ODBC的方式

  SELECT A.*
  
  FROM OPENROWSET('MSDASQL','ORCL_ODBC';'POS';'POS',
  
    POS.A0325) AS A
  
  ORDER BY A.ID
  

ORCL_ODBC是ORACLE的ODBC数据源,创建ODBC不用我说吧,以上所有代码在SQL QUERY ANALYZE 中通过。

三 总结

关于SQL访问ORACLE有四种方式,其中通过ODBC与链接服务器的方式做起来难度较大,对手新手会麻烦一些,使用OLE DB FOR ORACL驱动时,有OPENDATASOURCE与OPENROWSET函数可以使用,都很方便,笔记喜欢使用后者,交待一下,在数据存取方面,这四种方面效率相当。

阅读(335) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~