在进行项目实施前看资料发现了达梦数据库临时表空间可能出现的一个问题——临时表空间过大导致空间不够无法写入归档日志,无法写入归档日志导致数据库挂起。
具体情况可以参考:
http://blog.itpub.net/69949798/viewspace-2689571/
发生这种情况的根本原因是临时表空间大小上限没有设置(TEMP_SPACE_LIMIT为0)或者设置过大。对于临时表空间,DM 数据库会自动释放在执行 SQL 过程中产生的临时段,并将属于此临时段的簇空间还给临时表空间,临时表空间文件在磁盘所占大小并不会因此而缩减,只有在重启数据库时才会缩小临时表空间。如果没有重启,临时表空间大小上限没有设置,就会导致TEMP.DBF不断增长。
为了避免这种情况发生,在初始化实例后设置 TEMP_SIZE 和 TEMP_SPACE_LIMIT参数。
TEMP_SIZE为临时表空间大小,根据项目实际情况和内存大小进行设置。
TEMP_SPACE_LIMIT是临时表空间大小上限,根据项目实际情况进行设置,例如给200G。
如果没有设置好以上两个参数,TEMP.DBF已经过大,可以使用函数来缩小临时表空间文件大小:
当临时表空间扩展的太大时,可以使用达梦的存储过程 SP_TRUNC_TS_FILE 来进行空间的收缩,其定义如下:
SP_TRUNC_TS_FILE (
ts_id int,
file_id int,
to_size int
)
功能说明:
将临时表空间文件截断到指定的大小,仅能截断文件空闲未使用的部分,如果在指定 to_size 后存在已使用数据页,则实际截断大小会大于 to_size 。
参数说明:
ts_id :指定截断文件的临时表空间 ID
file_id :指定截断文件的文件 ID
to_size :指定将文件截断至多大,以 M 为单位; to_size 大小换算成页数后,值必须在 4096 到 2G 之间
返回值:无
举例说明:
将临时表空间文件号为 0 的文件截断到 2048M 大小,库的页大小为 8K 。
CALL SP_TRUNC_TS_FILE (3, 0, 2048);