是否有可能减少sap sql在任何地方数据库文件的大小?几周后,我们的数据库大小约为10GB,因为数据库不会自动减少db-size。但实际上,数据库只包含240MB的数据。我像这样计算了db-size:
SELECT sum((((table_page_count * DB_PROPERTY('PageSize')) / 1024) / 1024)) dbsize FROM SYSTAB
一种方法应该是卸载和加载数据库,但这似乎非常耗时并且在运行时无法实现。
有没有人有想法,如何解决这个问题?
谢谢!
答案 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"
如果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
显示每个对象使用的大小(表示表,索引等)