sybase 常见问题
------------------------0.00下面是设置字符集的过程:中文乱码问题----------------------------------------------
1、安装完Sybase后,如果要想设置字符集为CP936,就必须先安装该字符集,因为Sybase默认的字符集表中并没有该字符集,安装步骤如下:
(这里 SYBASE的安装路径为c:\sybase)
1.c:\>;cd \sybase\charsets\cp936
2.c:\sybase\charsets\cp936>; charset -Usa -Psa_pass -Sserver_name binary.srt cp936通过上述命令就成功将CP936字符集安装表Sybase的系统字符集表中
但必须重启Sybase服务两次才能看到结果,可以通过查看 master数据库中的syscharsets表查看是否已经安装成功,我们可以看到已经安装成功了:select name,id from syscharsets;
1002,171,0,1,’cp936’, ’CP936 (Simplified Chinese).’,’…’
2、看到CP936的编号为171,我们需要在Sybase的属性中设置系统字符集为该ID,如下图所示:sp_configure "default character set id",171
---------------------------------------0.01解决sybase 字符大小写敏感问题----------------------------------------------------------------------------
(我们默认字符集为cp936)因为我们默认安装了nocase_cp936 所以不用安装修改默认排序即可(如果没装需安装对应的字符集的大小写不敏感排序crt类似:c:\sybase\charsets\iso_1>charset -Usa -P -Stest nocase.srt iso_1)
sp_configure “default sortorder id”,52
用sp_helpsort查看:结果为:
Character Set = 171, cp936
CP936 (Simplified Chinese).
Class 2 Character Set
Sort Order = 52, nocase_cp936
General-purpose case-insensitive dictionary ordering
------------------------0. 删除数据库--------------------------
USE master
go
drop database test
go
------------------------1.创建数据库-------------------------------------------------
1.创建数据库
--步骤1================================ 使用master库
use master
go
--步骤2============================ 创建设备
disk init
name="coe", ---设备名
physname="C:\sybase\data\coe.dat", ---设备存储路径
size="100M",dsync = 'false' ---设备大小及向备盘上写数据时,是否需上catch缓冲,dsync=true的时候不通过OS的buffercache,直接写盘,当然会慢,dsync=false的时候,是会使用OS的buffercache,但可靠性会差一些
go
--步骤3====================== 创建日志设备
disk init
name="coe_LOG",
physname="c:\sybase\data\coe_LOG.dat",
size="50M",dsync = 'false'
go
--步骤4 ====================== 创建数据库
CREATE DATABASE coe
ON coe = '100M'
LOG ON coe_LOG = '50M'
go
---------------------2.数据库备份及恢复--------------------------------------------------
(1):备份(恢复)单表 (命令行 不是isql)只需要使用sybase提高的bcp命令就可以了:
bcp的命令格式:
bcp 数据库名..表名 in/out 文件名字 -Usa –Ppassword -S SERVERNAME –c(in 为恢复 out 为备份)
从'aws'库备份单表('test')例子:
bcp aws..test in c:/t.txt -Usa -P -S -c
------------------------------
bcp 导入问题
恢复单表('test')到'bk'库例子:
bcp bk..test in c:/t.txt -Usa -P -S -c
可能遇到问题:You cannot run the non-logged version of bulk copy in this database. Please check with the DBO.
原因是select into/bulkcopy没有打开
方法:
use master
go
sp_dboption YourDB,”select into/bulkcopy”,true
go
use YourDB
go
checkpoint
go
(2):备份整个库
1:确定启动了sybase 备份服务 'Sybase BCKServer _ TESTVMWIN2003_BS'
备份:
isql -U sa -P -S 192.168.0.25:5000
Dump database aws to 'c:aws.dump'
go
-----------------
恢复整个库:
isql -U sa -P -S 192.168.0.25:5000
load database 数据库名 from 'c:/JbpmTAStandard.dump'
(确保空间放得下)
恢复后要用命令激活一下:
isql>online database 数据库名字
isql>go
----------------------------3.添加用户并授权------------------------------------------------
sp_addlogin zz, zz123456
go
sp_adduser zz
go
sp_role "grant",sa_role,zz
go
------------------解决日志满了的问题 导致建数据库 简表等都建不了 卡住-------------------------
Can't allocate space for object 'syslogs' in database 'master' because 'logsegment' segment is full/has no free extents.
If you ran out of space in syslogs, dump the transaction log. Otherwise, use ALTER DATABASE or sp_extendsegment to increase size of the segment.
解决:
dump tran master with no_log
go
dump transaction master with truncate_only
go
------------------------常用工具语句-----------
----------------查看谁在链接sybase -------------
select spid,hostname,loggedindatetime,ipaddr from master.dbo.sysprocesses where db_name(dbid)='数据库名'
---------------杀掉指定的 sybase连接--------------
select 'kill '+convert(varchar,spid) from master.dbo.sysprocesses where db_name(dbid)='数据库名'
-------------------
----------------查看sybase 所有表-------------------------
Select * from sysobjects where type='U'
可查看已安装的所以字符集
select name,id from syscharsets
-----------可设置默认字符集------------------
sp_configure "default character set id",字符集编号
-------查看客户端编码--------
select @@client_csname
--------查看服务端编码----------------------
sp_helpsort
---sybase 字符串转日期-----
select * from wf_task_log where wfid=12037 and endtime >= convert(datetime, '2012-09-28 ') and endtime<=convert(datetime,'2012-09-28 ');
sybase 外连接写法
select * from a,b
where a.id *=b.id 查出a的所有记录 没匹配的b b为null
类似oracle的写法
select * from a,b
where a.id =(+) b.id
----------------查看sybase 版本---------------------
select @@version
------------------解决DBArtisian 查询sybase乱码问题-----------------------
我们的sybase 是cp936(简体中文) 编码 option ->connection ->编码改为cp936