2) 将目标数据库改为归档模式运行。
SVRMGR> connect internal SVRMGR> startup mount [dbname] SVRMGR> alter database [dbname] archivelog; --起用归档模式 SVRMGR> archive log start --启动自动归档模式 SVRMGR> alter database [dbname] open; --打开数据库
|
修改数据库初始化参数文件init.ora,定义归档模式(自动)、归档日志文件保存路径、归档日志文件命名方法,重新启动数据库。
3)建立全备份脚本文件hotbackup.rcv。
connect target internal/oracle@host1 connect rcvcat rman/rman@host3 run { allocate channel t1 type 'SBT_TAPE'; backup incremental level 0 skip inaccessible tag hot_db_bk_level0 filesperset 5 format 'bk_%s_%p_%t' (database); --备份全部数据库控制文件和数据文件 sql 'alter system archive log current'; backup filesperset 20 format 'al_%s_%p_%t' (archivelog all delete input); --备份归档日志,备份成功后删除归档日志。若不成功,则不做删除。 }
|
归档日志备份脚本hotarcbackup.rcv文件如下:
connect target internal/oracle@host1 connect rcvcat rman/rman@host3 run { allocate channel t1 type 'SBT_TAPE'; sql 'alter system archive log current'; backup filesperset 20 format 'al_%s_%p_%t' (archivelog all delete input); }
|
4)利用Unix的crontab命令定期自动执行备份脚本
Crontab命令用于指定一个文件,其行计划命令以固定时间间隔执行。Cron是一个永久进程,它由/etc/rc.local启动执行。Cron程序读取、解释并执行crontab文件。我们将需自动定期执行备份的脚本文件写成shell命令行方式存入crontab文件中,由系统定期调度执行。Crontab文件的每一行由六个域(minutes、hours、day of month、month、day of week、command)组成,域之间用空格或Tab分开。
现在,我们在目标机上编写一个文件,用以启动自动备份进程。文件名定为Oracle,文件将放在/var/spool/cron/crontabs 目录下。Oracle文件内容:
0 23 * * 0 /oracle/rman/rman cmdfile ‘hotbackup.rcv’ # 星期天23点对数据库执行在线全备份 0 12,18 * * * /oracle/rman/rman cmdfile ‘hotarcbackup.rcv’ # 每天12点,18点执行归档文件备份
|
经过以上的操作后,系统每天自动产生两个归档日志备份,每个星期天产生一个数据库完全备份。DBA需要做的是,隔几天换一盘磁带(更换磁带的周期取决于备份文件的大小和磁带的容量)和用RMAN定期检查备份执行情况。
执行恢复操作的RMAN脚本文件restore.rcv如下(在host1上运行):
connect target connect rcvcat rman/rman@host3 run { allocate channel t1 type 'SBT_TAPE'; allocate channel t2 type 'SBT_TAPE'; restore controlfile; sql 'alter database mount'; restore database; recover database; sql 'alter database open resetlogs'; }
|
4.2、存储过程定期自动执行的实例
以下为将Salary表数据定时转入Salary_history表的应用实例:
创建存储过程
SQL> create or replace procedure ProcEmp IS begin insert into Salary_history (EmpId,EmpName,DptName,Salary,Month) select EmpId,EmpName,DptName,Salary, to_char(sysdate,'yyyy-mm') from Salary; commit; end ProcEmp; /
|
提交作业
SQL> variable jobno number; SQL> begin DBMS_JOB.SUBMIT(:jobno, 'ProcEmp;', SYSDATE, 'SYSDATE + 30'); --每30天运行一次 commit; end; /
|
运行作业
SQL>begin dbms_job.run(:jobno); end; /
|
五、结束语
Oracle实用工具RMAN的应用为DBA管理多个Oracle数据库提供了集中备份管理与恢复控制的机制,大大地减轻了DBA的工作压力,而DBMS_JOB包的使用增强了存储过程的应用功能,这样,他们就可以从备份数据及重复处理数据的繁琐中解脱出来,去做其它更有意义的工作。而数据库既实现了在线磁带备份,又实现了异机备份集中管理,相应提高了系统运行的安全性。
【相关文章】