• linux 定时自动备份oracle数据库


    0,目前闲下来了,搞个数据库备份吧,开始...

    1,写一份脚本执行导出数据库

    #!/bin/sh
    echo bakup start......................
    export PATH
    export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
    export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin
    export ORACLE_SID=myorcl
    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    date=`date +%Y_%m_%d`
    days=7
    orsid=127.0.0.1:1521/myorcl  #Oracle数据库服务器IP、端口、SID
    bakuser=user #用户名称
    bakpass=pass #用户密码
    bakdir=/data/db_backup #备份文件路径,需要提前创建好
    dmpdirectory=db_backup
    dmpversion=19.3.0.0.0 #导出数据的oracle版本
    for orowner in user1 user2
    do
    bakdata=$orowner"_"$date.dmp #备份数据库名称
    cd $bakdir #进入备份目录
    echo start exp $bakdata .............Time: $date........Orowner:$orowner.................
    expdp userid=$bakuser/$bakpass@$orsid schemas=$orowner directory=$dmpdirectory dumpfile=$bakdata version=$dmpversion
    find $bakdir -type f -name "*.log" -mtime +$days -exec rm {} \; #删除备份文件
    find $bakdir -type f -name "*.dmp" -mtime +$days -exec rm {} \; #删除日志文件
    echo "....................$orowner backup end............................"
    done
    exit

    1.1其中的问题

    首先脚本需要各种环境变量的获取
    登录到oracle用户执行以下命令:
    cat ~/.bash_profile 将用到的直接复制进去就好了

    1.2创建导出的.dmp文件目录并授权

    创建备份目录用于存放数据泵文件,方便自己使用
    mkdir db_backup
    chmod 777 db_backup
    登录到数据库sysdba用户,将数据泵文件目录关联上
    su - oracle
    sqlplus /nolog
    conn / as sysdba
    create or replace directory db_backup as '/data/db_backup';
    grant read,write on directory db_backup to userdba;

    1.3将脚本放入/etc/cron.d 并赋予脚本可执行权限

    输入 crontab -e 进入cron表达式执行脚本代码编辑界面
    三个分别为每分钟执行,每分钟执行,每日凌晨1点执行
    linux的cron表达式须要以下的规则:
     
     
    当你编写完毕出现上图所示提示信息说明你编写的表达式有误,输入y重新编写
    修改成功后会提示如下信息
    此时可以执行 service crond restart 重启crond服务检验自己的脚本
    我的日志目录是在 cd /var/log/cron 这个下面
    直接执行 tail -f cron 查看日志

    1.4 日志报错

    1.4.1日志中可能会报错

    图摘自互联网,我确实也遇见了~,不是运维只能边走边百度,摸着黑一步一步淌,成功了记录下来
    错误原因:这个文件在Windows 下编辑过,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以才会有 多出来的\r。
    解决方案:使用指令sed -i 's/\r$//' xxxxxxx.sh,上面的指令会把 xxxxxxx.sh 中的\r 替换成空白!

    1.4.2日志中可能会报错

    ORA-39002: invalid operation
    ORA-39070: Unable to open the log file.
    ORA-29283: invalid file operation ORA-06512: at "SYS.UTL_FILE", line 536
    ORA-29283: invalid file operation
    错误原因:1、对存放dmp文件或log文件的路径不存在,或者没有权限, 2、对dmp文件没有权限
    解决方案:未解决,我直接删除了expdp 命令时需要日志的参数,不要日志导出,绕开了该问题

    1.5成功!

    有问题可以评论留言!

     

  • 相关阅读:
    crawlspider的源码学习
    df 参数说明
    Linux top 命令各参数详解
    Redis info参数总结
    python 读写 Excel文件
    python之Selenium库的使用
    heapq模块
    Python数据库连接池DButils
    【leetcode】701. Insert into a Binary Search Tree
    【leetcode】940. Distinct Subsequences II
  • 原文地址:https://www.cnblogs.com/s88888888/p/15818813.html
Copyright © 2020-2023  润新知