一个冷备份的自动执行脚本

花了一天多时间,捣鼓出一个SQL 脚本,用于执行ORACLE自动冷备份。记录如下:

set echo off                               --关闭命令回显,但会显示执行后的命令。
set serveroutput on                        --返回结果,如果关闭,将无法把结果传到下一个文件。
set escape on                              --打开转义符功能,否则遇到/无法进行。
set heading off                            --关闭结果标题行显示
set line 300                               --设置返回结果显示宽度,避免遇到结果跨行后sed命令取结果不完整。
ho mkdir $ORACLE_HOME/`date +%Y_%m_%d`     --创建存放备份文件的目录,以当天日期命名。要保证与下面SQL中目录一致。
spool  /tmp/bak1.sql
declare                                    --声明一个变量。用于接收当前日期的值。
v_time varchar2(30);
begin
select to_char(sysdate,‘yyyy_mm_dd‘) into v_time   --获取当天日期。
from dual;
dbms_output.put_line(‘select ‘‘ho cp ‘‘\|\|name\|\|‘‘ $ORACLE_HOME\/‘||v_time||‘‘‘ from v$controlfile;‘);
dbms_output.put_line(‘select ‘‘ho cp ‘‘\|\|name\|\|‘‘ $ORACLE_HOME\/‘||v_time||‘‘‘ from v$datafile;‘);
dbms_output.put_line(‘select ‘‘ho cp ‘‘\|\|member\|\|‘‘ $ORACLE_HOME\/‘||v_time||‘‘‘ from v$logfile;‘);
dbms_output.put_line(‘select ‘‘ho cp ‘‘\|\|name\|\|‘‘ $ORACLE_HOME\/‘||v_time||‘‘‘ from v$tempfile;‘);
dbms_output.put_line(‘create pfile=‘‘$ORACLE_HOME\/‘||v_time||‘\/init$ORACLE_SID.ora‘‘ from spfile;‘);
dbms_output.put_line(‘ho cp $ORACLE_HOME\/dbs\/orapw$ORACLE_SID $ORACLE_HOME\/‘||v_time);
end;
/
spool off
 --以上通过获取日期后,得到带有日期值的完整的SQL原始语句和一些结果说明语句。
 --以下获取纯净的用来执行的原始SQL语句。
ho sed -n ‘/select/p‘ /tmp/bak1.sql >/tmp/bak2.sql
ho sed -n ‘/^create/p‘ /tmp/bak1.sql >>/tmp/bak2.sql
ho sed -n ‘/^ho cp/p;‘ /tmp/bak1.sql >>/tmp/bak2.sql
--以下用来将原始SQL语句执行得到SQLPLUS语句,并备份了参数文件和密码文件,以及结果说明语句。
spool /tmp/bak3.sql
start /tmp/bak2.sql
spool off
ho sed -n ‘/^ho cp/p‘ /tmp/bak3.sql >$ORACLE_HOME/back.sql     --过滤掉无用的结果说明语句。获取最终有用的SQLPLUS命令。
shutdown immediate                                             --关闭数据库进行冷备。
start $ORACLE_HOME/back.sql
startup
ho rm /tmp/bak*.sql $ORACLE_HOME/back.sql                      --删除临时生成的执行脚本。

说明:1.SQL下获取当前日期值,并应用到SQLPLUS命令的目录中是一个难点,折腾了一天。

2.sed命令可以用sed -i来简化生成的过渡性sql脚本。

3.应该可以在SQLPLUS下定义变量并赋予当天日期值,再运用到其他备份命令中,暂时没搞成功,回头有时间再研究。

4.这是为了学习而搞得一个SQL脚本,或许用系统shell脚本来做,会更简洁有效。下一步再做一个系统shell脚本。

时间: 2024-08-05 11:17:57

一个冷备份的自动执行脚本的相关文章

使用php作linux自动执行脚本

使用php作linux自动执行脚本 [来源] 达内    [编辑] 达内   [时间]2013-03-21 在作社区时, 时常需要统计上线人数等数据. 一般做法是, 把这段代码放在用户 login或者某一个页面中, 以便在用户登录或访问到该时,触发运行该代码. 这样 一来, 会造成一个问题, 如果该代码教复杂, 明显减慢该页的正常调用速度. 最近在用PHP(PHP培训 php教程 )作一社区, 在写到计算最高上线人数时, 成功调试出把PHP作为 shell script直接在服务器上运行. 在作

yii linux 自动执行脚本

今天用yii开发的系统中要配置一个自定执行的脚本 1.配置好product/config/console.php里面需要用到的组件,像数据库连接 'db'=>array(     'connectionString' => 'mysql:host=localhost;dbname=testdrive',     'emulatePrepare' => true,     'username' => 'root',     'password' => '', ), 2.继承CC

windows 建立任务执行计划 自动执行脚本

对于windows服务器网站如果要定时执行脚本,则需要在windows控制面板里找到 管理工具,点击任务计划程序,创建任务填写任务名称 触发器里新建触发条件,设置间隔时间 在操作项,新建触发时需要做的操作,这时我们在新建一个批处理文件,里面写入要执行的命令, 例如: "E:\phpStudy\php\php-5.5.38\php.exe" -f  "E:\phpStudy\test.php"; 或者直接执行url方法 "E:\phpStudy\php\ph

Linux 开机自动执行脚本设置

1.首先将需要开机自动执行的脚本demoshell复制到/etc/init.d下 2.修改此脚本的权限 chmod 755 /etc/init.d/demoshell 3.设置启动时执行此脚本 cd /etc/init.d update-rc.d demoshell  defaults 95 最后的数字表示执行顺序,是第几个被执行的 这个命令 等价于update-rc.d demoshell start 95 2 3 4 5 . stop 95 0 1 6表示在Linux的运行2,3,4,5的级

WinSCP自动执行脚本

我们经常使用WinSCP工具通过sftp协议上传获取文件,本文描述通过bat批量处理文件. 首先,我们打开dos命令窗口使用 cd \d :D\WinSCP 打开WinSCP安装目录 上传文件: winscp.exe /console /command "option batch continue" "option confirm off" "open sftp://user:[email protected]:port" "optio

visudo修改权限后,无法自动执行脚本

很奇怪为什么明明用sudo可以执行成功脚本,但脚本自己不能自动运行. 原来是如下sudoers里面的如下设置未被注释 ## Disable "ssh hostname sudo <cmd>", because it will show the password in clear.# You have to run "ssh -t hostname sudo <cmd>".## Defaults requiretty 原文地址:https://

使用python写自动执行脚本并将结果返回到html中

终于在今天完成了django项目开发的一个小项目,使用python写一个自动化上线的项目.使用到了python3.5,django 1.11.2,ansible,centos7. 功能描述如下: 1.使用网页点击要上线的项目 2.在后台系统执行过程中浏览器等待后台命令调用 3.在上线完成后将后台执行的结果回传到浏览器中. 步骤解说: 1.在django中要分清楚get和post的请求方式 2.使用subprocess.Popen调用时stdout时是byes类型需要使用str(stdout,en

linux下使用shell 自动执行脚本文件

以下实例本人在Centos6.5 64位操作系统中使用 一.定时复制文件 a.在/usr/local/wfjb_web_back目录下创建 tomcatBack.sh文件 文件内容: #将tomcat中的应用wfjb_web 复制到 /usr/local/wfjb_web_back/tomcat_back/目录下 并按照日期作为文件名称cp -af /usr/local/apache-tomcat-7.0.73/webapps/wfjb_web /usr/local/wfjb_web_back/

用js实现在加载完成一个页面后自动执行一个方法

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html lang="en"> <