zoukankan      html  css  js  c++  java
  • Sybase常见报错问题处理

    Sybase常见报错问题处理

    1.error (921)

    报错信息:

    Database '%.*s' has not been recovered yet - please wait and try again.
    

    原因分析:Error921错误发生在数据库服务启动进行数据恢复时,由于某些异常导致恢复无法完成,数据库被标记为“suspect”状态。一般数据库的921错误都是由于操作系统异常断电、sybase ASE服务异常关闭导致。
    解决办法:

    1、查看设备及设备地址
    
    sp_helpdevice
    2、建新的日志设备
    
    DISK INIT name = 'DEV_YWST_LOG01', physname = '/home/sybase/data/DEV_YWST_LOG01.dat' , size = '16G' GO
    3、修改数据库状态为-32768
    
    use master go 
    sp_configure 'allow update',1 
    go 
    update sysdatabases set status = -32768 where name = 'YWST' 
    go
    4、停数据库,修改数据库端口,启数据库(或者单用户启动编辑启动脚本在最后一行末尾添加-m)
    
    shutdown with nowait
    5、挂载新的日志空间
    
    alter database YWST log on DEV_YWST_LOG01='16384M'
    6、重建日志
    
    dbcc rebuild_log(YWST,1,1)
    7、将数据库状态改为0
    
    update sysdatabases set status = 0 where name = 'YWST'
    8、重启数据库,查看数据库状态是否为0,YWST日志是否有空间
    
    select * from sysdatabases where name = 'YWST' 
    
    sp_helpdb YWST --YWST日志是否有空间
    9、将数据库端口改回来,重启数据库(单用户的方式去掉-m)
    
    use master 
    go
    sp_configure 'allow update',0 
    go
    
    10、添加数据库属性
    sp_dboption YWST,'abort tran on log full',true
    GO
    sp_dboption YWST,'allow wide dol rows',true
    GO
    sp_dboption YWST,'ddl in tran',true
    GO
    sp_dboption YWST,'deallocate first text page',true 
    GO
    sp_dboption YWST,'select into/bulkcopy/pllsort',true 
    GO
    sp_dboption YWST,'trunc log on chkpt',true 
    go
    
    checkpoint 
    go
    

    2.error (840)

    报错信息:

    error-840
    error-208
    Error (840) Device 'DEV_TEST' (with physical name '/home/sybase/data/DEV_TEST.dat', and virtual device number 13) has not been correctly activated at startup time.  Please contact a user with System Administrator (SA) role.
    Error (208) DB_TEST..test not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output).
    

    原因分析:该报错是数据库找不到对应的设备文件了,可能是路径错误,或者修改了设备路径导致
    解决办法:

    1、创建设备测试
    disk init name='DEV_TEST',size='10M',physname='/home/sybase/data/DEV_TEST.dat'
    disk init name='DEV_TEST_LOG01',size='10M',physname='/home/sybase/data/DEV_TEST_LOG01.dat'
    
    2、创建数据库
    CREATE database DB_TEST ON DEV_TEST='10M' log ON DEV_TEST_LOG01='10M' 
    online DATABASE DB_TEST
    
    
    3、添加数据库属性
    sp_dboption DB_TEST,'select into/bulkcopy/pllsort',true
    GO
    sp_dboption DB_TEST,'trunc log on chkpt',true
    GO
    sp_dboption DB_TEST,'abort tran on log full',true
    GO
    
    4、创建表,向里面插入一条数据
    CREATE TABLE DB_TEST..test(c_bh VARCHAR(100))
    INSERT INTO DB_TEST..test VALUES ('sdf')
    SELECT * FROM DB_TEST..test
    
    
    5、将设备文件迁移到/home/sybase/data/rssddata下面,启动数据库后访问报错840
    上面报错的解决办法
    修改数据库文件的路径,并且将系统表的路径改成和迁移的路径一样,设置sybase有访问权限
    use master 
    GO
     sp_configure 'allow update',0
    go 
    --修改设备路径
    UPDATE sysdevices SET phyname = '/home/sybase/data/rssddata/DEV_TEST1.dat' WHERE name = 'DEV_TEST'
    UPDATE sysdevices SET phyname = '/home/sybase/data/rssddata/DEV_TEST_LOG01.dat' WHERE name = 'DEV_TEST_LOG01'
    
    6、需要重启后正常
    shutdown WITH nowait
    
    7、验证可以查询,并且查询系统表路径也已经修改了。
    SELECT * FROM sysdevices
    

    3.error (691)

    报错信息:

    Error (691) Encountered invalid loqical paqe '0' while accessinq database 'YWST'(6),object 'syslogs'(8),index 'syslogs'(0),partition 'syslogs_8'(8). This is an internal system error.Please contact Sybase Technical Support.
    

    原因分析:

    生产环境的日志用dbcc rebuild_log清理了2次了(参照error921处理),每次清理了隔一周,日志又满了

    执行dump transaction清理还报错,并且数据库开启了日志自动清理auto truncate log

    解决办法:

    经余头指点,是不是因为复制截断点的原因导致的
    使用sysloghsold可以查看复制截断点

    image.png

    image.png

    上面的结果说明开启第二截断点了

    禁用第二截断点,然后在dump清理日志就可以了。

    使用dbcc settrunc(ltm,'ignore')禁用第二截断点

    image.png

    tj2是不用开启截断点的,开启截断点后就会导致日志不清理一直堆积,出现文章前面说的情况,一周左右将空间占满,清理后还是会占满。

    4.error (103)

    报错信息:

    Error (103) The identifier that starts with 'i_xx13233333333333333333333333' is too long. Maximum length is 30.
    

    原因分析:

    ​ 索引的命名太长,导致创建索引失败

    解决办法:

    sybase12.5版本索引名的长度不能超过30字节,sybase15版本以上索引名长度支持:255字节

    查看现场数据库版本是15.7,而且使用:
     dbcc traceon(3604)
     go
    
     dbcc serverlimits
     go
    
    可以看到索引名支持的长度也是255:
      Max length of table name                                                  : 255
      Max length of partition name                                              : 255
      Max length of column name                                                 : 255
      Max length of index name                                                  : 255
    

    如此看来数据库版本和支持的长度都没问题,那为什么会报这个错呢?

    原因和客户端版本还有关系,客户端版本太低导致了报这个错。

    使用isql在服务端登陆然后执行创建索引,没问题。:

    image.png

    总结:

    1、检查数据库版本如果低于15,那么限制就是30字节,所以只能修改索引长度

    2、数据库版本是15以上仍然报错,那么就检查客户端版本sqldbx之类的版本是否低于15

    5.error(1767)

    报错信息:

    [Error Code: 1767, SQL State: S1000]  Number of variable length columns exceeds limit of 254 for allpage locked tables. CREATE TABLE for 'GD_BM_CARD' failed.
    

    解决办法:

    将数据库的页锁模式修改为行锁模式,原因是页锁模式的话支持的列有限制。

    sp_configure 'lock scheme',1,'datarows'
    

    6.error(8233)

    报错信息:

    Error (8233) REORG operation is in progress on the object 'T_HYDJXX' in database 'YWST'. Retry your query later.
    

    原因分析:

    重建索引期间无法更新统计信息,会报错,建议重建索引后更新统计信息。

  • 相关阅读:
    MFC-窗口指针
    MFC-EditControl文本控件(多行输入)一行一行读取
    MFC-文件对话框
    MFC-ToolBar工具栏
    MFC-CMenu菜单
    MFC-访问对话框控件的七种方法
    CC++:scanf的用法
    C/C++:printf的用法
    C/C++:创建第一个程序helloworld!
    NX二次开发-NX客户机与服务器FTP上传下载文件
  • 原文地址:https://www.cnblogs.com/zhangfx01/p/14267684.html
Copyright © 2011-2022 走看看