ksaitoの日記

日々試したことの覚え書き

Oracleのオンラインバックアップ

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