网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

SQLServer2005创建到Oracle10g的链接服务器

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:网学会员鉴于大家对十分关注,论文会员在此为大家搜集整理了“SQLServer2005创建到Oracle10g的链接服务器”一文,供大家参考学习


    链接服务建立:
    *安装oracle10g的客户端:使用netmgr添加本地的服务命名,例如:服务命令:DBLINK;测试通过后进行下一步。
    *建立ODBC数据源(现在已不需要,一般直接用Oracle本地服务名代替,本步可省略)
    为SQLServer2005服务器增加系统数据源:
    [控制面板]=》[管理工具]=》[数据源(ODBC)]=》[系统DNS],添加基于Oracle的数据源:数据源名为:DBLINK(此名称尽量与Oracle的本地服务名一致),并进行连接测试。
    *通过执行SQLServer存储过程来创建链接服务(直接使用Oracle本地服务名,这里本地服务名为CMCC):
    execsp_addlinkedserver@server='LINK2ORACLE',@srvproduct='Oracle',@provider='MSDAORA',@datasrc='CMCC'
    *链接登录配置:
    execsp_addlinkedsrvlogin'LINK2ORACLE',false,'sa','OracleUserName','OraclePassword';
    说明:此语句把远方DBServer的scott用户映射到本地的sa(该用户请根据实际进行更改)。
    链接服务器应用:
    A、查询Oracle数据表方式一(这种方式,当Oracle与SQLServer的数据类型不一致时经常报错,且速度稍慢):
    select*from[LINK2ORACLE]..[ORACLE_USER_NAME].TABLE_NAME;
    我在执行该语句经常报类似错误信息:链接服务器"LINK2ORACLE"的OLEDB访问接口"MSDAORA"为列提供的元数据不一致。对象""CMCC"."OS2_GIS_CELL""的列"ISOPENED"(编译时序号为20)在编译时有130的"DBTYPE",但在运行时有5。
    B、查询Oracle数据表方式二(经试验,这种方式使用起来很顺畅,不报错,且速度几乎和在Oralce中一样快):
    select*fromopenquery(LINK2ORACLE,'select*fromOracleUserName.TableName')
    您可以把openquery()当成表来使用。
    C、举个例子(将Oralce用户CMCC下的基站表OS_GIS_BASESTATION导入到SQLServer2005数据库中):
    select*intoOS_GIS_BASESTATIONfromopenquery(LINK2ORACLE,'select*fromCMCC.OS_GIS_BASESTATION')
    D、更便捷的方式:通过创建同义词进行便捷查询:
    CREATESYNONYMOS_GIS_CELLFOR[ORACLELK]..[CMCC].OS_GIS_CELL;
    select*fromos_gis_cell;
    select*fromos_gis_cellawherea.CellNameisnull;
    注意:涉及Oracle部分的SQL语句,尤其是[ORACLELINK]..[ORACLE_USER_NAME].TABLE_NAME一定要大写,否则会报类似错误:
    消息7314,级别16,状态1,第1行
    链接服务器"ORACLELK"的OLEDB访问接口"MSDAORA"不包含表""CMCC"."OS2_gis_CELL""。该表不存在,或者当前用户没有访问该表的权限。
    附:《链接服务器更详细的用法说明》
    USE[master]
    GO
    EXEC--添加服务
    master.dbo.sp_addlinkedserver--命令名称
    @server=N'TEST',--参数1,连接oracle的数据源名称
    @srvproduct=N'ORACLE',--参数2,连接的数据源的产品名称
    @
    provider=N'MSDAORA',--参数3,访问的接口方式
    @datasrc=N'ERPORA'--参数4,被访问的数据源名称
    GO
    EXEC--添加用户
    master.dbo.sp_addlinkedsrvlogin--命令名称
    @rmtsrvname=N'TEST',--数据源名称
    @locallogin=NULL,--本地登陆
    @useself=N'False',--指定用用户名和密码登陆
    @rmtuser=N'SCOTT',--用户名称
    @rmtpassword=N'a123456'--用户密码
    go
    select*fromTEST..ERP.BAS_DEPT--测试结果
    USE[master]
    GO
    EXEC--从本地SQLServer实例中的已知远程服务器和链接服务器的列表中删除服务器。
    master.dbo.sp_dropserver
    @server=N'TEST',
    @droplogins='droplogins'
    GO
    /*语法
    sp_addlinkedserver[@server=]'server'[,[@srvproduct=]'product_name']
    [,[@provider=]'provider_name']
    [,[@datasrc=]'data_source']
    [,[@location=]'location']
    [,[@provstr=]'provider_string']
    [,[@catalog=]'catalog']
    OracleMicrosoftOLEDBProviderforOracleMSDAORA用于Oracle数据库的SQL*Net别名
    Oracle,版本8及更高版本OracleProviderforOLEDBOraOLEDB.Oracle用于Oracle数据库的别名
    参数
    [@server=]'server'
    要创建的链接服务器的名称。server的数据类型为sysname,没有默认值。
    [@srvproduct=]'product_name'
    要添加为链接服务器的OLEDB数据源的产品名称。product_name的数据类型为nvarchar(128),默认值为NULL。如果为SQLServer,则不必指定provider_name、data_source、location、provider_string和catalog。
    [@provider=]'provider_name'
    与此数据源对应的OLEDB访问接口的唯一编程标识符(PROGID)。对于当前计算机中安装的指定OLEDB访问接口,provider_name必须唯一。provider_name的数据类型为nvarchar(128),默认值为NULL;但如果忽略provider_name,则使用SQLNCLI。SQLNCLI是SQL本机OLEDB访问接口。OLEDB访问接口应以指定的PROGID在注册表中注册。
    [@datasrc=]'data_source'
    由OLEDB访问接口解释的数据源的名称。data_source的数据类型为nvarchar(4000)。data_source作为DBPROP_INIT_DATASOURCE属性传递以初始化OLEDB访问接口。
    [@location=]'location'
    由OLEDB访问接口解释的数据库的位置。location的数据类型为nvarchar(4000),默认值为NULL。location作为DBPROP_INIT_LOCATION属性传递以初始化OLEDB访问接口。
    [@provstr=]'provider_string'
    OLEDB访问接口特定的连接字符串,它可标识唯一的数据源。provider_string的数据类型为nvarchar(4000),默认值为NULL。provstr或传递给IDataInitialize或设置为DBPROP_INIT_PROVIDERSTRING属性以初始化OLEDB访问接口。
    在针对SQL本机客户端OLEDB访问接口创建链接服务器后,可将SERVER关键字用作SERVER=servername/instancename来指定实例,以指定特定的SQLServer实例
    。servername是运行SQLServer的计算机名称,instancename是用户将连接到的特定SQLServer实例的名称。
    [@catalog=]'catalog'
    与OLEDB访问接口建立连接时所使用的目录。catalog的数据类型为sysname,默认值为NULL。catalog作为DBPROP_INIT_CATALOG属性传递以初始化OLEDB访问接口。在针对SQLServer实例定义链接服务器时,目录指向链接服务器映射到的默认数据库。
    */
    /*语法
    sp_addlinkedsrvlogin[@rmtsrvname=]'rmtsrvname'
    [,[@useself=]'useself']
    [,[@locallogin=]'locallogin']
    [,[@rmtuser=]'rmtuser']
    [,[@rmtpassword=]'rmtpassword']
    参数
    [@rmtsrvname=]'rmtsrvname'
    应用登录映射的链接服务器的名称。rmtsrvname的数据类型为sysname,没有默认值。
    [@useself=]'useself'
    确定用于连接远程服务器的登录名。useself的数据类型为varchar(8),默认值为TRUE。
    值为true时指定登录使用自己的凭据连接rmtsrvname,忽略rmtuser和rmtpassword参数。false指定使用rmtuser和rmtpassword参数连接指定locallogin的rmtsrvname。如果rmtuser和rmtpassword也设置为NULL,则不使用登录名或密码来连接链接服务器。
    [@locallogin=]'locallogin'
    本地服务器上的登录。locallogin的数据类型为sysname,默认值为NULL。NULL指定此项应用于连接到rmtsrvname的所有本地登录。如果不为NULL,则locallogin可以是SQLServer登录或Windows登录。对于Windows登录来说,必须以直接的方式或通过已被授权访问的Windows组成员身份授予其访问SQLServer的权限。
    [@rmtuser=]'rmtuser'
    当useself为false时,表示用于连接rmtsrvname的用户名。rmtuser的数据类型为sysname,默认值为NULL。
    [@rmtpassword=]'rmtpassword'
    与rmtuser关联的密码。rmtpassword的数据类型为sysname,默认值为NULL。
    */
    /*语法
    sp_dropserver[@server=]'server'
    [,[@droplogins=]{'droplogins'|NULL}]
    参数
    [@server=]'server'
    要删除的服务器。server的数据类型为sysname,无默认值。server必须存在。
    [@droplogins=]'droplogins'|NULL
    指示如果指定了droplogins,那么对于server,还必须删除相关的远程服务器和链接服务器登录名。@droplogins的数据类型为char(10),默认值为NULL。
    */
    /*
    前提条件
    1)在SQL_SERVER2005服务器上安装Oracle9i的客户端。
    假设安装到F:/oracle目录。
    注意需将ORACLE安装后的目录设为Everyone权限。
    (F:/oracle目录增加AuthenticatedUsers用户,将‘读取和运行’权限取消掉,再勾起来,重启windows!)
    2)配置F:/oracle/product/10.2.0/client_2/network/ADMIN/tnsnames.ora文件。
    配置示例:
    HAODAIFU=
    (DESCRIPTION=
    (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.119)(POR
    T=1521)))
    (CONNECT_DATA=(SERVICE_NAME=haodaifu))
    )
    3)在DOS模式下运行以下命令以便确认ORACLE客户端安装无误。
    a:sqlplusscott/a123456@haodaifu
    b:tnspinghaodaifu
    C:/DocumentsandSettings/Administrator>tnspinghaodaifu
    TNSPingUtilityfor32-bitWindows:Version11.1.0.6.0-Productionon13-12月-200704:36:15
    Copyright(c)1997,2007,Oracle.Allrightsreserved.
    已使用的参数文件:
    D:/99.88.66.software/02.oracle/DB11G/11G/network/admin/sqlnet.ora
    已使用TNSNAMES适配器来解析别名
    Attemptingtocontact(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
    (HOST=192.168.8.122)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=haodaifu))
    )
    OK(10毫秒)
    4)打开控制面板-服务,确认DistributedTransactionCoordinator服务已经启动。
    5)修改注册表HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSDTC/MTxOCI
    OracleOciLib=oci.dll
    OracleSqlLib=orasql9.dll
    OracleXaLib=oraclient9.dll
    6)重启SQL_SERVER服务器
    7)图形创建链接服务器方法--〉
    A)打开SQLSERVERManagementStudio,新建链接服务器。
    B)链接服务器:写上链接服务器的名字,如:test
    C)访问接口:选择MicrosoftOLEDBProviderforOracle
    D)产品名称:写上Oracle
    E)数据源:写上tnsnames.ora文件中配置的服务名,如:haodaifu
    F)访问接口字符串:userid=用户名;password=口令(可以省略)
    G)选择安全性选项页,使用此安装上下文建立连接:
    a.远程登录:scott
    b.使用密码:tiger
    H)确定
    8)SQL的写法有两种
    a)使用T-SQL语法:
    SELECT*FROMLNK1..用户名.表名--注意用户名称,表名称要大写
    b)使用PLSQL语法:
    select*fromopenquery(LNK1,'select*from用户名.表名')
    第二种访问方式比第一种约快50%;第二种访问方式跟直连ORACLE的速度相当;
    第一种访问方式可能会导致一些意外错误,如:该表不存在,或者当前用户没有访问该表的权限。
    如果需要访问的column中使用没有精度的数据类型,这两种查询方式都可能会报错,这是ORACLE的BUG,
    无法修正,只能通过查询语句的特殊处理规避这一问题:
    OLEDB提供程序'OraOLEDB.Oracle'为列提供的元数据不一致。执行时更改了元数据信息。
    
    
  • 上一篇资讯: SQLSERVER2005同步复制技术
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师