Sybase ASE default/log/tempdb space

在使用Sybase进行PL/SQL开发时,经常会遇到default/log/tempdb空间不足的问题。这涉及到Sybase的表空间结构问题。

Sybase的一个数据库中,一般分为日志表空间,数据表空间(一般为default表空间)。日志表空间用来存放一个事物中的变更部分,以备undo操作。因此如果一个操作(比如delete操作)更改了大量的数据以至于这些变更的数据超过了可用的日志表空间,Sybase会抛出警告“log segment is full...”,当前数据库进程会被挂起直到有了空闲的日志空间。针对这种情况,可以采用分批操作来解决。数据表空间用来存放表数据与索引数据,当其被用尽时,Sybase会抛出异常“Default segment is full...”,当前数据库进程会异常退出。

安装Sybase时,有一个数据库必须安装,它就是tempdb(临时数据库),用来存放数据库操作中生成的临时数据 - 比如多表连接中两个表连接后的中间结果。可以创建多个tempdb,分别给不同的用户或进程使用。可以通过系统储存过程sp_tempdb将特定的进程或者某一个用户的操作生成的临时数据绑定到某一个tempd上。绑定后的信息存放在表master..sysattributes中。若一个数据库进程产生大量的临时数据(比如多表连接,若表连接过多且数据量较大),以至于临时数据超过临时数据库的大小,则该数据库进程会异常退出并抛出异常信息“tempdb is full...”。

猜你喜欢

转载自hongboyongqi.iteye.com/blog/2062302