2008年7月19日星期六

一点SYBASE资料整理

1、timeslice -201,current process infected错误,几天出现一次,需要重
新启动服务,同时还报好多SQL错误
解决方法:打SYBASE补丁

2、错误:Recovering database 'master'
00:00000:00001:2004/03/12 10:05:27.70 server Redo pass of recovery has processed 10 committed and 0 aborted transactions.
00:00000:00001:2004/03/12 10:05:27.81 server No such message: 1105
00:00000:00001:2004/03/12 10:05:27.81 server There is no space available in SYSLOGS for process 1 to log a record for
which space has been reserved. This process will retry at intervals of one minute.
The internal error number is -4
解决方法:第一步:
认为很简单,在启动文件中加-T3607 -m,然后用sa进
dump tran master with no_log或
alter database master on master_dev=xxxM 即可
问题:
启动报:Error: 3475, Severity: 21, State: 7
00:00000:00006:2004/03/12 10:38:55.71 server There is no space available in SYSLOGS for process 6 to log a record for which space has been reserved. This process will retry at intervals of one minute. The internal error number is -4.
用sa登陆进不去:报:
isql -Usa -Pxxx
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.
Msg 3475, Level 21, State 7:
There is no space available in SYSLOGS for process 6 to log a record for which
space has been reserved. This process will retry at intervals of one minute. The

internal error number is -4.
CT-LIBRARY error:
ct_connect(): user api layer: internal Client Library error: Read from t
he server has timed out.
第二步:从没遇到这种情况 再加 -T699(Turn off transaction logging for the entire SQL dataserver)
这次sa可进
执行
alter database master on master_dev=xxxM 报和上面一样的错
dump tran master with no_log也不行
本想bcp系统表再重建master,总是麻烦(懒),还是生产机
第三步: 再加-T7409
执行 alter database master on master_dev=xxxM ok
问题解决
---------来自CU

3、启动时数据库不能回滚
解决方法:第1. 使用 install目录下 的 RUN 文件启动数据库服务器(如果服务已经启动,可跳过此步骤)
第2. 使用isql连接进入数据库服务器
isql -Usa -Ppasswd -S server_name
1>sp_configure 'allow update',1
2>go

1>use master
2>go
1>sp_helpdb DB_NAME
2>
记下此处查询出的数据库选项 (例如:select into/bulkcopy等)

1>begin tran
2>go
1>update sysdatabases set status = -32768 where name = 'DB_NAME' (注意:一定要加上数据库名称条件,切记,最好使用事务)
2>go
如果显示 (1 row affected),commit,否则 rollback
1>commit
2>go

1>shutdown with nowait
2>go

第3. 重新重复步骤1,启动数据库服务器,注意观察日志中是否显示 在 recovery database DB_NAME 时使用bypass状态,如果正常,这种情况下,数据库服务器应该能够完全启动

第4. 使用isql连接进入数据库服务器
isql -Usa -Ppasswd -S server_name
1>use master
2>go
1>dump tran DB_NAME with no_log ( dbcc rebuild_log(DBNAME,1,1) )
2>go

1>update sysdatabases set status = 0 where name = 'DB_NAME' (注意:一定要加上数据库名称条件,切记)
2>go

1>shutdown with nowait
2>go

第5. 重新重复步骤1,启动数据库服务器,注意观察日志中是否显示 recovery database DB_NAME 成功,DB_NAME数据库online

第6. 恢复数据库选项
使用isql连接进入数据库服务器
isql -Usa -Ppasswd -S server_name
1>use master
2>go
1>sp_dboption DB_NAME,'select into',true
2>go
1>use DB_NAME
2>go
1>checkpoint
2>go

如果有其他选项,依法处理

先试步骤四中的 dump tran with no_log 如果不行就用后面括号中那个命令 dbcc rebuild_log(DBNAME,1,1)
dbcc rebuild_log,如果还不行,只有恢复备份了

如果没有备份,只能在重新做1到3步骤,然后使用bcp将数据库中所有数据备份出来,然后重新创建数据库了。

强行截断日志的方法能够清除系统中日志的错误,让数据库正常online,但也有可能造成数据库中用户表甚至系统表的损坏,
所以建议在数据库正常online后进行全库的DBCC检查(比如dbcc checkdb、 dbcc checkalloc等)以确保正常运行。

-----------来自CU

4、SYBASE打补丁
数据库打补丁
下载相应的补丁,上传到机器上的某个目录下(自己确定),例如/ebf
cd /ebf
gzip –S filename(解压缩为*.tar文件)(也可以在window平台上用winzip解压缩
后再上传)
tar –xvf *.tar
在sybase服务停掉的情况下,拷贝解开的所有文件到/sybase目录下
su - sybase
cd /sybase
cp –R /ebf/../* .
chown –R sybase:sybse /Sybase
启动sybase服务,执行脚本:
isql -Usa -P -n -i /sybase/scripts/installmaster -o installmaster.txt
isql -Usa -P -n -i /sybase/scripts/installdbccdb -o installdbccdb.txt
isql -Usa -P -n -i /sybase/scripts/instmsgs.ebf -o instmsgs.txt
通过select @@version 确定补丁安装成功。

------------来自CU

5、AIX上简单的备份脚本
bktime="`date +%y%m%d%H%M`" 备份数据库的时间
bkdbname="master" 要备份的数据库名字
bkuser="`whoami`" 执行备份的系统用户
cd /data 存放备份的目录
bkname="'""/data/${bkdbname}_20${bktime}.dat""'" 备份文件名字
echo "---------backup is beging at ${bktime} by ${bkuser}--------" >> dump.log
echo "--backup name:$bkname--"
echo "--backup time:$bktime--"
echo "--backup dbname:$bkdbname--"
su - sybase -c "isql -Usa -P -SSYBASE <> dump.log

没有评论: