Я использую ZFS для создания снимков запущенных контейнеров OpenVZ.
Для баз данных MySQL я могу использовать flush tables with read lock
чтобы перевести их в очищенное и заблокированное состояние. Это переведет базовые файлы в согласованное состояние и будет удерживать все входящие запросы, пока я не завершу создание моментальных снимков, что займет не более пары секунд.
Вот пример сценария без проверки ошибок и другого служебного кода:
vz_root=/var/lib/vz/root/$veid
mysql_locked=/var/run/mysql_locked
# flush & lock MySQL, touch mysql_locked, and wait until it is removed
vzctl exec $veid mysql -NB <<-EOF &
flush tables with read lock;
delimiter ;;
system touch $mysql_locked
system while test -e $mysql_locked; do sleep 1; done
exit
EOF
# wait for the preceding command to touch mysql_locked
while ! test -e $vz_root$mysql_locked; do sleep 1; done
# take a snapshot of the VZ filesystem, while MySQL is being held locked
zfs snapshot zpool/private/$veid@$(date +"%Y-%m-%d_%H:%M")
# unlock MySQL
rm -f $vz_root$mysql_locked
Могу ли я сделать то же самое для базы данных Oracle?
Есть ли команда, которая очищает свои табличные пространства, переводит их в согласованное состояние, подходящее для резервного копирования, и удерживает любую активность, пока я ее не разблокирую?
Я бы предпочел избежать перенастройки Oracle для использования ZFS напрямую в качестве серверной части хранилища, потому что мне очень подходят простые контейнеры OpenVZ. Фактически, я бы предпочел использовать не требующий особого обслуживания метод, без сложной настройки Oracle, если таковой существует.
Не существует «способа» остановить работу Oracle. Даже резервные копии - это фоновые неблокирующие процессы. Используйте RMAN для резервного копирования (которое возобновляется).
Другой способ - использовать очень старый подход.
alter database begin backup
. Это НЕ остановит операции ввода-вывода с файлами данных. Только SCN в них писать не будетalter database end backup
Восстановление работает как:
Вся процедура более сложная, и вы должны прочитать что-нибудь об этом. В Интернете есть разные статьи. Это действительно требует некоторых знаний.
ИМХО - ваш запрос не имеет большого смысла. MySQL не имеет разумной поддержки резервного копирования, и люди склонны обходить это ограничение с помощью различных хаков. Коммерческие базы данных имеют встроенную встроенную поддержку резервного копирования и предлагают больше функций, чем файловая система ZFS. Например, вы можете найти PITR (восстановление на определенный момент времени) очень полезным. Поэтому я действительно рекомендую вам использовать резервные копии RMAN для Oracle, особенно если вы не знакомы с архитектурой Oracle.
PS: SCN означает номер изменения системы. Это число увеличивается всякий раз, когда что-то изменяется в базе данных, и записывается в каждый файл данных Oracle.
PPS: Если вы хотите вернуть состояние базы данных, вы можете использовать команду FLASHBACK DATABASE.