据我所知,基于一些研究,但Sybase ASE的实际经验为零,一旦分配给数据库,回收磁盘空间的唯一方法是导出该数据库,创build一个具有相同模式的新数据库,然后重新加载所有导出的数据到新的数据库。 这是正确的,还是有其他一些方法?
然后:假设上面的描述是正确的,并且需要完整的export-recreate-reload,那么最有效的方法是什么? 是否有工具可以自动化全部或部分stream程? 我被告知必须为数据库中的每个对象编写单独的bcp导出和导入命令,如果真的听起来很容易被知道Sybase ASE的人编写脚本。 (我不。)
在我看来,这似乎是一个非常基本的家务pipe理任务,感觉就像我错过了一些明显的事情。
重新重build
如果需要,在重build之前调整空间pipe理设置。 当reorg rebuild重build表时,它将根据表的当前设置reservepagegap , fillfactor和exp_row_size重写所有表和索引行。 这些属性都会影响插入操作的快速度,从而导致表格变得碎片化,这通过低群集比率来衡量。
你的研究是绝对正确的。 一旦将设备空间分配给数据库,您就不能声明这个空间。 获取磁盘空间的唯一方法是删除数据库以及关联的数据设备。
为了从数据库中获得必要的数据库对象(如果你还没有的话)就是使用ddlgen工具 。 这将对数据库对象(表,列,触发器,过程等)进行反向工程,并将其放入可执行的脚本文件中,以便在空数据库中重新创build对象。
要导出数据,可以使用以下查询来获取用户表的列表:
select name from [YOUR_DATABASE_NAME]..sysobjects where type = "U" go
将输出捕获到一个单独的文件中,并且可以很容易地将所有数据循环。