Oracleをアーカイブログモードにするとデータベースを停止しなくてもバックアップを取得することができます。また、障害が発生した場合に、壊れたファイルによってはデータベースを停止しなくてもリカバリできる場合があります。
オンラインバックアップの手順
バックアップの順番は、データファイル、redoログファイル、制御ファイルの順にバックアップを作成します。
データファイルは、alter tablespace [テーブルスペース名] begin backupでオフラインにしてコピーしalter tablespace [テーブルスペース名] end backupでオンラインにする必要があります。
Ubuntu 11.10にインストールしたOracle Express 11gのデフォルトインスタンスは、以下のシェルとSQLでバックアップすることができます。(各ステップの説明は省略、作りはかなり適当ですが…)
$ cat onlinebackup.sh
#! /bin/bash
TIMESTAMP=`date +%Y%m%d`
# Backup datafiles
echo  Collect backup file names and tablespace names.
sqlplus system/manager@XE @onlinebackup.sql > onlinebackup.log
for i in `grep \^/ onlinebackup.log | awk '{print $2}'`
do
echo alter tablespace $i begin backup
echo /
done > beginbackup.sql
echo quit >> beginbackup.sql
echo Alter backup mode all tablespaces.
sqlplus system/manager@XE @beginbackup
sqlplus system/manager@XE @onlinebackup.sql
echo Backup all datafiles.
sudo tar cvfz onlinebackup-datafile.$TIMESTAMP.tar.gz `grep \^/ onlinebackup.log | awk '{print $1}'`
for i in `grep \^/ onlinebackup.log | awk '{print $2}'`
do
echo alter tablespace $i end backup
echo /
done > endbackup.sql
echo  alter system archive log current >> endbackup.sql
echo / >> endbackup.sql
echo quit >> endbackup.sql
echo Alter end backup all tablespaces.
sqlplus system/manager@XE @endbackup
sqlplus system/manager@XE @onlinebackup.sql
# Backup Archive REDO log files.
LOG_DEST=`grep db_recovery_file_dest onlinebackup.log  | awk '{ print $2}'`/`grep instance_name onlinebackup.log | awk '{print $2}'`
sudo tar cvfz onlinebackup-redolog.$TIMESTAMP.tar.gz  `sudo find $LOG_DEST -type f`
# Backup Control file.
USER_DUMP_DEST=`grep user_dump_dest onlinebackup.log | awk '{print $2}'`
sqlplus system/manager@XE <<EOF
alter database backup controlfile to '$USER_DUMP_DEST/controlfile.ctl' reuse;
alter database backup controlfile to trace as '$USER_DUMP_DEST/controllfile-trace.trc' reuse;
quit
EOF
sudo tar cvfz onlinebackup-controlfile.$TIMESTAMP.tar.gz  $USER_DUMP_DEST/controlfile.ctl
$ cat onlinebackup.sql
set head on
set linesize 300
column FILE_NAME format a80
column TABLESPACE_NAME format a10
column NAME format a30
column VALUE format a100
select vd.name as file_name, vt.name as tablespace_name,vb.status,vb.change#,vb.time
from v$backup vb,v$datafile vd,v$tablespace vt
where vb.file#=vd.file#
and vd.ts#=vt.ts#
/
select name, value
from v$parameter
where name = 'db_recovery_file_dest'
or name = 'instance_name'
or name = 'user_dump_dest'
/
quit
$
オンラインバックアップの実行
上記のシェルを実行すると以下のようにバックアップが作成されます。
$ ./onlinebackup.sh Collect backup file names and tablespace names. Alter backup mode all tablespaces. SQL*Plus: Release 11.2.0.2.0 Production on 木 2月 23 21:30:43 2012 Copyright (c) 1982, 2011, Oracle. All rights reserved. Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production に接続されました。 表領域が変更されました。 表領域が変更されました。 表領域が変更されました。 表領域が変更されました。 Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Productionとの接続が切断されました。 SQL*Plus: Release 11.2.0.2.0 Production on 木 2月 23 21:30:43 2012 Copyright (c) 1982, 2011, Oracle. All rights reserved. Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production に接続されました。 FILE_NAME TABLESPACE STATUS CHANGE# TIME -------------------------------------------------------------------------------- ---------- ------------------ ---------- -------- /u01/app/oracle/oradata/XE/system.dbf SYSTEM ACTIVE 469458 12-02-23 /u01/app/oracle/oradata/XE/sysaux.dbf SYSAUX ACTIVE 469464 12-02-23 /u01/app/oracle/oradata/XE/undotbs1.dbf UNDOTBS1 ACTIVE 469470 12-02-23 /u01/app/oracle/oradata/XE/users.dbf USERS ACTIVE 469476 12-02-23 NAME VALUE ------------------------------ ---------------------------------------------------------------------------------------------------- db_recovery_file_dest /u01/app/oracle/fast_recovery_area instance_name XE user_dump_dest /u01/app/oracle/diag/rdbms/xe/XE/trace Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Productionとの接続が切断されました。 Backup all datafiles. tar: メンバ名から先頭の `/' を取り除きます /u01/app/oracle/oradata/XE/system.dbf /u01/app/oracle/oradata/XE/sysaux.dbf /u01/app/oracle/oradata/XE/undotbs1.dbf /u01/app/oracle/oradata/XE/users.dbf Alter end backup all tablespaces. SQL*Plus: Release 11.2.0.2.0 Production on 木 2月 23 21:31:06 2012 Copyright (c) 1982, 2011, Oracle. All rights reserved. Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production に接続されました。 表領域が変更されました。 表領域が変更されました。 表領域が変更されました。 表領域が変更されました。 システムが変更されました。 Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Productionとの接続が切断されました。 SQL*Plus: Release 11.2.0.2.0 Production on 木 2月 23 21:31:06 2012 Copyright (c) 1982, 2011, Oracle. All rights reserved. Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production に接続されました。 FILE_NAME TABLESPACE STATUS CHANGE# TIME -------------------------------------------------------------------------------- ---------- ------------------ ---------- -------- /u01/app/oracle/oradata/XE/system.dbf SYSTEM NOT ACTIVE 469458 12-02-23 /u01/app/oracle/oradata/XE/sysaux.dbf SYSAUX NOT ACTIVE 469464 12-02-23 /u01/app/oracle/oradata/XE/undotbs1.dbf UNDOTBS1 NOT ACTIVE 469470 12-02-23 /u01/app/oracle/oradata/XE/users.dbf USERS NOT ACTIVE 469476 12-02-23 NAME VALUE ------------------------------ ---------------------------------------------------------------------------------------------------- db_recovery_file_dest /u01/app/oracle/fast_recovery_area instance_name XE user_dump_dest /u01/app/oracle/diag/rdbms/xe/XE/trace Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Productionとの接続が切断されました。 tar: メンバ名から先頭の `/' を取り除きます /u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_1_7fkv14wb_.log /u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_2_7fkv15rr_.log /u01/app/oracle/fast_recovery_area/XE/archivelog/2012_02_19/o1_mf_1_4_7n0oc67y_.arc /u01/app/oracle/fast_recovery_area/XE/archivelog/2012_02_21/o1_mf_1_5_7n78lwh0_.arc /u01/app/oracle/fast_recovery_area/XE/archivelog/2012_02_23/o1_mf_1_6_7ndddbhc_.arc SQL*Plus: Release 11.2.0.2.0 Production on 木 2月 23 21:31:11 2012 Copyright (c) 1982, 2011, Oracle. All rights reserved. Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production に接続されました。 SQL> データベースが変更されました。 SQL> データベースが変更されました。 SQL> Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Productionとの接続が切断されました。 tar: メンバ名から先頭の `/' を取り除きます /u01/app/oracle/diag/rdbms/xe/XE/trace/controlfile.ctl $
onlinebackup-[datafile|redolog|controlfile].YYYYMMDD.tar.gzの3ファイルがバックアップとなります。
