1.跳号

意思是指,sybase数据库被非法,如当机,重启,只要不是正常关闭服务,当表id指定identity时候,再次启动sybase,连续的id号,会跳跃相当相当的大。如id = 1,2,3……非法关闭服务后,id跳到50000000000000002。参照一片英文文章解释说,sybase默认会预存一些好。非法关闭,这些信息丢失,造成sybase id只好从预存之后的新id开始。大概就这意思。号跳这么大,基本上这表就算废了。


解决办法,删除掉,重新建表。这时候,建表的时候,可以如下建立。




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
因为表众多,一个个加,岂不是很痛苦,于是乎俺写了个存储过程。如下:
/*This operation is being done in a transaction. 
Please ensure that in case of error the transaction is rolled back.*/
begin tran 
drop procedure dbo.gapUpdate
go
create procedure dbo.gapUpdate
/* [ (@param_name datatype [= default] [output] ), ... ] */
as
    declare cur_ins CURSOR for 
    select sysobjects.name from sysobjects where name like '%' and type='U'
    declare @tableName varchar(200)
begin
    open cur_ins
    fetch cur_ins into @tableName
    while @@sqlstatus=0
        begin
            EXEC sp_chgattribute @tableName,'identity_gap',10
        fetch cur_ins into @tableName
        end
    close cur_ins
end
go
if @@error = 0 
    commit tran 
else 
    rollback tran
go经测试,可用。
2.关于备份
一般sybase安装完,由于我们自定义名字,造成备份失败。
常报错: Can't open a connection to site 'SYB_BACKUP'

利用客户端和语句都不行,原因是备份服务起不来。
解决办法如下:
1.找到安装路径下的(如d盘)   D:/workTools/sysbase/ASE-15_0/install文件下的RUN_XXX_BS.bat文件 打开编辑
2.
将 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

标黑为改正之后的。注意是SSYB.



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即可。

黑色部分为需要修改项。没啥好说的,一看就懂。