2008-10-15 93 views
0

当我转储一个Sybase数据库时,表中是否有数据并不重要,文件大小是一样的。我被告知这是由于我的转储文件是二进制文件而不是逻辑文件,因此转储文件的文件基于数据库的分配大小。我知道Oracle可以使用逻辑转储文件,但是我可以让Sybase执行类似的操作,还是有其他一些偷偷取得转储文件大小的方法?有没有办法减少Sybase数据库的转储文件大小?

回答

1

由于在版本12的某个位置,您可以在ASE中执行压缩转储。

The syntax is:转储数据库DATABASE_NAME到file_name [与压缩= compress_level]

compress_level是0-9。 0没有压缩,9是最多的。压缩得越多,运行转储时的CPU使用率就越高。您只需进行一些测试即可找到尺寸与性能之间的适当平衡。

加载转储时不需要特殊命令。

+0

这个效果很好,其中的好处是截断表,我不需要作为转储的一部分现在有一个效果,因为压缩转储的过程挤出以前占用的空表的任何空间!感谢Adam! – ninesided 2008-10-18 22:08:01

2

如果您已经在使用compress_level 9并且仍想要更多压缩,可以使用bzip2重新压缩该文件。

如果您只是简单地使用bzip2压缩文件,您将获得〜10%的提升。如果你解压并重新压缩,你可能会看到30%范围内的改进。但请记住,您必须再次解压缩和/或gzip文件,以便Sybase加载它。

gunzip -c pubs_1.dmp | bzip2 > pubs.dmp.bz2 
0

虽然上面的链接(语法是)显然是正确的,因为它指向的是sybase文档,但注释有误导性。

简单格式的语法是:

转储数据库{}数据库名称为 “压缩:: {#compression_level} {::} stripe_device” 去

如:转储mydb数据库“压缩: :1 ::/sybase_dumps/mydb_17022009“

在加载数据库转储:: compress;方面需要再次给出。

例如。从“compresss ::/sybase_dumps/mydb_17022009”加载数据库mydb

注意压缩级别不是必需的,也不需要后面的额外分隔冒号。

测试以找到您的平衡是一个很好的观点,记住你越高期望转储花费相当长的时间。我发现1-3比较充足,我从未超过6,收益递减是不值得的。

如果我绝望,我会bzip2文件如上所述{点赚}。如果这是一个生产主机,我会将该文件运送到另一个主机并执行此操作。资源冲击可能会相当大。

+0

这两种方法都有效。该文档指出“with compression = compress_level”是更新和首选的语法。“ ”较旧的compress ::选项仅适用于本地存档;不能使用servername选项。要压缩到远程计算机,必须使用首选的compress = compress_level选项。 – AdamH 2009-11-17 15:03:54

相关问题