刚开始做热备

来源:互联网 发布:股票技术软件 编辑:程序博客网 时间:2024/04/28 00:10
  刚刚开始做oracle的DBA,一切都不太适应,和以前做开发比起来,有太多的不同了。不过还好,都还顺利。昨天拿到一个数据库,要做一下热备份,完成了,但尚存不足。

      备份的sh

#!bin/sh
#hot.sh
FILE_TARGET=/home/oracle/admin/backup/hot
cd /home/oracle/admin/backup/sh
ARCH=`ls /home/oracle/admin/avatar/arch`
cd /home/oracle/admin/oranews/arch
rm $ARCH
#backup the password file
cp $ORACLE_HOME/dbs/orapw* $FILE_TARGET/.
#backup the parameter file
cp $ORACLE_HOME/dbs/initoranews.ora $FILE_TARGET/.
sqlplus -s 
sys/pass@sid as sysdba'<<EOF
@/home/oracle/admin/backup/sh/hot.sql;
commit;
quit
EOF

      起初的备份的sql

--begin backup

alter database backup controlfile to '/home/oracle/admin/backup/hot/control01.ctl' reuse;
set pagesize 0 feedback off
spool begin_backup.sql;
select 'alter tablespace ' ||tablespace_name|| ' begin backup;'
from dba_tablespaces
where status <> 'invalid' and tablespace_name<>'temp';
spool off;
@begin_backup.sql;

--copy the .dbf files 

!cp /home2/oracle/oradata/*.dbf /home/oracle/admin/backup/hot
!cp /home/oracle/oradata/dwtest/*.dbf /home/oracle/admin/backup/hot

-end backup

set pagesize 0 feedback off
spool end_backup.sql;
select 'alter tablespace ' ||tablespace_name|| ' end backup;'
from dba_tablespaces
where status <> 'invalid' and tablespace_name<>'temp';
spool off;
@end_backup.sql;
alter database backup controlfile to '/home/oracle/admin/backup/hot/control02.ctl' reuse;
alter system archive log current;

exit

这样的sql可以防止因为表空间的改变而丢失备份。但是操作开销过大,效率不是很好,所以,最后还是采取了原来一直采用的sql

alter database backup controlfile to '/home/oracle/admin/backup/hot/control01.ctl' reuse;
alter tablespace avtdata begin backup;
!cp /home2/oracle/oradata/avatar/avtdata*.dbf /home/oracle/admin/backup/hot
alter tablespace avtdata end backup;
alter tablespace avtindx begin backup;
!cp /home/oracle/oradata/avatar/avtindx*.dbf /home/oracle/admin/backup/hot
alter tablespace avtindx end backup;
alter tablespace users begin backup;
!cp /home2/oracle/oradata/avatar/users*.dbf /home/oracle/admin/backup/hot
alter tablespace users end backup;
alter tablespace system begin backup;
!cp /home2/oracle/oradata/avatar/system*.dbf /home/oracle/admin/backup/hot
alter tablespace system end backup;
alter tablespace tools begin backup;
!cp /home2/oracle/oradata/avatar/tools*.dbf /home/oracle/admin/backup/hot
alter tablespace tools end backup;
alter tablespace rbs begin backup;
!cp /home2/oracle/oradata/avatar/rbs*.dbf /home/oracle/admin/backup/hot
alter tablespace rbs end backup;
alter database backup controlfile to '/home/oracle/admin/backup/hot/control02.ctl' reuse;
alter system archive log current;

      这些都还容易,最让我郁闷的是cron文件中的任务不执行,直到第二天,才发现,是其中日志目录居然没有创建,晕死。

      比较理想的方法是利用sh脚本,直接找出每个tablespace的有效的.dbf文件,然后再进行begin_backup,cp,end_backup。需要对dba_data_file查询有效的.dbf文件。由于这几天事情比较多,有待以后试验