减少sybase sql anywhere数据库文件大小



是否可以减少sap-sql-and-where数据库文件的大小?几周后,我们的数据库大小约为10GB,因为数据库不会自动减少数据库大小。但事实上,数据库只包含240MB的数据。我这样计算数据库大小:

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

一种方法应该是卸载和加载数据库,但这似乎非常耗时,而且在运行时是不可能的。

有人知道如何解决这个问题吗?

谢谢!

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

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

根据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"one_answers"DB_new"文件的位置相对于正在运行的服务器的路径
  • 如果dbspace中有多个文件:

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

    那么它就是的结果

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

连接字符串的示例可在链接到上面的dbunload参考页中找到。

这就是我们在Sybase ASE检查数据库中使用的大小的方法:

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

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

相关内容

  • 没有找到相关文章

最新更新