* выполнялось большое количество удалений, и вы хотите быстро убрать мусор. Для немедленного запуска чистки:
gfix -sweep С:\data\accounts.fdb -user SYSDBA-pas masterkey
или (POSIX):
./gfix -sweep /data/accounts.fdb -user SYSDBA-pas masterkey
Чистка базы данных не требует, чтобы база данных была обязательно закрыта - она может выполняться в любое время - однако она может ухудшить производительность системы и не должна проводиться во время большой загрузки сервера.
Существуют преимущества выполнения чистки с исключительным доступом и когда вся работа клиентов подтверждена. При этих условиях не только больше доступной памяти для операции чистки, но чистка также способна выполнить полное очищение записей данных и состояния транзакций. Зависшие при явных или неявных обрывах соединений транзакции под конец будут переведены в устаревшие, а используемые ими ресурсы будут освобождены.
Далее мы рассмотрим использование gfix для закрытия базы данных и получения к ней исключительного доступа.
Закрытие базы данных
Закрытие базы данных (shutdown) не является тем же самым, что и завершение работы сервера. Сервер продолжает работать и когда база данных закрыта.
База данных неявно находится "в закрытом состоянии", когда не существует активных соединений. Явное закрытие может быть выполнено при использовании gfix с переключателем -sh[ut], чтобы пользователь SYSDBA или владелец базы данных получили к ней исключительный доступ. Когда такое явное закрытие базы данных было выполнено, база данных остается закрытой, пока явно не будет выполнено gfix -о [niine]. Эти две операции называются "закрытие базы данных" и "перевод базы данных в оперативное состояние".
Закрытие базы данных перед остановом сервера
Когда вам понадобится остановить сервер, находящийся в промышленной эксплуатации, возможно вам потребуется применить gfix -shut для закрытия используемых баз данных на этом сервере.
Команда gfix -shut
Синтаксис команды gfix -shut следующий: POSIX:
./gfix -sh[ut] {-at n |-t n |-f n } база-данных Windows:
gfix -sh[ut] {-at n |-t n |-f n } база-данных
Переключатель gfix -shut поступает с гремя квалификаторами, которые уточняют стратегию закрытия: -at[tach] n, -tr[an] n и -f[orce] n. В любом случае n устанавливает период ожидания в секундах. Вы должны использовать один аргумент.
-at[tach] n употребляется для предотвращения новых соединений с базой данных. Он не отключает существующие соединения, но блокирует любые новые соединения. Если не будет никаких соединений по прошествии времени ожидания n секунд, то база данных будет переведена в закрытое состояние. Если же еще остаются соединения, то закрытие будет отменено.
-tr[an] n используется для предотвращения запуска новых транзакций. Это не закрывает существующих транзакций, но не позволяет запускать новые. Если не будет никаких соединений по прошествии времени ожидания n секунд, то база данных будет переведена в закрытое состояние. Если еще остаются соединения, то закрытие будет отменено.
-f[orce] n форсированно переведет базу данных в закрытое состояние по прошествии n секунд, независимо от существования соединений или активных транзакций. Это радикальная операция, которая может привести к тому, что пользователи потеряют свою проделанную работу. Она должна быть использована с осторожностью.
! ! !
СОВЕТ. Если вам нужно прибегнуть к переключателю -f[orce], чтобы убить дефектный запрос, то, по крайней мере, будьте вежливы с вашими "хорошо себя ведущими" пользователями и сначала используйте -at[tach] или -tr[an], чтобы дать им возможность сохранить работу и элегантно выйти из своих приложений.
. ! .
Примеры:
gfix -sh -at 300
инициирует закрытие базы данных, что произойдет через 5 минут, если все пользователи отключатся от базы данных.
gfix -sh -f 600
отключит всех пользователей от системы через 10 минут. Любые еще выполняющиеся транзакции будут отменены, а пользователи потеряют проделанную и неподтвержденную работу.
Когда база данных находится в закрытом состоянии, пользователь SYSDBA или ее владелец могут соединиться с ней и получить исключительный доступ. Однако остерегайтесь следующих моментов:
* если владелец или SYSDBA были соединены с базой данных в момент ее закрытия, то сервер не будет блокировать другие подключения к базе данных, даже когда выполнено закрытие;
* когда владелец или SYSDBA соединяется с базой данных после ее закрытия, то другому будет заблокирован к ней доступ - это хорошо. Если тот же пользователь захочет снова к ней подключиться, ему это будет разрешено, что уже не столь хорошо[154].