Useful and Simple srcipts for Oracle CoolBackup

来源:互联网 发布:多比特五子棋软件 编辑:程序博客网 时间:2024/06/03 16:54

Useful and Simple srcipts for Oracle CoolBackup


        过去很少有机会需要在生产环境中使用冷备。而且在大家印象中,拷贝也是很简单的事情。但事实上,客户的环境可能“千变万化”或者规划不清晰的时候,我们很容易漏掉其中的某个部分,准备的脚本无法通用,临时编辑,查找漏掉的文件,记录已经拷贝的文件.......而手忙脚乱。

        因此即使是冷备,我们也需要通用,简单、可靠的方法。 这次临时准备的脚本,在 Dataguard Disaster Recovery test 中帮我省了很多麻烦。



set feedback off; -- 禁止回显sql命令处理的记录条数(缺省为on)
set heading off; -- 禁止输出标题(缺省为on)
set trimspool on; -- 去除spool输出结果中每行的结尾空格(缺省为on)
set pagesize 0; -- 禁止分页输出
set linesize 1000; -- 设置每行的字符输出个数为1000,放置换行(缺省为80 )
set echo off; -- 不显示脚本中的每个sql命令(缺省为on)

冷备存放的目录最好单独创建,每个database存放在单独的目录:
mkdir -p /u01/coolbackup/test3/      --need modify!!
mkdir -p /u01/coolbackup/DB2/      --need modify!!
mkdir -p /u01/coolbackup/DB3/      --need modify!!

冷备:
vi /u01/coolbackup/lb_test3.sql                         --need modify!!

set feedback off verify off trimspool off
set heading off
set pagesize 0
set linesize 200
define dir='/u01/coolbackup/test3/'  --need modify!!
define lb='/u01/coolbackup/lb_test3.sh'                    --need modify!!
spool &lb
select '! cp ' || name || ' &dir' from v$datafile order by 1;
select '! cp ' || member || ' &dir' from v$logfile order by 1;
select '! cp ' || name || ' &dir' from v$controlfile order by 1;
select '! cp ' || name || ' &dir' from v$tempfile order by 1;
spool off
shutdown immediate
@&lb
Startup mount


冷备恢复: (注意从字符串右侧开始检测特定字符的方法)
vi /u01/coolbackup/lhf_test3.sql                                              --need modify!!

set feedback off verify off trimspool off
set heading off
set pagesize 0
set linesize 200
define dir='/u01/coolbackup/test3/'    --need modify!!
define lhf='/u01/coolbackup/lhf_test3.sh'                               --need modify!!
spool &lhf
select '! cp '|| ' &dir' || substr(name,instr(name,'/',-1,1)+1,100)||' '||substr(name,1,instr(name,'/',-1,1))  from v$datafile order by 1;
select '! cp '|| ' &dir' || substr(member,instr(member,'/',-1,1)+1,100)||' '||substr(member,1,instr(member,'/',-1,1))  from v$logfile order by 1;
select '! cp '|| ' &dir' || substr(name,instr(name,'/',-1,1)+1,100)||' '||substr(name,1,instr(name,'/',-1,1))  from v$controlfile order by 1;
select '! cp '|| ' &dir' || substr(name,instr(name,'/',-1,1)+1,100)||' '||substr(name,1,instr(name,'/',-1,1))  from v$tempfile order by 1;
spool off
shutdown immediate
@&lhf
Startup mount



这样不管数据文件、控制文件、在线日志、standby日志被扔到那个角落,我们全部可以准确找到其位置并拷贝至指定目录,或者将备份文件准确的放回原路径。

一个脚本可多次重复执行是很重要的。当然这也完全没有问题。


特此记录。


参考:

练习冷备份时的杂想



0 0
原创粉丝点击