龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

Oracle的恢复管理器及DBMS_JOB包分析(1)(2)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
2) 将目标数据库改为归档模式运行。 SVRMGR> connect internal SVRMGR> startup mount [dbname] SVRMGR> alter database [dbname] archivelog; --起用归档模式 SVRMGR> archive log start --启动

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包的使用增强了存储过程的应用功能,这样,他们就可以从备份数据及重复处理数据的繁琐中解脱出来,去做其它更有意义的工作。而数据库既实现了在线磁带备份,又实现了异机备份集中管理,相应提高了系统运行的安全性。

【相关文章】

精彩图集

赞助商链接