Уменьшить sybase sql в любом месте размер файла БД
Можно ли уменьшить размер файла базы данных sap sql в любом месте? Через несколько недель размер нашей базы данных составит около 10 ГБ, поскольку база данных не уменьшает размер базы данных автоматически. Но на самом деле база данных содержит только 240 МБ данных. Я рассчитал размер БД следующим образом:
SELECT sum((((table_page_count * DB_PROPERTY('PageSize')) / 1024) / 1024)) dbsize FROM SYSTAB
Один из способов должен состоять в том, чтобы выгрузить и загрузить базу данных, но это кажется очень дорогостоящим и невозможным во время выполнения.
У кого-нибудь есть идеи, как решить эту проблему?
Спасибо!
3 ответа
При расчете размера не хватает пространства, используемого индексами, пространства, используемого расширениями строк, и пространства, используемого журналом контрольных точек. Процедура 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" и "DB_new" расположение файлов относительно пути к серверу, на котором работает.
Если в базе данных более одного файла:
DB1_old.db, DB2_old.db, ... DBn_old.db
тогда это результат
DB1_new.dbr, DB2_new.dbr .... DBn_new.dbr
Примеры строк подключения доступны на странице ссылок dbunload, ссылки на которую приведены выше.
Вот как мы проверяем размер, используемый в db в 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
Он показывает размер, используемый каждым объектом (означает таблицу, индекс и т. Д.)