数据库用事务(Transaction)来跟踪所有数据库的变化。每当用户执行将修改数据库的语句时,数据库就会自动地把变化写入日志。若事务中的某条语句没能完成,数据库将回滚事务产生的所有变化。这样就保证了整个数据库系统的一致性和完整性。
日志Log和数据库的Data一样,需要存放在数据库设备上,可以将Log和Data存放在同一设备上,也可以分开存放。一般来说,应该将一个数据库的Data和Log存放在不同的数据库设备上,这样是可以方便分别单独地备份Backup数据和事务日志。Log的大小还取决于数据库修改的频繁程度。如果数据库修改频繁,则Log的增长十分迅速. 所建Log设备的大小,没有十分精确的方法来确定。在SqlServer中,我们可以看到有按百分比(如%10)自动增长和固定大小(如10M)的自动增长的。Microsoft工程师曾建议我们按设为固定大小增长。因为大数据库变得很大时,10%增长就会很快,也许100Gx10%=10G,你的剩余空间已经不够了,这样会导致分配异常。
随着数据库的使用,数据库的Log是不断增长的,我们应该根据实际操作情况设置Log大小,并间隔一段时间就对Log进行备份和清除。清除Log有两种方法: 1.自动清除法
开放数据库选项 Trunc Log on Chkpt,使数据库系统每隔一段时间自动清除Log。此方法的优点是无须人工干预,由SQL Server自动执行,并且一般不会出现Log溢满的情况;缺点是只清除Log而不做备份。
2.手动清除法
执行命令“dump transaction”来清除Log。以下两条命令都可以清除日志:
dump transaction databasename with truncate_only 通常删除事务日志中不活跃的部分可使用
dump transaction databasename with no_log 来处理某些非常紧迫的情况,使用这条命令有很大的危险性
日志备份命令请执行“dump transaction database_name to dumpdevice”命令。
上述设置在Sybase, MS Sqlserver中基本一致,原因就是MS Sqlserver 就是n年前购买的Sybase 4 发展起来的。