ITPub博客

首页 > Linux操作系统 > Linux操作系统 > sybase EDCA异构访问

sybase EDCA异构访问

原创 Linux操作系统 作者:longqidong 时间:2013-01-15 09:38:57 0 删除 编辑
sybase EDCA网上资料很少,基本上只有官网文档可以参考,而且是英文的,这几天公司搭建EDCA,整理了一下资料。

SYBASE  EDCA组件用于sybase ase访问异构数据库(non-sybase)所必须的,而replication  server要复制异构数据库时,也必须先通过EDCA和异构数据库建立连接,EDCA组件需要单独下载,网上的参考资料几乎为0,主要的参考资料可用sybase官网提供的产品文档。

下面主要记载一下配置过程,主要参考sybase官网产品文档replication server hetergenous edition以及replication server options这两部分文档。

 

1.       安装EDCA组件,ecda1261win32,dc1261client(DCManager和TDSDriver)windows下安装比较简单,选择安装目录,下一步一直点击就OK了。我安装在E:\sybase下面。

 

2.       创建一个新的DirectConnect Server

使用cmd命令操作比较方便,进入DC-12_6安装目录,

cd  E:\sybase\DC-12_6

运行DC_SYBASE这个脚本,这个脚本的作用是配置环境当前环境变量。

DC_SYBASE

然后进入 bin目录

cd  bin

创建新的DC Server是通过AddServer这个脚本创建的,这个脚本的作用是接受两个参数,第一个参数为DC Server名字,第二个参数为port  number,这个端口对外提供,SYBASE ASE最终通过这个服务器的IP和这个port进行异构数据库的访问。AddServer脚本自动创建DC Server的相关配置文件,在DC-12_6目录下会产生一个和DC Server 名字一个的目录。里面存放有配置文件,和日志。

 AddServer LQDTEST 10030

   创建成功后,这个DC Server会自动运行起来,此时需要关闭进一步配置。

   按键 Ctrl + C 。

 

  修改配置文件 dcany.cfg、server.cfg以及snrf.tbl

  Dcany.cfg内容如下:

 [Service Library]

{Logging}

LogSvcLibStatistics=0

{Client Interaction}

SvclibDescription=Access Service Library for ODBC.  以上为创建完成自动产生,不必修改

EnableAtStartup=yes

[LQDSQL] 这个是访问服务名字,可任意命名。

{ACS Required}

ConnectionSpec1=LBABY_SQL2   这个是数据源的名字,在ODBC中进行配置

 

server.cfg只要修改一项即可:

ServiceRedirectionFile=snrf.tbl  制定服务访问名字的参数文件

 

Snrf.tbl配置内容如下:

         *       *       ServiceName

*       *       *       LQDSQL      这个名字对应dcany.cfg中的服务访问名字(这个必须配置,之前因为漏了这个没配置,导致sybase ase中,可用建立远程服务器,而且可以连通,但是无法创建代理表)

配置完成后保存退出,在命令行中重新启动刚刚创建DC Server

DCStart  -SLQDTEST

这样就配置创建完成。

 

最后测试一下配置是否OK,cmd中操作

isql  -Usa  –P  -SLQDTEST  这种不需要密码的只适合于ODBC驱动类型为DC SQL Server wire protocol

>select @@sqldbmsname

>go

如果显示上图信息,配置OK.

接下来就可以用isql 操作MSSQL了

>select * from lqdtest.dbo.test

>go

 

如果驱动类型配置为SQL server的,则需要用户名和密码同时提供

Isql –Usa –Payd123456 -SLQDTEST

 

配置的驱动类型不同,在sybase ase中添加远程服务器中有一步是需要添加需要一个externlogin ,如果是ODBC配置为 SQL server类型,则需要加上远程用户的密码,

sp_addexternlogin LQDTEST,sa,sa,password

 如果是DC SQL server wire protocol 类型的,则不需要加上密码

sp_addexternlogin LQDTEST,sa,sa

 

ODBC数据源的配置,MSSQL要选择驱动类型为DC SQL Server wire protocol。配置

点击test connect

表示配置成功。

 

上面是ODBC以及DC server wire protocol 方式的配置。

 

下面是EDCA for oracle 的配置

 创建DCO 连接,使用 DCOConfig.bat脚本,这个脚本的作用是,根据用户输入的参数创建一个服务 ,也就是产生一个启动参数文件,也可以自己根据示例参数文件编写启动参数文件。

这个文件在 DCO安装目录下面的install下面,

cmd 中运行

DCOconfig

根据提示输入即可,server_name,port,tnsnames.ora的路径,错误日志文件路径,tnsnames.ora中对应的oracle连接名,oracle中用户名。

创建完成后,会自动把server_name,port写入到接口文件中。而且会自动启动起来。在install目录下,会自动生参数文件,日志文件,参数文件名字和server_name必须一致。而且会自动生成一个服务启动脚本。RUN_servername.bat

再次启动可以直接运行这个脚本,或者使用bin/dcoracle.exe –Sservername也可以启动。

 

在sybase ase中创建oracle远程数据库,在指定远程用户的时候,必须加上用户的密码,

Eg:

 Sp_addserver ORCLDC,direct_connect,ORCLDC

 Sp_serveroption ORCLDC,’rpc security model A’,true

 Sp_addexternlogin ORCLDC,sa,lqd,ayd123456

 其中lqd和ayd123456是在oracle中有效的用户名和密码

 

 

 

 

后续,sybase ase访问远程数据库的方式

 

exec  sp_addserver  LBABY_SQL, direct_connect, LBABY_SQL

 

exec  sp_serveroption  LBABY_SQL, 'rpc security model A', true

 

go

exec  sp_addexternlogin LBABY_SQL, sa, sa

go

 

sybase ase可以通过replication server进行远程数据库的访问,远程数据库包括MSSQL,oracle,db2,

ASE,sybaseiq 等等,如果远程数据库是ASE或者IQ的话,直接通过接口文件而不需要replicatio server

就可以访问远程数据库。而其他数据库产品必须通过replication server来访问。

 

其他数据库在replication server 上进行端口映射,sybase ase通过这个replication server的IP和相

应端口进行访问,也就是把replication server的IP和端口写到接口文件中,(windows平台是sql.ini,

*uix平台是interfaces)。

windows下通过配置 【Open Client 目录服务编辑器】进行接口文件的配置,注意下面参数的写法,IP逗号 端口。

%_GJHEW)GKC_~O3YWRW9%S6

多个远程数据库,配置多个即可。配置好IP和port后,要注意ping一下,必须要能ping通。

 

接着就是配置新建远程服务 sp_addserver 。(当然也可以通过,可视化界面,但是感觉有点麻烦,建好之后还需要进行调整)

 

sp_addserver server_name,’服务器类’,网络名

其中server_name就是给这个远程服务器起个名字,任意,只要不重名即可。

   服务器类:就是以什么方式连接访问远程数据库,类型包括以下:

WK]ZM_[(E~2TD~6$$2SG4_X

通过replication server访问的事 direct_connect

 

网络名:对应接口文件的一项,注意大小写。

 

eg:通过replication server 访问MSSQL,本地建立网络名是LBABY_SQL,

    sp_addserver mssql,direct_connect,LBABY_SQL

 

sp_addserver 远程服务器逻辑名称,类型,本地DSEDIT配置的服务器名称 

sp_addserver mssql,direct_connect,LBABY_SQL

 

sp_serveroption mssql, "timeouts", true

sp_serveroption mssql, "rpc security model A", true

 

 

接下来设置远程登录用户

sp_addremotelogin remote_server_name,local_login,remote_login

    local_login及remote_login均为服务器上已经存在的login

    local_login跟remote_login口令应该一致,如果不一致,在

sp_addexternlogin mssql,sa,sa

 

 

 

 

 

 

讨论]sybase 代理表的实现与测试

SYBASE如何跨server操作?

1. 在远程服务器及本地服务器

sp_addserver local_server_name,local

重新启动保证设置生效

2. 在本地主机中使用 dsedit添加远程服务器的接口

   注:在AIX或者LINUX系列系统中,修改interfaces文件(注意保存原来的interfaces的备份)

3. 在本地服务器上添加远程服务器名称

sp_addserver remote_server_name,ASEnterprise,server_net_name

2,3步骤应该在本地服务器及远程服务器两方都进行添加

4. 设置远程服务器选项

exec sp_addserver 远程服务器逻辑名称,类型,本地DSEDIT配置的服务器名称

exec sp_addserver sybcdsrv, sql_server, ase12

exec sp_serveroption sybcdsrv, "timeouts", true

exec sp_serveroption sybcdsrv, "net password encryption", false

exec sp_serveroption sybcdsrv, "readonly", false   (只对CIS生效)

exec sp_serveroption sybcdsrv, "rpc security model A", true

go

5. 增加远程用户与本地用户的映射关系

sp_addremotelogin remote_server_name,local_login,remote_login

local_login及remote_login均为服务器上已经存在的login

local_login跟remote_login口令应该一致,如果不一致,在

Open Client Client-Library编程中可以使用 ct_remote_pwd 命令进行设置

但在isql 及 bcp 中不允许指定 rpc 口令

另外,一旦到远程服务器的连接建立成功,在退出当前会话前,不论远程服务器是否对相关remote_login进行了口令更改,远程存储过程的调用及其他远程操作都可以进行。

5. 设置服务器之间的信任关系

sp_remoteoption remote_server_name,local_login,remote_login,trusted,true

6. 调用远程存储过程

isql -Usa -P -Slocal_server_name

1>;exec remote_server_name.database_name.owner_name.procedure_name

2>;go

另外可以在 isql 中使用connect remote_server_name命令连接到远程服务器上,以测试远程服务器是否配置正常、网络是否正常、远程服务器是否接受连接。

除了远程存储过程调用方式,也可以采用其他一些方式对远程服务器上的数据进行更改,其中包括建立代理表,使用sp_remotesql等方式。具体操作方法请参见ASE命令参考手册及相关文档。

sp_remotesql ase12,"insert into pubs2..tr1 values(09,'test remote sql')"

其他信息:

还可以使用代理表

所对应远程服务器表 信息 在系统表 sysattributes 中 char_value 字段

SYBASE如何跨server操作?

例子两台ASE服务器名称为 Server1,Server2,需要在Server1中建立代理表,并通过Server1上的存储过程对Server1自身及Server2中表进行更新

1. 建立代理表

    在Server2数据库pubs2建立表t_testproxy

    create table t_testproxy (id int,name char(10))

    在Server1数据库test中添加代理表信息

     use test

     go

     create proxy_table t_testproxy at "Server2.pubs2.dbo.t_testproxy"

     代理表名与原表名可以不同

     Server1上查看代理表 信息如下:

Name                           Owner                          Object_type                      

----                           -----                          -----------                     

t_testproxy                    dbo                            user table                      

Data_located_on_segment        When_created                  

-----------------------        ------------                  

default                        Nov 28 2002 11:59AM           

Column_name     Type            Length      rec        Scale       Nulls       Default_name    Rule_name       Access_Rule_name               Identity   

-----------     ----            ----------- ----------- ----------- ----------- ------------    ---------       ----------------               -----------

id              int                       4        NULL        NULL           0 NULL            NULL            NULL                                     0

name            char                     10        NULL        NULL           0 NULL            NULL            NULL                                     0

exp_row_size reservepagegap fillfactor  max_rows_per_page identity_gap

------------ -------------- ----------- ----------------- ------------

           1              0           0                 0            0

concurrency_opt_threshold

-------------------------

                        0

Object is Remote/External

-------------------------

presales.pubs2.dbo.t_testproxy           //可从此处看出代理表所指向的真正对象

Object created with 'existing' option

Object does not have any indexes.

No defined keys for this object.

Object is not partitioned.

Lock scheme Allpages

The attribute 'exp_row_size' is not applicable to tables with allpages lock scheme.

The attribute 'concurrency_opt_threshold' is not applicable to tables with allpages lock scheme.

2. 代理表测试

    Server2上插入数据:

    insert into t_testproxy values(1,'Server2')

    Server2上插入数据:

    insert into t_testproxy values(2,'Server1')

    Server1上查询数据:

    select * from t_testproxy

    id          name      

----------- ----      

          1 Server2   

          2 Server1    

3. 视图测试

     在Server1上test数据库中建立用户表t_testproxyview

     create table t_testproxyview (id int,address varchar(30)

     插入测试数据

      insert into t_testproxyview (1,'Chengdu')

      insert into t_testproxyview (2,'Sichuan')   

      insert into t_testproxyview (3,'sky')

     建立视图

      create view v_proxy as select a.*,b.address from t_testproxy a,t_testproxyview b

      where a.id = b.id

       查询视图

select * from v_proxy

id          name       address                       

----------- ----       -------                       

          1 Server2    Chengdu                       

          2 Server1    Sichuan                       

         视图的更新

         update v_proxy set address = 'test' where id = 2    更新本地表 执行成功 

         update v_proxy set name = 'test' where id = 2    更新远程表 报告错误如下:

The optimizer could not find a unique index which it could use to scan table 'pubs2.dbo.t_testproxy' for cursor 'C11'.

          必须为远程表建立 主键或者唯一索引

          Server2上执行(不能在Server1上为代理表建立主键):

           alter table t_testproxy add constraint pk_t_testproxy primary key (id)

          update v_proxy set name = 'test' where id = 2 再次更新代理表,成功

id          name       address                       

----------- ----       -------                        

          1 Server2    Chengdu                       

          2 test       test                          

        

          对试图中本地表及代理表同时作更新

          update v_proxy set name = 'test1',address = 'test1' where id = 1

          报告错误:

          View 'v_proxy' is not updatable because the FROM clause names multiple tables.

         

          Sybase不支持在视图中一次更新多表

4. 存储过程测试

        在Server1上

         create proc p_proxy(@id int)

         as

         begin

         begin tran

         update t_testproxy set name = 'test3' where id = @id  --更新代理表

         update t_testproxyview set address = 'test3' where id = @id

         commit

         end

        

         exec p_proxy 2

id          name       address                       

----------- ----       -------                       

          1 Server2    Chengdu                        

          2 test3      test3       

          结论:可以在存储过程中对本地及远程表进行操作,并利用事务来保证一致性

需要注意一点的是:建代理表时,远程表的结构数据已经存储在了本地,并且不会检测该表的结构是否发生改变,因此远程表的结构发生改变时,本地是不知道的,需要重新创建代理表,相当于重新刷新本地的存储的结构.

5、代理表的索引问题。

      如上注意中提到,修改表结构后,需要重新建立代理表,代理表的索引会根据源表的索引一起建立成功。另外一种方法:手工建立临时表;在源表中添加索引后,手工在临时表中添加。

ALTER TABLE temp_c**_*est

ADD

CONSTRAINT id_id RIMARY KEY CLUSTERED (id)

 

 

 

 

 

 

 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22418990/viewspace-752665/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: unix at命令详解
请登录后发表评论 登录
全部评论

注册时间:2009-08-26

  • 博文量
    94
  • 访问量
    474892