Sybase ASE ³£¼ûÎÊÓë´ð
*ASE Ìåϵ½á¹¹
*ASE°æ±¾
*ASE °²×°¹ý³ÌÖУ¬°²×°³ÌÐòһֱͣÁôÔÚ³õʼ»¯Êý¾Ý¿âÕâÒ»²½£¬ÎÞ·¨¼ÌÐø
¡¡¡¡ÕâÊÇÒ»¸öĪÃ÷ÆäÃîµÄ bug£¬ÔÚ³õʼ»¯¿âµÄ¹ý³ÌÖУ¬tempdb ÂúÁË£¡
¡¡¡¡½â¾ö·½·¨£º
¡¡¡¡¡¡¡¡´Ëʱ£¬ASE ·þÎñʵ¼ÊÒѾÆô¶¯£¬Òò´Ë£¬¿ÉÒÔͨ¹ý isql µÇ¼£¬È»ºóÐÞ¸Ä tempdb µÄ´óС£º
¡¡¡¡¡¡¡¡1. ÔÚÃüÁîÐÐϼüÈëÒÔÏÂÃüÁעÒâбÌ岿·ÝÓÃʵ¼Ê·þÎñÃû´úÌæ£º
¡¡¡¡¡¡¡¡¡¡c:\>
isql -Usa -S ·þÎñÃû
¡¡¡¡¡¡¡¡2. ¼üÈëÏÂÃæÏ»®ÏßµÄÃüÁ
¡¡¡¡¡¡¡¡¡¡1>
alter database tempdb on master ="2M"
¡¡¡¡¡¡¡¡¡¡2>
go
*а²×°ASE»òн¨·þÎñºó£¬¿Í»§¶ËÎÞ·¨Á¬½Ó·þÎñÆ÷
¡¡¡¡ÔÚ°²×°Íê ASE »òн¨·þÎñºó£¬·þÎñÆ÷ÉÏÄÜʹÓà dsedit Á¬½ÓÊý¾Ý¿â·þÎñ£¬µ«¿Í»§¶ËÎÞ·¨Á¬½Ó¡£
¡¡¡¡Í¨³£µÄÔÒòÊÇÊý¾Ý¿â·þÎñ°ó¶¨ÁË 127.0.0.1£¬Ê¹Óà dsedit£¬»òÖ±½ÓÐÞ¸Ä interfaces Îļþ£¬°ó¶¨È·ÊµµÄ IP ¼´¿É¡£
*ΪʲôÉú²ú»·¾³²»ÒªÉèÖà truncate log on checkpoint£¿
¡¡¡¡ÓÐЩÓû§Ì°Í¼¼ò±ã£¬ÔÚÉú²ú»·¾³ÖÐÉèÖÃÁË truncate log on checkpoint ¡£ÆäÔÒâ²»ÍâÊDZÜÃâÒòдÂúÈÕÖ¾¶øµ¼ÖµÄÒµÎñÍ£¶Ù¡£Êâ²»Öª£¬ÕâÑùµÄÉèÖÿÉÄÜ´øÀ´²»¿ÉÍì»ØµÄÔÖÄÑ¡£ÒòΪµ±ÊÂÎñ±»½Ø¶Ïºó£¬´Ó×î½üÒ»´ÎÈ«±¸µ½µ±Ç°µÄÊÂÎñ¾ù²»¿ÉÄÜÔÙ»Ö¸´ÁË£¡Èç¹ûÕâÆÚ¼ä³öÏÖÎÊÌ⣬Èç´ÅÅÌË𻵣¬Ôò½«µ¼Ö´óÁ¿Êý¾Ý¶ªÊ§¡£
¡¡¡¡ÔÚÉú²ú»·¾³ÖУ¬Ó¦Í¨¹ýÅäÖúÏÀíµÄ±¸·Ý²ßÂÔÀ´½øÐÐÈ«±¸ºÍÔöÁ¿±¸·Ý¡£µäÐ͵IJßÂÔÊÇÿÖÜÒ»´ÎÈ«±¸£¬Ã¿ÌìÒ»´ÎÔöÁ¿±¸·Ý¡£Óû§Ó¦¸ù¾Ý×ÔÉíÓ¦ÓõÄʵ¼ÊÇé¿ö£¨Êý¾ÝÁ¿¡¢Êý¾ÝÔöÁ¿¡¢Êý¾ÝÖØÒªÐÔµÈÒòËØ£©£¬ºÏÀíµ÷Õû£¬Èç¸ÄΪһÌìÁ½´ÎÔöÁ¿±¸·Ý¡£Èç¹ûÐèÒª´óÁ¿µ¼ÈëÊý¾Ý£¬¿ÉÄÜдÂúÈÕÖ¾£¬ÄÇô¿ÉÄÜÁÙʱÉèÖà truncate log on checkpoint£¬µ«ÐèҪעÒâµÄÊÇ£ºÍê³ÉÊý¾Ýµ¼Èëºó£¬Ó¦Á¢¼´È¡Ïû´ËÉèÖ㬲¢ÂíÉϽøÐÐÈ«±¸¡£
¡¡¡¡
*ÈçºÎ·ÖÀëÈÕÖ¾ÓëÊý¾Ý£¿
¡¡¡¡£±¡¢±¸·ÝÊý¾Ý¿â£¬°üÀ¨ master ºÍÄãÒª·ÖÀëÊý¾ÝÓëÈÕÖ¾µÄÓ¦Óÿ⣨·Ï»°£¬¸ù¾Ý
Sybase ASE ϵͳ¹ÜÀíÔ±ÈÕ³£Î¬»¤Ö¸ÄÏ£¬ÕâÒ»²½ÊDZز»¿ÉÉÙ£¬ÒÔÖÁÓÚ²»ÓÃд³öÀ´µÄ²½Ö裩£»
¡¡¡¡£²¡¢¼ì²éÈÕÖ¾ÊÇ·ñÓе¥¶ÀµÄ´æ·ÅÉ豸£¬ÈçÓУ¬ÔòÖ±½Óµ½µÚ£µ²½£»
¡¡¡¡£³¡¢Ôö¼ÓÒ»¸öÉ豸£ºdisk init .....£»
¡¡¡¡£´¡¢alter database db_name log on new_log_device=xxx
¡¡¡¡£µ¡¢sp_dropsegment logsegment, db_name, device_name
¡¡¡¡£¶¡¢²é¿´ÊÇ·ñÒÑ·ÖÀ루sp_helpdb»òsp_helplog£©£»
¡¡¡¡

ÐèҪעÒâµÄÊÇ£¬Ö´ÐÐ sp_helplog »áÌáʾÒÔÏÂÀàËÆÐÅÏ¢£º
No valid log device can be found to contain the starting logpage of 'xxxx', on
database 'xxxxx'. Perhaps the segment mapping of database has changed recently.
Please inspect the sysusages catalog and contact your system administrator.
¡¡¡¡Äã´ó¿É²»±Ø½ôÕÅ¡£¶Î£¨segment£©Ö»ÊǹÜÀíÒÔºóÈçºÎΪ¶ÔÏó·ÖÅä¿Õ¼ä£¬Ôö¼ÓºÍɾ³ý segment ²¢²»Òƶ¯µ±Ç°µÄÒÑ·ÖÅä¿Õ¼ä¡£ÈÕÖ¾ÖÁÉÙÓÐÒ»¸öÀ©³ä£¨extend£©Î»ÓÚÒÔǰµÄ segment ÉÏ£¨»¹¼ÇµÃÂð£¬Îª¶ÔÏó·ÖÅä´æÖüµ¥ÔªÊ±£¬Êµ¼ÊÊÇÒÔ extend Ϊµ¥Î»µÄ¡££©¡£Èç¹ûµ±Ç° extend ±»ÌîÂú£¬ÐèÒªÔÙΪÈÕÖ¾·ÖÅäʱ£¬ASE»áÔÚÐ嵀 segment ÉÏ·ÖÅ䣨segment Ô¼ÊøËü²»µÃ²»Õâô×ö£©¡£´Ëʱ£¬½Ø¶ÏÈÕÖ¾¾Í¿ÉÒÔ»ØÊÕÒÔǰ·ÖÅäµÄ extend ÁË¡£
¡¡¡¡£·¡¢Òò´Ë£¬Èç¹û²»Ïë¿´µ½ sp_helplog µÄ¡°´íÎóÊä³ö¡±£¬Äã¿ÉÒÔ´´½¨Ò»¸öÁÙʱ±í£¬È»ºóÍùÃæ²åÈë×ã¹»µÄÊý¾Ý£¬È»ºó½Ø¶ÏÈÕÖ¾£»
¡¡¡¡£¸¡¢ÀÏ¹æ¾Ø£¬Ò²ÊǺÜÖØÒªµÄÒ»²½£º±¸·ÝÊý¾Ý¿â£¬°üÀ¨ master ºÍÄã·ÖÀëÊý¾ÝÓëÈÕÖ¾µÄÓ¦Óÿ⡣
*ÈçºÎɾ³ýtempdbÊý¾Ý¿âÔÚmasterÉ豸ÉϵļǼ£¿
Õª×Ô hobbylu µÄ²©¿Í¡£
sp_dropsegment 'system','tempdb','master'
go
sp_dropsegment 'default','tempdb','master'
go
sp_dropsegment 'logsegment','tempdb','master'
go
begin tran
delete from sysusages where dbid=2 and segmap=0
go
update sysusages set lstart=0 where dbid=2(×¢ÒâÕâÀï½ö½öÖ»¿¼ÂÇÁËÒ»¸ötempdbÉ豸µÄÇé¿ö)
commit
go
*ϵͳ±ÀÀ£ÁË£¬Ã»Óб¸·Ý£¬µ«É豸Îļþ»¹´æÔÚ£¬ÈçºÎ»Ö¸´Êý¾Ý¿â£¿
¡¡¡¡ÓеÄʱºò£¬ÏµÍ³±ÀÀ£ÁË£¬ÊÖÉÏҲûÓÐÊý¾Ý¿âµÄ±¸·Ý»òÕßÊDZ¸·ÝÌ«¾ÉÁË£¬µ«½ÄÐÒµÄÊÇÉ豸»¹ÔÚ£¬²¢ÇÒÊÇÍêÕûµÄ£¬Õâʱ¿ÉÒÔͨ¹ýÎļþCOPYµÄ·½Ê½»Ö¸´Êý¾Ý¿â¡£
¡¡¡¡
Çé¿öÒ»¡¢ËùÓÐÉ豸£¬°üÀ¨ master £¬¾ùÊÇÍêÕûµÄ£º
¡¡¡¡ÕâÖÖÇé¿öÊÇ×î¼òµ¥µÄ£¬Ö»ÐèÒªÏȱ¸·ÝÉ豸Îļþ£¨°üÀ¨master£¬copy µ½°²È«µÄµØ·½£©£¬È»ºóÖØÐ°²×°ÏµÍ³£¬½¨·þÎñ£¨±£³ÖÒ³Ãæ´óС¡¢±àÂëºÍÅÅÐòÓëÒÔǰһÑù£©£¬È»ºóÍ£Ö¹·þÎñ£¬°´ÔĿ¼½«ËùÓÐÉ豸Îļþ¿½±´»ØÀ´£¬ÔÙÖØÆô·þÎñ¼´¿É¡£Ð½¨µÄ·þÎñÃû¿ÉÓë¾É·þÎñ²»Í¬¡£½¨Òé°Ñ
·þÎñÃû.cfg Ò²¸´ÖƹýÀ´£¬Ê¡µô²ÎÊýÅäÖá£
¡¡¡¡
Çé¿ö¶þ¡¢Ó¦ÓõÄÉ豸ÊÇÍêÕûµÄ£¬µ«Ã»ÓÐmasterÁË£º
¡¡¡¡·½·¨Ò»¡¢ÕâÖÖÇé¿öÏÂÒª»Ö¸´Êý¾Ý¿â¾ÍÐèÒªÔÀ´µÄÉ豸ʹÓÃÇé¿ö±íÁË¡£ÖØÐ°²×°ÏµÍ³£¬½¨·þÎñ£¬È»ºó°´ÔÉ豸Çé¿ö½¨É豸£¨´óС¡¢Î»Öñ£³ÖºÍÔÀ´Ò»Ö£©£¬½ÓÏÂÀ´¸ù¾Ý¼Ç¼ÏÂÀ´µÄÉ豸ʹÓÃÇé¿ö½¨¿â£¬Ë³ÐòÒÔ¼°Õ¼ÓõĿռäÒªºÍÒÔǰµÄÒ»Ö¡£È»ºóÍ£·þÎñ£¬½«Ó¦ÓõÄÊý¾Ý¿âÉ豸¸´ÖÆ»ØÀ´£¬ÖØÆô·þÎñ¼´¿É¡£Çë²Î¿¼
Sybase ASE ϵͳ¹ÜÀíÔ±ÈÕ³£Î¬»¤Ö¸ÄϵĽ¨Ò飬¶¨ÆÚ±¸·Ý master Êý¾Ý¿â¡£
¡¡¡¡·½·¨¶þ¡¢
¡¡¡¡1.ÖØÐ´´½¨ master É豸
¡¡¡¡¡¡buildmaster -d
the_full_path_of_master_device -s
the_size¡¡
12.5°æ±¾ÒÔÏÂ
¡¡¡¡¡¡dataserver -b £¨Windows: sqlsrvr -b£©
12.5£¨º¬12.5£©ÒÔÉÏ ¡¡
¡¡¡¡2.¼ì²é²¢ÐÞ¸Ä RUN_XXX Îļþ£¬Ö¸Ïòд´½¨µÄ master.dat£¬²¢Ôö¼Ó -T3608
¡¡¡¡3.ÃüÁîÐÐÆô¶¯·þÎñ
¡¡¡¡4.µ÷Õû master ¿âµÄ´óС£¨¿ÉÑ¡£©
¡¡¡¡5.ÖØÐ¹¹½¨ master..sysdevices Êý¾Ý
¡¡¡¡¡¡disk reinit name="
device_name", physname="
full_path_of_device", vdevno=
device_no,size=
size_of_device
¡¡¡¡6.ÖØÐ¹¹½¨ master..sysusages Êý¾Ý
¡¡¡¡¡¡disk refit
¡¡¡¡8.Ð޸Ļָ´»ØÀ´µÄÊý¾Ý¿âÃû
¡¡¡¡9.ʹÓà isql£¬°²×° master ºÍ model
¡¡¡¡10.´´½¨µÇ¼ºÍÓû§
¡¡¡¡11.È¥³ý RUN_XXX ÎļþÖÐµÄ -T3608 ±êÖ¾£¬ÖØÆô¶¯·þÎñ
*Íü¼ÇÁËsaµÄÃÜÂ룬Ôõô°ì£¿
¡¡¡¡ÐÞ¸ÄRUN_XXXX½Å±¾£¬ÔÚÆäºóÃæÌí¼Ó
-psa£¬È»ºóÔÚÃüÁîÐÐÔËÐиýű¾£¬ASE»á¸ø³öÖØÐÂÉú³ÉµÄÃÜÂ루¶ÔÓھɰ汾µÄASE£¬´ËÃÜÂë»áÏÔʾÔÚDOS´°¿ÚµÄ×îºóÒ»ÐУ»Ð°汾£¨Èç12.5.4£©ÔòÔÚDOS´°¿ÚÏÔʾÄÚÈݵÄÖм䲿·Ý£©£¬ÓôËÃÜÂëµÇ¼²¢Ð޸ġ£
¡¡¡¡×¢Ò⣺ÐÞ¸ÄÃÜÂëºó£¬Ó¦¼°Ê±È¥µôÌí¼ÓµÄ-psa¡£
*µ÷Õû²ÎÊýºó£¬ASE ÎÞ·¨Æô¶¯
¡¡¡¡ÕâÊÇÓÉÓÚ²ÎÊýÅäÖò»ÕýÈ·£¬µ¼ÖÂÎÞ·¨Æô¶¯¡£¿ÉÒÔͨ¹ýÖ±½ÓÐÞ¸ÄÅäÖÃÎļþ£¬»òÕß½«ÏµÍ³×Ô¶¯±¸·ÝµÄÅäÖÃÎļþ¿½±´»ØÀ´¡£
¡¡¡¡ÅäÖÃÎļþλÓÚ ASE °²×°Ä¿Â¼Ï£¬ÃüÃû¹æÔòΪ£º·þÎñÃû.cfg£¬È磺/opt/sybase/ASE-15_0/FLYBEAN.log¡£Ã¿´Îµ÷Õû²ÎÊýºó£¬ASE »á½«±¸·ÝÒÔǰµÄÅäÖòÎÊý£¬ÐγÉÖîÈç ·þÎñÃû.ÈýλÐòºÅ µÄÎļþ£¬È磺FLYBEAN.001£¬Ã¿´Î±¸·Ý£¬ÐòºÅ»á¼Ó 1¡£
*ÈçºÎ¿çÆ½Ì¨ÒÆÖ² ASE Êý¾Ý¿â£¿
¡¡¡¡´Ë´¦µÄ¿çƽ̨ÊÇÖ¸Ó²¼þƽ̨£¬Èç Sparc <-> X86£¬ËüÃÇÖ®¼ä´æÔڸߵÍ×Ö½Ú˳Ðò²»Í¬µÄÎÊÌâ¡£
¡¡¡¡
RISCϵͳ£¬ÈçSparc£¬²ÉÓøߵÍ×Ö½Ú˳Ðò£»¶øCISCϵͳ£¬ÈçX86£¬²ÉÓõ͸ß˳Ðò¡£
¡¡¡¡
*Èç¹û²»Ð¡ÐÄÖ±½Óɾ³ýÁËÈÕÖ¾µÄÉ豸Îļþ£¬ÈçºÎ»Ö¸´Êý¾Ý¿â£¿
¡¡¡¡Ê×ÏÈ£¬Ó¦¾¡¿ÉÄÜ´Ó²Ù×÷ϵͳÖлָ´±»Îóɾ³ýµÄÉ豸Îļþ£»
¡¡¡¡Èç¹û²»Äָܻ´£¬¿É´´½¨Ò»¸öºÍ±»É¾³ýÉ豸Îļþ´óСÏàͬµÄÐÂÉ豸Îļþ£¬È»ºóÔËÐÐ dbcc rebuild_log¡£
¡¡¡¡ÏÂÃæ¸ø³öÒ»¸ö¾ßÌåµÄ²âÊÔÓÃÀý£º
-- ´´½¨²âÊÔÊý¾Ý¿â test
use master
go
disk init name='test_dat_dev',physname='/opt/sybase/data/test_dat_dev.dat',size='50M'
go
disk init name='test_log1_dev',physname='/opt/sybase/data/test_log_dev1.dat',size='10M'
go
disk init name='test_log2_dev',physname='/opt/sybase/data/test_log_dev2.dat',size='10M'
go
create database test on test_dat_dev='40M' log on test_log1_dev='5M', test_log2_dev='2M'
go
-- ²úÉúһЩÈÕÖ¾
use test
go
create table test (
id int not null,
name char(20) not null
)
go
insert into test values(1,'aaaaaaa')
insert into test values(2,'bbbbbbb')
insert into test values(3,'ccccccc')
insert into test values(4,'ddddddd')
go
-- ´´½¨ÁíÒ»¸öÊý¾Ý¿â£¬ÎÒÃÇÐèÒªÒ»¸öÓë²âÊÔÊý¾Ý¿âµÚÒ»¸öÈÕÖ¾É豸ÏàͬµÄÉ豸Îļþ
use master
go
disk init name='test1_dat_dev',physname='/opt/sybase/data/test1_dat_dev.dat',size='50M'
go
disk init name='test1_log1_dev',physname='/opt/sybase/data/test1_log_dev1.dat',size='10M'
go
disk init name='test1_log2_dev',physname='/opt/sybase/data/test1_log_dev2.dat',size='10M'
go
create database test1 on test1_dat_dev='40M' log on test1_log1_dev='5M', test1_log2_dev='2M'
go
-- ²Ù×÷ϵͳ²Ù×÷£ºÉ¾³ý test_log_dev1.dat£¬È»ºóÖØÆô ASE
mv test_log_dev1.dat test_log_dev1.back
-- ¼ì²éÒ»ÏÂÊý¾Ý¿âµÄ״̬£¬È»ºóÍ£ ASE
select name, status from sysdatabases
go
shutdown
go
-- ²Ù×÷ϵͳ²Ù×÷£º¿½±´ test1_log_dev1.dat Ϊ test_log_dev1.dat£¬ÖØÐÂÆô¶¯ ASE
cp test1_log_dev1.dat test_log_dev1.dat
-- Ð޸IJâÊÔÊý¾Ý¿â״̬£¬²¢ÖØÐÂÆô¶¯ ASE
sp_configure 'allow update',1
go
begin tran
go
update master..sysdatabases set status=-32768 where name='test'
go
commit
go
sp_configure 'allow update',0
go
shutdown
go
-- ÖØ½¨ÈÕÖ¾£¬¿ÉÑ¡²½Öè
dbcc traceon(3604)
go
dbcc rebuild_log(test,0,0)
go
online database test
go
--
FlybeanZhou - 12 Apr 2006