在项目开发中首次遇到sybase数据库,在经历了一段时间折磨后,把一些经验总结下来,供以后项目开发参考。
一、sybase服务器双网卡
如果sybase服务器是双网卡,在不同的网段里,访问会有问题,需要在sybase安装目录下的ini目录里找到sql.ini,修改如下:

[server] 

master=tcp,192.168....... 

query =tcp 192.168..... 

master=tcp 198.0.0..... 

query=tcp 198.0.0......


重新启动数据库,两个地址就都可以访问了。

二、select into 和insert into的区别

select * into a from a_proxy


将使用代理表的结构新建表a,前提是表a不存在,否则会报错。

insert into a select * from a_proxy


表a已经存在,且和表a_proxy结构一致,而且需要配置手工添加local server

三、CIS导数据
1.客户端配置dsedit ,定义远程数据库连接服务名[servername]
2.isql或sql advantage中执行”sp_addserver abc”
3.建立本地映射

servername.dbname.username.tablename:服务名.数据库名.用户名.表名 

sp_addobjectdef ts_prep_proxy,"servername.dbname.username.tablename","table"


(删除使用:sp_dropobjectdef ts_prep_proxy)

sp_addexternlogin 服务名 本地用户名 远程用户名 远程用户密码


4.创建代理表

create existing table ts_prep_proxy(id int,name varchar(10))


5.导出数据

Select * into my_table from ts_prep_proxy.


业务调用时使用my_table.
如果远程数据库更新,那么需要drop掉代理表,重新建立。

drop table ts_prep_proxy 

create existing table ts_prep_proxy(id int,name varchar(10),age int null) 

drop table my_table 

select * into my_table from ts_prep_proxy


建表语句获取:
运行sql central 链接目标数据库并找到目标表,鼠标右键选择并执行generate ddl。

四、用ISQL联接时出现如下的提示:
The tansaction log in master is almost full,Your transaction is being suspended until space is made available
isql无法联接master库
处理方法:1、正常重启数据库后,isql仍然无法联接MASTER2、备份master.dat3、在启动批文件中加参数-T3607启动(sybase for win32);4、将master库的空间加大2M (alter database master on master=2)5、清除已提交的事务日志(dump tran dbname with truncate_only) 6、去掉-T3607,重启数据库OK

五、预防日志库满的方法
1.为数据库添加device做为日志库。
2.设置数据库的options,把Truncate log on checkpoint选上。

六、DEAD LOCK问题
执行一个大数据量表的更新删除操作时,会发生锁数不够的异常,如果日志库小的话也会发生日志库满的情况。
SQL Server has run out of LOCKS. Re-run your command when there are fewer active users, or contact a user with System Administrator (SA) role to reconfigure SQL Server with more LOCKS.
解决方法:改一下sybase的配置,把number of locks加到30000,如果日志库不够用再加大日志device。

七、BCP方式导入数据
格式为:

bcp dbname.dbo.tablename out c:\temp\filename -Usa -Ppassword -Sservername -c


其中 dbname 为数据库名,tablename 为表名,-U 后为SYBASE 登录名称,-P 后为
SYBASE 登录口令,-S 后为SYBASE 服务名称(即你在dsedit 中设置的Servername),-c 代表使用可见文本方式导出数据
如果为数据恢复只需要将out 替换为 in 即可。