据我了解,根据一些研究,但对 Sybase ASE 的实际使用经验为零,将磁盘空间分配给数据库后,回收磁盘空间的唯一方法是导出该数据库,使用相同架构创建新数据库,然后将所有导出的数据重新加载到新数据库中。这是正确的吗,还是还有其他方法?
然后:假设上述内容正确,并且需要完整的导出-重新创建-重新加载,那么最有效的方法是什么?是否有工具可以自动执行整个或部分过程?有人告诉我,我们必须为bcp
数据库中的每个对象编写单独的导出和导入命令,如果这是真的,那么对于足够了解 Sybase ASE 的人来说,编写脚本很容易。(我不了解。)
在我看来,这似乎是一项非常基本的家务事,但感觉我忽略了一些显而易见的东西。
答案1
如果需要,请在重建之前调整空间管理设置。当 reorg rebuild 重建表时,它会根据表的 、 和 的当前设置重写所有表和索引行reservepagegap
。fillfactor
这些exp_row_size
属性都会影响插入导致表碎片化的速度,以低集群比率来衡量。
答案2
您的研究绝对正确。一旦您将设备空间分配给数据库,您就无法收回该空间。收回磁盘空间的唯一方法是删除数据库和相关数据设备。
如果还没有从数据库中获取必要的数据库对象,可以使用ddlgen公用事业。这将对数据库对象(表、列、触发器、过程等)进行逆向工程,并将其放入可执行的脚本文件中,以在空数据库中重新创建对象。
要导出数据,您可以使用以下查询获取用户表的列表:
select name from [YOUR_DATABASE_NAME]..sysobjects where type = "U"
go
将输出捕获到单独的文件中,并且很容易循环到支助和协调局输出所有数据。