祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 5708|回复: 1

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

[复制链接]

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

[复制链接]
chj3851

主题

0

回帖

52

积分

注册会员

积分
52
贡献
在线时间
小时
2007-9-11 21:09:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
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 字段
共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
chj3851 楼主

主题

0

回帖

52

积分

注册会员

积分
52
贡献
在线时间
小时
2007-9-11 21:10:08 | 显示全部楼层
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) 
 
有什么问题,找到解决方法后再添加[em05]
共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-11-22 21:26 , Processed in 0.035163 second(s), 8 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表