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ファイルがバックアップとなります。