减少sybase sql的db文件大小

时间:2015-02-17 08:33:07

标签: sql database sybase filesize sqlanywhere

是否有可能减少sap sql在任何地方数据库文件的大小?几周后,我们的数据库大小约为10GB,因为数据库不会自动减少db-size。但实际上,数据库只包含240MB的数据。我像这样计算了db-size:

SELECT  sum((((table_page_count * DB_PROPERTY('PageSize')) / 1024) / 1024)) dbsize FROM SYSTAB

一种方法应该是卸载和加载数据库,但这似乎非常耗时并且在运行时无法实现。

有没有人有想法,如何解决这个问题?

谢谢!

3 个答案:

答案 0 :(得分:1)

您的大小计算缺少索引使用的空间,行扩展使用的空间以及检查点日志使用的空间。 sa_table_page_usage()过程或dbinfo实用程序是计算正在使用的数据库文件数量的更好方法,但仍不会告诉您检查点日志的大小。

要回答您的问题,数据库文件大小可能会在您关闭时自动缩小,因为在服务器关闭时会从数据库文件中删除检查点日志。但是,回收可用表/索引页以缩小数据库文件大小的唯一方法是重建数据库。 除非你真的需要空间,否则没有理由这样做。数据库服务器将根据需要重用免费页面。

答案 1 :(得分:0)

根据在https://dba.stackexchange.com/questions/43221/shrink-a-sql-anywhere-12-database处接受的答案,解决方案是使用dbunload命令卸载/重新加载数据库(自然是离线)。有关此命令的更多信息,请访问http://dcx.sybase.com/1200/en/dbadmin/dbunload.html

该页面上的另一个答案给出了以下示例命令行:

dbunload -c "UID=username;PWD=password;DBF=DB_old.db" -an "DB_new"
  • DB_old.db是原始数据库的名称。
  • DB_new.db是缩小的数据库的名称。
  • “ DB_old”和“ DB_new”文件的位置相对于正在运行的服务器的路径。
  • 如果dbspace中有多个文件:

    DB1_old.db, DB2_old.db, ... DBn_old.db
    

    那就是结果

    DB1_new.dbr, DB2_new.dbr .... DBn_new.dbr
    

上面链接到的dbunload参考页面中提供了连接字符串的示例。

答案 2 :(得分:-2)

这就是我们在Sybase ASE上检查db中使用的大小的方法:

select
  convert (varchar(61),o.name+'.'+i.name ) as object,
  rowtotal = convert(numeric(18,0),0),
  convert(bigint,used_pages(db_id(), o.id,indid)) * @@maxpagesize/1024 as used_pages_kb,
  convert(bigint,data_pages(db_id(), o.id,indid)) * @@maxpagesize/1024 as data_pages_kb,
  convert(bigint,reserved_pages(db_id(),o.id,indid)) * @@maxpagesize/1024 as reserved_kb
from
  sysobjects o,
  sysindexes i
where
  o.type='U'
  and o.id=i.id
order by used_pages_kb desc

显示每个对象使用的大小(表示表,索引等)