Sybase常见问题
生活随笔
收集整理的這篇文章主要介紹了
Sybase常见问题
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.?Sybase數(shù)據(jù)庫(kù)日志滿
??? 碰到這種情況,常會(huì)出現(xiàn)能查詢數(shù)據(jù),但無(wú)法更新數(shù)據(jù),啟動(dòng)事務(wù)等。在代碼中跟蹤可以發(fā)現(xiàn),連接能夠打開(kāi),但事務(wù)卻無(wú)法開(kāi)啟。常會(huì)提示“Connection to Sybase server has been lost. All active transactions have been rollbacked”的錯(cuò)誤信息。
???解決辦法:
??? 若是開(kāi)發(fā)數(shù)據(jù)庫(kù),則直接清除日志即可。? 若是正式數(shù)據(jù)庫(kù):建議備份當(dāng)前日志??再清空日志,擴(kuò)日志設(shè)備及日志數(shù)據(jù)庫(kù)。清空日志的語(yǔ)句為『dump ? transaction ? database_name ? with ? no_log?』
2.Sybase中文亂碼
??? 出現(xiàn)這種情況的原因是sybase的服務(wù)器字符集不支持中文或是客戶端的字符集與服務(wù)端字符集不一致。可以考慮更改sybase的默認(rèn)字符集。在Sybase12.5的版本中支持中文的字符集有CP936、EUCGB、UTF-8和GB18030。這里我們針對(duì)Sybase服務(wù)器字符集不支持中文給出解決辦法:
??解決辦法(安裝cp936字符集):
?? 假設(shè)sybase的安裝路徑為"D:\Sybase"。
?? (1)D:\>cd \sybase\charsets\cp936
???(2)?D:\sybase\charsets\cp936> charset -Usa -Psa_pass -Sserver_name binary.srt cp936
???(3)?在InterActiveSQL中執(zhí)行『select name,id from syscharsets』,需注意的是這里要選擇在“master”數(shù)據(jù)庫(kù)下執(zhí)行,第4步也是。找到name為cp936的ID,假定是171。
????(4)在InterActiveSQL中執(zhí)行『sp_configure 'default character set id',171』
?????(5) 重啟Sybase服務(wù)兩次。因?yàn)榈谝淮螁?dòng)后會(huì)自動(dòng)結(jié)束掉,所以需要重啟第二次。?? 3.Sybase自增字段跳號(hào)處理 跳號(hào)原因及影響:
???? 在Sybase數(shù)據(jù)庫(kù)中如果數(shù)據(jù)庫(kù)在開(kāi)啟的情況下,因?yàn)榉钦5脑?#xff08;死機(jī)、斷電)而導(dǎo)致數(shù)據(jù)庫(kù)服務(wù)進(jìn)程強(qiáng)制結(jié)束。
那么自動(dòng)增長(zhǎng)的字段將會(huì)產(chǎn)生跳號(hào)的情況,再往數(shù)據(jù)表里面插入記錄時(shí),自增字段會(huì)跳到一個(gè)相當(dāng)大的值上面,以至于主鍵的自增值極有可能被用盡,或由于數(shù)值太大,應(yīng)用程序中的數(shù)據(jù)類(lèi)型如int型等已無(wú)法容下這么大的值,而無(wú)法在程序里面進(jìn)行相關(guān)的操作。
解決辦法:
如果還未發(fā)生過(guò)跳號(hào)情況,可按如下辦法解決:
??? 1.執(zhí)行【 select 'sp_chgattribute ' + name + ', ''' + 'identity_gap' + '''' + ', 60 go'
????? from sysobjects
????? where type='U'】。其中的60是憑感覺(jué)給的一個(gè)值,一般來(lái)說(shuō)這個(gè)值越大性能越好,但越大,再發(fā)生數(shù)據(jù)庫(kù)服務(wù)進(jìn)程非正常結(jié)束時(shí),所跳的號(hào)也就越大。
????2.對(duì)1執(zhí)行的結(jié)果,拷貝到SQL編輯區(qū)域,再執(zhí)行。
若已經(jīng)發(fā)生跳號(hào),需要將表中數(shù)據(jù)導(dǎo)出,再重建數(shù)據(jù)表,再執(zhí)行1和2。再導(dǎo)入數(shù)據(jù)。
后話:
??? Sybase自增字段有個(gè)最大的問(wèn)題是,再移植數(shù)據(jù)庫(kù)時(shí),如果是按自增主鍵進(jìn)行關(guān)聯(lián)的數(shù)據(jù)表,在數(shù)據(jù)重新導(dǎo)入后,可能出現(xiàn)主從表的外鍵無(wú)法關(guān)聯(lián)的情況,我是開(kāi)始時(shí)沒(méi)預(yù)料到這樣的情況,現(xiàn)木已成舟,沒(méi)有辦法了。 以后還是要慎用自增字段作為主鍵。 ?4.從sybase數(shù)據(jù)庫(kù)中讀取圖片無(wú)法完整顯示 原因: 由于其存取大文件的默認(rèn)大小為32K,所以導(dǎo)致數(shù)據(jù)不能全部讀出,所以大于32k的圖片就只能顯示部分。 解決辦法 非常簡(jiǎn)單,只需要在你響應(yīng)的sql語(yǔ)句之前,再加上【set ? textsize ? 3000000??】就OK了。
??? 碰到這種情況,常會(huì)出現(xiàn)能查詢數(shù)據(jù),但無(wú)法更新數(shù)據(jù),啟動(dòng)事務(wù)等。在代碼中跟蹤可以發(fā)現(xiàn),連接能夠打開(kāi),但事務(wù)卻無(wú)法開(kāi)啟。常會(huì)提示“Connection to Sybase server has been lost. All active transactions have been rollbacked”的錯(cuò)誤信息。
???解決辦法:
??? 若是開(kāi)發(fā)數(shù)據(jù)庫(kù),則直接清除日志即可。? 若是正式數(shù)據(jù)庫(kù):建議備份當(dāng)前日志??再清空日志,擴(kuò)日志設(shè)備及日志數(shù)據(jù)庫(kù)。清空日志的語(yǔ)句為『dump ? transaction ? database_name ? with ? no_log?』
2.Sybase中文亂碼
??? 出現(xiàn)這種情況的原因是sybase的服務(wù)器字符集不支持中文或是客戶端的字符集與服務(wù)端字符集不一致。可以考慮更改sybase的默認(rèn)字符集。在Sybase12.5的版本中支持中文的字符集有CP936、EUCGB、UTF-8和GB18030。這里我們針對(duì)Sybase服務(wù)器字符集不支持中文給出解決辦法:
??解決辦法(安裝cp936字符集):
?? 假設(shè)sybase的安裝路徑為"D:\Sybase"。
?? (1)D:\>cd \sybase\charsets\cp936
???(2)?D:\sybase\charsets\cp936> charset -Usa -Psa_pass -Sserver_name binary.srt cp936
???(3)?在InterActiveSQL中執(zhí)行『select name,id from syscharsets』,需注意的是這里要選擇在“master”數(shù)據(jù)庫(kù)下執(zhí)行,第4步也是。找到name為cp936的ID,假定是171。
????(4)在InterActiveSQL中執(zhí)行『sp_configure 'default character set id',171』
?????(5) 重啟Sybase服務(wù)兩次。因?yàn)榈谝淮螁?dòng)后會(huì)自動(dòng)結(jié)束掉,所以需要重啟第二次。?? 3.Sybase自增字段跳號(hào)處理 跳號(hào)原因及影響:
???? 在Sybase數(shù)據(jù)庫(kù)中如果數(shù)據(jù)庫(kù)在開(kāi)啟的情況下,因?yàn)榉钦5脑?#xff08;死機(jī)、斷電)而導(dǎo)致數(shù)據(jù)庫(kù)服務(wù)進(jìn)程強(qiáng)制結(jié)束。
那么自動(dòng)增長(zhǎng)的字段將會(huì)產(chǎn)生跳號(hào)的情況,再往數(shù)據(jù)表里面插入記錄時(shí),自增字段會(huì)跳到一個(gè)相當(dāng)大的值上面,以至于主鍵的自增值極有可能被用盡,或由于數(shù)值太大,應(yīng)用程序中的數(shù)據(jù)類(lèi)型如int型等已無(wú)法容下這么大的值,而無(wú)法在程序里面進(jìn)行相關(guān)的操作。
解決辦法:
如果還未發(fā)生過(guò)跳號(hào)情況,可按如下辦法解決:
??? 1.執(zhí)行【 select 'sp_chgattribute ' + name + ', ''' + 'identity_gap' + '''' + ', 60 go'
????? from sysobjects
????? where type='U'】。其中的60是憑感覺(jué)給的一個(gè)值,一般來(lái)說(shuō)這個(gè)值越大性能越好,但越大,再發(fā)生數(shù)據(jù)庫(kù)服務(wù)進(jìn)程非正常結(jié)束時(shí),所跳的號(hào)也就越大。
????2.對(duì)1執(zhí)行的結(jié)果,拷貝到SQL編輯區(qū)域,再執(zhí)行。
若已經(jīng)發(fā)生跳號(hào),需要將表中數(shù)據(jù)導(dǎo)出,再重建數(shù)據(jù)表,再執(zhí)行1和2。再導(dǎo)入數(shù)據(jù)。
后話:
??? Sybase自增字段有個(gè)最大的問(wèn)題是,再移植數(shù)據(jù)庫(kù)時(shí),如果是按自增主鍵進(jìn)行關(guān)聯(lián)的數(shù)據(jù)表,在數(shù)據(jù)重新導(dǎo)入后,可能出現(xiàn)主從表的外鍵無(wú)法關(guān)聯(lián)的情況,我是開(kāi)始時(shí)沒(méi)預(yù)料到這樣的情況,現(xiàn)木已成舟,沒(méi)有辦法了。 以后還是要慎用自增字段作為主鍵。 ?4.從sybase數(shù)據(jù)庫(kù)中讀取圖片無(wú)法完整顯示 原因: 由于其存取大文件的默認(rèn)大小為32K,所以導(dǎo)致數(shù)據(jù)不能全部讀出,所以大于32k的圖片就只能顯示部分。 解決辦法 非常簡(jiǎn)單,只需要在你響應(yīng)的sql語(yǔ)句之前,再加上【set ? textsize ? 3000000??】就OK了。
轉(zhuǎn)載于:https://blog.51cto.com/lijun050802/194176
總結(jié)
以上是生活随笔為你收集整理的Sybase常见问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 等一分钟看了会流泪
- 下一篇: [转]自定义SqlMembershipP