碰到这种情况,常会出现能查询数据,但无法更新数据,启动事务等。在代码中跟踪可以发现,连接能够打开,但事务却无法开启。常会提示“Connection to Sybase server has been lost. All active transactions have been rollbacked”的错误信息。
解决办法:
若是开发数据库,则直接清除日志即可。 若是正式数据库:建议备份当前日志 再清空日志,扩日志设备及日志数据库。清空日志的语句为『dump transaction database_name with no_log 』
2.Sybase中文乱码
出现这种情况的原因是sybase的服务器字符集不支持中文或是客户端的字符集与服务端字符集不一致。可以考虑更改sybase的默认字符集。在Sybase12.5的版本中支持中文的字符集有CP936、EUCGB、UTF-8和GB18030。这里我们针对Sybase服务器字符集不支持中文给出解决办法:
解决办法(安装cp936字符集):
假设sybase的安装路径为"D:\Sybase"。
(1)D:\>cd \sybase\charsets\cp936
(2) D:\sybase\charsets\cp936> charset -
(3) 在InterActiveSQL中执行『select name,id from syscharsets』,需注意的是这里要选择在“master”数据库下执行,第4步也是。找到name为cp936的ID,假定是171。
(4)在InterActiveSQL中执行『sp_configure 'default character set id',171』
(5) 重启Sybase服务两次。因为第一次启动后会自动结束掉,所以需要重启第二次。
3.Sybase数据库整个库导出导入
导出:【declare @filename varchar(30)
select @filename='E:\BCP\bf_' + Convert(varchar(10),getdate(),110) + '.dat'
dump database ExamSysDB to @filename
go 】
导入:【load database pubs2
from 'E:\bcp\bf_080101.dat'】
4.bcp导入导出数据
导入到ExamSysDB数据库的TB_USER表中:【bcp ExamSysDB..TB_USER in C:\BCP\SqlServerOut\TB_USER.bcp -Usa -P -SSyDevserver -Jcp936 -c 】
导出ExamSysDB数据库的TB_USER表的数据:【bcp ExamSysDB..TB_USER out C:\BCP\SqlServerOut\TB_USER.bcp -Usa -P -SSyDevserver -Jcp936 -c 】
批量导入数据的参考SQL【set nocount on
use ExamSysDB
go
select 'bcp ExamSysDB..' + name + ' in C:\BCP\SqlServerOut\'
+ name + '.bcp -Usa -P -SDEVSERVER -Jcp936 -c '
from sysobjects
where type='U' and name like '%TB_%'
go】
批量导出数据的参考SQL【set nocount on
use ExamSysDB
go
select 'bcp ExamSysDB..' + name + ' out C:\BCP\SqlServerOut\'
+ name + '.bcp -Usa -Pdbadmin -SDevserver -c '
from sysobjects
where type='U' and name like '%TB_%'
go】