• 基于Linux的oracle数据库管理 part6 (backup 相关的脚本)


    这里只是简单的介绍几种 备份方法

    备份: 逻辑备份, 冷备份, 热备份

    逻辑备份 也称作 导入(import), 导出(export), 作用是在不同的oracle数据库之间转移数据

    物理备份, 就是操作系统级别的文件复制

    rman 备份, 是oracle的主要备份方式, rman备份原理与物理备份基本类似, 但是功能更加强大, 主要特点如下:

    1) 命令行方式

    2) 只备份数据文件中的非空数据块, 而不是备份整个数据文件, 显然这样大大节省了存储空间及备份时间

    3) 可以进行增量备份, 即只备份上次备份操作以来发生改变的数据块

    4) 可以设置自动备份控制文件及spfile

    冷备份: 数据库正常关闭状态下的全库备份, 因为事务时正常结束的, 所以, 冷备份可以用来直接恢复数据库, 而不必应用重做日志.

    热备份: 是在数据库打开的状态备份的, 备份文件的数据相互不一致, 所以, 在做热备时, 必须应用归档重做日志或联机重做日志恢复数据库到一致状态.

    完全恢复: 借用 重做日志与归档日志 将数据库恢复到一致状态.

    不完全恢复: 由于归档日志或者联机日志文件丢失, 另一种情况是, 用户执行了错误操作, 需要恢复到数据库以前状态, 类似 flashback

    还原(restore): 把备份文件复制回原来目录的过程

    恢复(recover): 还原后, 对备份文件应用归档重做日志或联机重做日志, 使其数据达到最新状态的过程.

    全库冷备 shell

    #! /bin/bash
    
    backup_dir=/oracle/back
    log_file = $ORACLE_BASE/admin/$ORACLE_SID/cold_backup_$ORACLE_SID.log
    echo "Begin cold backup" > $log_file
    date >> $log_file
    
    sqlplus -s /as sysdba << EOF > $log_file
    set pagesize 0
    set linesize 1000
    spool file_copy_$ORACLE_SID.sh
    select `cp` || name || `$backup_dir/` from v$controlfile;
    select `cp` || filename || `$backup_dir/` from dba_data_files;
    select `cp` || member || `$backup_dir/` from v$logfile;
    spool off
    
    # prepare finish, now start shutdown db and move the file
    shutdown immediate
    !bash file_copy_$ORACLE_SID.sh
    startup;
    exit;
    eof
    
    # 清理战场
    rm -f file_copy_$ORACLE_SID.sh
    
    if [ -e $ORACLE_HOME/dbs/init$ORACLE_SID.ora ]
    then
      cp $ORACLE_HOME/dbs/init$ORACLE_SID.ora $backup_dir /
    fi
    
    if [ -e $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora ]
    then
      # cp $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora $backup_dir/
    fi
    
    if [ -e $ORACLE_HOME/dbs/orapw$ORACLE_SID ]
    then
      # cp $ORACLE_HOME/dbs/prapw$ORACLE_SID $backup_dir/
    fi
    
    echo "Cold backup finished." >> $log_file
    date >> $log_file

    全库热备 shell

    物理热备, 只能一次备份一个表空间, 而且要预先将要备份的表空间置于备份状态, 热备完成后, 要结束备份状态. 使用热备恢复肯定要用到归档日志, 所以, 如果要使用热备, 数据库必须使用归档模式

    alter tablespace tablespace_name begin backup

    alter tablesapce tablespace_name end backup

    #! /bin/bash
    
    backup_dir = /oracle/backup
    log_file = $ORACLE_BASE/admin/$ORACLE_SID/hot_bakcup_$ORACLE_SID.log
    echo "Begin hot backup..." > $log_file
    date >> $log_file
    
    sqlplus -s /as sysdba << EOF >> $log_file
    alter database backup controlfile to `/$backup_dir/backup_controlfile.ctl`;
    set pagesize 0
    set linesize 1000
    set feedback off
    column tablespace_name noprin
    column sortorder noprin
    column textout format a120
    
    spool hot_backup_$ORACLE_SID.sql
    
    select tablespace_name, '1' sortorder, 'alter tablespace' || tablespace_name || 'begin backup;' textout
    from dba_data_files
    union
    select tablespace_name, '2' sortorder, 'host cp' || file_name || ' ' || '$backup_dir' textout
    from dba_data_files
    union
    select tablespace_name, '3' sortorder, 'alter tablespace' || tablespace_name || 'end backup;' textout
    from dba_data_files
    order by tablespace_name, sortorder, textout;
    
    select 'alter system archivelog current;' from dual;
    spool off
    
    @hot_backup_$ORACLE_SID.sql
    exit
    EOF
    
    rm -f hot_backup_$ORACLE_SID.sql
    echo "Hot bakcup finished." >> $log_file

    RMAN 备份 shell 程序

    在进行 rman 备份之前要先进行数据库归档设置, 并配置 rman 备份文件所在的目录以及自动备份控制文件及 spfile.

    使用 rman 备份数据库, 根据备份信息保存的位置(注意, 不是备份集, 而是备份集的信息(元数据), 可以分为两种方式: 一是使用备份数据库(这个要备份的数据库成为目标target数据库)的控制文件保存备份集信息, 二是使用另外一个数据库保存备份集信息, 这个数据库一般成为目录(catalog)数据库), 很明显, 第二种方式更安全, 但要先配置 catalog 数据库. 第一种方式, 除了rman之外, 不需要进行任何配置.

    下边采用的是第1种方式, 因为主要是要介绍 rman的shell程序

    首先, 确认是否为归档模式:

    sqlplus /nolog, conn /as sysdba

    archive log list;

    --------------------------------------------------------------------------------

    如果是非归档模式, alter system set log_archive_dest_1 = ‘location=/oracle/arch’;

    然后重启数据库至 mount 状态, 设置运行归档模式:

    startup mount

    alter database archivelog;

    alter database open;

    archive log list;  -- 确认是否修改成功

    --------------------------------------------------------------------------------

    配置 rman

    默认情况下, rman 生成的备份文件会创建到数据库的 flash_recovery_area 参数所指定的路径下, 下面先来配置 flash_recovery_area 大小及路径, 如下:

    sqlplus /nolog , conn /as sysdba

    alter system set db_recovery_file_dest_size=2G;

    alter system set db_recovery_file_dest=’/oracle/flash_recovery_area’;

    然后, 可以启动 rman, 并以 sys用户连接到数据库, 备份数据文件 4:

    rman target /

    backup datafile 4;

    然后, 在我们刚才设置的目录里, 你就会看到备份的文件.

    设置, 每次rman备份时, 都会备份control file 和 spfile:

    connect target /

    configure controlfile autobackup on

    # !/bin/bash
    
    if [ $1 ]
    then
      backup_level = $1
    else
      backup_level = 0
    fi
    
    backup_user = sys
    backup_user_pw = oracle
    
    # caltalog_user = rman
    # catalog_user_pw = rman
    
    log_file=/oracle/admin/$ORACLE_SID/rman_backup.log
    
    echo "Begin rman backup ..." > $log_file
    date >> $log_file
    
    rman target $backup_user/$backup_user_pw << EOF > $log_file
    # catlog $catlog_user/$catlog_user_pw@rman
    
    bakcup incremental level = $backup_level database;
    quit;
    EOF
    echo "rman backup finished." >> $log_file
    date >> $log_file

    逻辑备份 shell

    # !/bin/bash
    
    log_file = /oracle/admin/$ORACLE_SID/full_exp_$ORACLE_SID.log
    exp_arguments="userid=system/oracle buffer = 10485760 owner = $1"
    
    if [ $2 ]
    then
      exp_arguments = "$exp_arguments file = $2"
    else
      exp_arguments = "$exp_arguments file = "$ORACLE_SID"_full_export.dmp"
    fi
    
    echo "Begin full db export ..." > $log_file
    echo "Exporting with folling arguments : $exp_arguments" >> $log_file
    exp $exp_arguments >> $log_file 2>&1
    echo "Export finished." >> $log_file
    date >> $log_file
    
    exp_result = $?
    if [ exp_result != 0 ]
    then
      mail -s "Errors in xeporting $ORACLE_SID." asdf@126.com < $log_file
    fi
  • 相关阅读:
    C# 灵活切换开发/测试/生成环境web.config
    c# sqlserver 删除大批量数据超时
    vue 上传进度显示
    sqlserver the name is not a valid identifier error in function
    WEBAPI 设置上传文件大小
    vue 获取视频时长
    webapi 导入excel处理数据
    vscode 通过ftp发布vue到azure服务器
    C# 汉字转拼音
    静态代码扫描工具
  • 原文地址:https://www.cnblogs.com/moveofgod/p/3979378.html
Copyright © 2020-2023  润新知