I'm using ZFS to take snapshots of running OpenVZ containers.
For MySQL databases I can use flush tables with read lock
to put them in a flushed & locked state. This will put the underlying files in a consistent state and hold any incoming queries until I complete the snapshots, which take at most a couple seconds.
Here is a sample script, without error checking and other housekeeping code:
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
Can I do the same thing for an Oracle database?
Is there a command that will flush its tablespaces, put them in a consistent state, suitable for backup, and hold any activity until I unlock it?
I'd rather avoid having to reconfigure Oracle to use ZFS directly as a storage backend, because simple OpenVZ containers suit me very well. In fact I'd rather have some low-maintenance technique, without any complex Oracle setup, if any exists.
There is "no way" how to stop Oracle working. Even backups are background non-blocking processes. Use RMAN for backups (which is recommenced).
The other way would be to use very old-school approach.
alter database begin backup
. This will NOT stop IO operations against datafiles. Only SCN will not written in themalter database end backup
The restore works as:
The whole procedure is more complicated, and you should read something about it. There are various articles on the internet. It really requires some knowledge.
IMHO - you request does not make to much sense. MySQL does not have any reasonable support for backups and people tend to bypass this limitation by various hacks. The commercial databases have in-build native support for backups and do offer more features then ZFS filesystem. For example you might find PITR (point-in-time-recovery) very useful. So I really would recommend you to use RMAN backups for Oracle, especially if you are not familiar with Oracle architecture.
PS: SCN stand for System Change Number. This number increases whenever something changes in the database, and is written into every Oracle datafile.
PPS: If you want to revert database state you can you use FLASHBACK DATABASE command.