1.跳号
意思是指,sybase数据库被非法,如当机,重启,只要不是正常关闭服务,当表id指定identity时候,再次启动sybase,连续的id号,会跳跃相当相当的大。如id = 1,2,3……非法关闭服务后,id跳到50000000000000002。参照一片英文文章解释说,sybase默认会预存一些好。非法关闭,这些信息丢失,造成sybase id只好从预存之后的新id开始。大概就这意思。号跳这么大,基本上这表就算废了。
详细参照:http://www.sybase.com/detail?id=20113
解决办法,删除掉,重新建表。这时候,建表的时候,可以如下建立。
Create table mytable (col1 char(10), col2 datetime, col3 numeric(7,0) identity) with identity_gap = 100
即追加补偿with identity_gap = 100。100的意思是指非法关闭服务器,再次启动,id会跳跃100个,重新开始自增。
这个办法当然有其局限性。在实际应用中,可能会有这样的情况。通过hibernate的mapping文件自动生成数据库表。
这时候,所有的表都没有补偿,这可要了亲命了。这可如何是好呢。
有解决办法:在表建立之初,更新表,加上补偿就行。语法如下:
EXEC sp_chgattribute @tableName,'identity_gap',10因为表众多,一个个加,岂不是很痛苦,于是乎俺写了个存储过程。如下:
经测试,可用。
2.关于备份
一般sybase安装完,由于我们自定义名字,造成备份失败。
常报错: Can't open a connection to site 'SYB_BACKUP'
利用客户端和语句都不行,原因是备份服务起不来。
解决办法如下:
2.
1.找到安装路径下的(如d盘) D:/workTools/sysbase/ASE-15_0/install文件下的RUN_XXX_BS.bat文件 打开编辑
标黑为改正之后的。注意是SSYB.将 D:/workTools/sysbase/ASE-15_0/bin/bcksrvr.exe -SSYB_BACKUP -eD:/workTools/sysbase/ASE-15_0/install/dirful_BS.log
-ID:/workTools/sysbase/ini/sql.ini -MD:/workTools/sysbase/ASE-15_0/bin/sybmbuf.exe -Lus_english -Jcp850
3..进入到找到安装路径下的 D:/workTools/sysbase/ASE-15_0/install 找到文件RUN_LIUCHONG_BS.bat双击打开运行 运行后 再去进行备份数据库。
这样大概就行了。
-------------------------------------
貌似上面方法不太好用。。。。。。。。。。。。试试以下:
1> sp_dropserver SYB_BACKUP
2> go
Server dropped.
(return status = 0)
1> sp_addserver SYB_BACKUP,null,dirful_BS
2> go
Adding server 'SYB_BACKUP', physical name 'dirful_BS'
Server added.
(return status = 0)
不爱用客户端,可以利用如下语句备份,速度挺快:
dump database dataName to dataName_bk
或者 dump database dataName to "c:/dataName_bk"
保存目录要事先建好才行。
默认备份在sysytem32下面。
---------------------------------
将备份导入到一个空的数据库方法(利用客户端比较简单,点击恢复,写入自己备份路径即可。具体此处略)
#用非导入数据库即可
use master
#先查看是否有目标数据库进程活动(如此处的test)
sp_who
#如果有,杀掉。如此处56,没有省略。
kill 56
#改成单用户模式
sp_dboption test, 'single user ',true
#加载备份文件
load database test from "c:/cr_bk"
#单用户模式改回
sp_dboption test, 'single user ',false
#加载的数据库备份需要online才能正常
online database test
如上,一切ok了。
--------------------BCP备份---------------------
写一个脚本取名bcpscript
use cr
go
select 'bcp cr..' + name + ' out c:/cross/' + name + ' -Usa -P -Sdell -c' from sysobjects where type = 'U'
go
---
cmd 的C:/sybase/ASE-15_0/bin下执行:
isql -Usa -P -Sdell -i "c:/bcpscript" -o "c:/bcpout.bat" -w 120
cmd下继续执行生成的bcpout.bat即可。
黑色部分为需要修改项。没啥好说的,一看就懂。