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.

原因分析:

重建索引期間無法更新統計信息,會報錯,建議重建索引后更新統計信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM