zoukankan      html  css  js  c++  java
  • [自动运维]oracle自动备份

      数据是应用的核心部分,程序坏了换台机器重新发布就可以,但数据一旦丢失,造成的损失将不可挽回,程序发布到生产后,数据的备份便显得尤为重要,由于不一定所有的服务均有资金完成高级的备份如RAC和DG,在我们只有一台数据库服务器的,暂时采取最简单的备份策略,export出dmp进行保存。

    一、备份脚本

    1、初始化变量,记录开始日志

    #变量
    sysname=填写自己的系统名称
    syspath=/home/oracle/databak/$sysname
    v_date=$(date '+%Y%m%d%H%M%S')
    #日志目录
    logfile=${syspath}/backup.${v_date}.log
    #打印开始时间
    echo backup_time>>${logfile}
    date '+%Y-%m-%d %H:%M:%S' >> ${logfile}
    
    echo "backup jcd">>${logfile}
    echo "start_time">>${logfile}
    date '+%Y-%m-%d %H:%M:%S' >> ${logfile}
    

    2、进入oracle目录,设置oracle的参数

    #进入oracle目录,设置oracle变量
    cd /home/11g/app/oracle/product/11.2.0
    export ORACLE_HOME=/home/11g/app/oracle/product/11.2.0/db_1
    export PATH=$PATH:/home/11g/app/oracle/product/11.2.0/db_1/bin
    export ORACLE_SID=SID名称

    3、导出数据

    echo $syspath
    v_date=$(date '+%Y%m%d%H%M%S')
    filename=$syspath/jcd${v_date}.dmp
    #导出命令
    exp username/password file=${filename} compress=n >> ${logfile}
    echo "end_time">>${logfile}
    date '+%Y-%m-%d %H:%M:%S'>>${logfile}

    4、压缩dump包

    gzip ${filename}

    5、使用scp,将压缩后的包传递到备份服务器,注意备份服务器上目录需要预先创建

    scp ${filename}.gz remot_name@remot_ip:/home/weblogic/databak/备份目录

    二、设定脚本执行时间

    我们设定规则为每天凌晨2点执行一次,采用crontab来进行处理

    执行crontab -e,设定如下规则

    0 2 * * * sh /home/oracle/db.sh

    三、关于scp命令密码处理

    执行scp命令时候,会提示输入远程主机的密码

    scp ${filename}.gz remot_name@remot_ip:/home/weblogic/databak/备份目录

    此时有两种处理办法进行解决:

    1、使用加密文件进行认证

    1)进入本地主机的~/.ssh目录下

    2)运行ssh-keygen -t [rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub,此处我们使用rsa方式进行

    3)将生成的id_rsa和id_rsa.pub权限修改为700

    4)将.pub文件复制到远程主机的~/.ssh目录,执行cat id_rsa.pub >> ~/.ssh/authorized_keys,将内容拷入authorized_keys文件

    5)修改authorized权限为700

      完成以上修改之后,从本地主机scp到远程主机便无须密码,简单理解应该是通讯时候,本地主机发送scp指令时,采用本地私钥进行签名,远程主机使用公钥验签后,判断问主机可以信赖,开放通讯服务。

    2、使用expect命令完成密码交互

      expect命令主要用于脚本中出现必须人工干预的情况下,预先输入指令,模拟的场景为使用expect命令捕捉到提示输入指令的文字,一旦文字出现,自动使用send命令输入需要交互的命令。

      此处使用为:

      expect "*password:"#此处填写系统提示文字
      send "your password
    "#此处填写我们输入的交互命令
      expect eof
  • 相关阅读:
    Js--小笔记
    Android Gson解析
    java格式化数字、货币、金钱
    关于Edittext默认弹出软键盘为数字键
    生日星座自动匹配
    ANDROID STUDIO系列教程六--GRADLE多渠道打包
    框架,简化了代码的同时,也让我们慢慢变蠢
    Android开发实现高德地图定位
    onNewIntent调用时机
    EditText输入手机号自动带空格
  • 原文地址:https://www.cnblogs.com/jyyzzjl/p/5189115.html
Copyright © 2011-2022 走看看