首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Sybase >

急高分!

2012-04-05 
急!在线等,高分求助!!!!未学过SYBASE,但赶鸭子上架,被逼维护数据库。观察出错情况如下:Cant allocate spac

急!在线等,高分求助!!!!
未学过SYBASE,但赶鸭子上架,被逼维护数据库。
观察出错情况如下:
Can't allocate space for object 'master_log' in database 'foxhis' because the 'default' segment is full. IF you ran out of space in syslogs, dump the transaction log. Otherwise, use ALTER DATABASE or sp_extendsegment to increase the size of the segment.
通过dump trabsaction foxhis with truncate_only清除日志后,用sp_helpdb foxhis查看结果如下:
 name db_size owner dbid  
  created  
  status  
 ------------------------ ------------- ------------------------ ------ 
  -------------- 
  ------------------------------------------------------------------ 
 foxhis 1702.5 MB foxhis 5
  Nov 12, 2001  
  select into/bulkcopy, trunc log on chkpt, allow nulls by default  

 device_fragments size usage free kbytes 
 ------------------------------ ------------- -------------------- ----------- 
 foxhis 1000.0 MB data only 0 
 foxhis1 1.5 MB data only 0 
 foxhis2 1.0 MB data only 0 
 foxhis3 500.0 MB data only 0 
 foxlog 200.0 MB log only 204784 

 device  
  segment  
 ------------------------------ 


通过sp_helpdevice
1> sp_helpdevice
2> go
 device_name physical_name  
  description  
  status cntrltype device_number low high  
 ------------------------------ ---------------------------------------------- 
  ---------------------------------------------------------------------------------------------------------- 
  ------ --------- ------------- ----------- ----------- 
 foxdump /backup/dump/foxdump.dat  
  disk, dump device  
  16 2 0 0 0 
 foxhis /dev/rfoxhis  
  special, physical disk, 1000.00 MB  
  2 0 2 33554432 34066431 
 foxhis1 \data1\foxhis1.dat  
  special, physical disk, 1.95 MB  


  2 0 9 150994944 150995943 
 foxhis2 /usr/sybase/foxhis2.dat  
  special, physical disk, 1.00 MB  
  2 0 8 134217728 134218239 
 foxhis3 /usr/sybase/foxhis3.dat  
  special, physical disk, 500.00 MB  
  2 0 7 117440512 117696511 
 foxlog /dev/rfoxlog  
  special, physical disk, 200.00 MB  
  2 0 3 50331648 50434047 
 master d_master  
  special, default disk, physical disk, 50.00 MB  
  3 0 0 0 25599 
 nfoxhis /dev/rnfoxhis  
  special, physical disk, 1000.00 MB  
  2 0 4 67108864 67620863 
 nfoxlog /dev/rnfoxlog  
  special, physical disk, 200.00 MB  
  2 0 5 83886080 83988479 
 sysprocsdev /usr/sybase/sybprocs.dat  
  special, physical disk, 20.00 MB  
  2 0 1 16777216 16787455 
 tapedump1 /dev/rmt/c0t3d0s0  
  tape, 40 MB, dump device  
  16 3 0 0 1280 
 tapedump2 /dev/rmt/c0t3d0s1  
  tape, 625 MB, dump device  
  16 4 0 0 20000 


 tempmore /dev/rtempmore  
  special, physical disk, 200.00 MB  
  2 0 6 100663296 100765695 

(13 rows affected, return status = 0)

已无可扩展的资源了

若需要进行数据库空间的扩展应该如何做??????请高手指点。

[解决办法]
扩展要看版本了,一般是增加新的设备的。
[解决办法]
空间满了。
[解决办法]
硬盘还有空间的话增加设备
或者直接把忽略日志满的属性改为true
[解决办法]
细说SYBASE数据库日志
SYBASE公司是世界著名的数据库厂家,其关系数据库产品SYBASE SQL Server在中国大中型企事业单位中拥有大量的用户。笔者在多年的使用过程中,总结出SYBASE数据库管理和维护的一些经验,现拿出来与大家分享。 
  我们知道,SYBASE SQL Server用事务(Transaction)来跟踪所有数据库的变化。事务是SQL Server的工作单元。一个事务包含一条或多条作为整体执行的T-SQL语句。每个数据库都有自己的事务日志(Transaction Log),即系统表(Syslogs)。事务日志自动记录每个用户发出的每个事务。日志对于数据库的数据安全性、完整性至关重要,我们进行数据库开发和维护必须熟知日志的相关知识。

  一、SYBASE SQL Server 如何记录和读取日志信息

  SYBASE SQL Server是先记Log的机制。每当用户执行将修改数据库的语句时,SQL Server就会自动地把变化写入日志。一条语句所产生的所有变化都被记录到日志后,它们就被写到数据页在缓冲区的拷贝里。该数据页保存在缓冲区中,直到别的数据页需要该内存时,该数据页才被写到磁盘上。若事务中的某条语句没能完成,SQL Server将回滚事务产生的所有变化。这样就保证了整个数据库系统的一致性和完整性。

  二、日志设备

  Log和数据库的Data一样,需要存放在数据库设备上,可以将Log和Data存放在同一设备上,也可以分开存放。一般来说,应该将一个数据库的Data和Log存放在不同的数据库设备上。这样做有如下好处:一是可以单独地备份Backup事务日志;二是防止数据库溢满;三是可以看到Log的空间使用情况。

  所建Log设备的大小,没有十分精确的方法来确定。一般来说,对于新建的数据库,Log的大小应为数据库大小的30%左右。Log的大小还取决于数据库修改的频繁程度。如果数据库修改频繁,则Log的增长十分迅速。所以说Log空间大小依赖于用户是如何使用数据库的。此外,还有其它因素影响Log大小,我们应该根据实际操作情况估计Log大小,并间隔一段时间就对Log进行备份和清除。 

  三、日志的清除

  随着数据库的使用,数据库的Log是不断增长的,必须在它占满空间之前将它们清除掉。清除Log有两种方法:

  1.自动清除法

  开放数据库选项 Trunc Log on Chkpt,使数据库系统每隔一段时间自动清除Log。此方法的优点是无须人工干预,由SQL Server自动执行,并且一般不会出现Log溢满的情况;缺点是只清除Log而不做备份。

  2.手动清除法

  执行命令“dump transaction”来清除Log。以下两条命令都可以清除日志:

dump transaction with truncate_only
dump transaction with no_log 

  通常删除事务日志中不活跃的部分可使用“dump transaction with trancate_only”命令,这条命令写进事务日志时,还要做必要的并发性检查。SYBASE提供“dump transaction with no_log”来处理某些非常紧迫的情况,使用这条命令有很大的危险性,SQL Server会弹出一条警告信息。为了尽量确保数据库的一致性,你应将它作为“最后一招”。

  以上两种方法只是清除日志,而不做日志备份,若想备份日志,应执行“dump transaction database_name to dumpdevice”命令。

  四、管理庞大的事务

  有些操作会大批量地修改数据,如大量数据的修改(Update)、删除一个表的所有数据(Delete)、大量数据的插入(Insert),这样会使Log增长速度很快,有溢满的危险。下面笔者给大家介绍一下如何拆分大事务,以避免日志的溢满。

  例如执行“update tab_a set col_a=0”命令时,若表tab_a很大,则此Update动作在未完成之前就可能使Log溢满,引起1105错误(Log Full),而且执行这种大的事务所产生的独占锁(Exclusive Table Lock),会阻止其他用户在执行Update操作期间修改这个表,这就有可能引起死锁。为避免这些情况发生,我们可以把这个大的事务分成几个小的事务,并执行“dump transaction”动作。 

  上例中的情况就可以分成两个或多个小的事务: 

update tab_a set col_a=0 where col_b>x 
go
dump transaction database_name with truncate_only 
go 
update tab_a set col_a=0 where col_b <=x 
go 
dump transaction database_name with truncate_only 
go 

  这样,一个大的事务就被分成两个较小的事务。

  按照上述方法可以根据需要任意拆分大的事务。若这个事务需要备份到介质上,则不用“with truncate_only”选项。若执行“dump transaction with truncate_only”命令,应该先执行“dump database”。以此类推,我们可以对表删除、表插入等大事务做相应的拆分。

热点排行