oracle12c数据备份恢复策略

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle12c数据备份恢复策略相关的知识,希望对你有一定的参考价值。

对oracle不太了解,只会简单的startup、shutdown、lsnrctl start等命令,不喜欢oracle,不好用

请按实际情况修改username、password、ORACLE_SID、/PATH/TO/DIR等


expdp全备

注意expdp只能全备,不能进行增量备份

创建备份文件存放目录

 -- 创建备份存放目录(目录要已存在)
 create or replace directory DMP_DIR as '/PATH/TO/DIR';
-- 对用户授权,给读写权限
  grant read,write on directory DMP_DIR to USERNAME; 
-- 查看目录
  select * from all_directories;
-- 或
  select * dba_directories;


-- 查看ORACLE_SID
 select instance from v$thread;

expdp全备数据库脚本

#!/bin/bash
source /home/oracle/.bash_profile

export ORACLE_BASE=/PATH/TO/ORACLE/BASE

export ORACLE_HOME=$ORACLE_BASE/product/12.1.0/dbhome_1

export ORACLE_SID=${ORACLE_SID}

export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib

DATE=`date +%Y%m%d`;
expdp UESRNAME/[email protected]_SID directory=DUMP_DIR dumpfile=FILENAME_$DATE.dmp logfile=expdp_FILENAME_$DATE.log

参考文档:expdp介绍    非常详细

                 官方文档


impdp数据恢复

-- 创建表空间,并设置自增长(注意修改TABLESPACENAME和路径)(因为一个表空间文件的大小是有限制的,100多G的样子,所以添加多个表空间文件)
create tablespace TABLESPACENAME  datafile  '/PATH/TO/TABLESPACE/TABLESPACENAME.dbf' size 2g autoextend on; 
alter tablespace TABLESPACENAME add datafile '/PATH/TO/TABLESPACE/TABLESPACENAME01.dbf' size 2g autoextend on; 
-- 创建用户(环境和备份时要一样)
create user USERNAME identified by PASSWORD default tablespace TABLESPACENAME;
--  授权用户
grant dba to USERNAME;
--如果认为dba权限太大,就只赋予需要的权限
grant execute on SYS.DBMS_LOCK to USERNAME;
grant execute on SYS.DBMS_PIPE to USERNAME;
grant execute on SYS.DBMS_CRYPTO to USERNAME;
-- 创建备份文件存放目录(目录要已存在)
create directory DUMP_DIR as '/PATH/TO/DIR'; 
-- 目录读写授权
Grant read,write on directory DUMP_DIR to USERNAME;
-- 恢复数据,如果没有修改tablespace的名字, remap_tablespace就不需要
impdp USERNAME/[email protected]${ORACLE_SID} directory=DUMP_DIR dumpfile=FILENAME_$DATE.dmp logfile=imp_FILENAME_$DATE.log  remap_tablespace=OLD_TABLESPACENAME:TABLESPACENAME

RMAN增量备份

理解差距太大,就不献丑了

RMAN备份数据

RMAN恢复数据

Oracle RMAN 增量备份完整恢复测试


以下为RMAN增量备份脚本(需要改ORACLE_SID和DUMP_DIR)

增量备份等级
0:相当于full backup,备份整个datafile blocks,可以作为增量备份的起点;
1-4:该等级有2个备份模式
差异性增量备份:备份包括从level n or lower的改变块,n可指定;lower为大数字
累积性增量备份:备份包括从level n-1 or lower的改变块,n可指定
例如差异性增量备份是备份每天改变的块,而累积性增量备份从起点开始多天改变的块。

备份效果为:

以周为一个周期,星期天为起始时间,星期天就行一次全备,星期一、二、三就行累积性增量备份,星期四进行差异性增量备份,星期五、六进行累积性增量备份,每个月的1号会进行一次清除


#!/bin/bash
source /home/oracle/.bash_profile
#ORACLE_SID=ORACLE_SID  #改ORACLE_SID
#ORACLE_HOME=  #ORACLE_HOME
echo "ORACLE_SID = ${ORACLE_SID},ORACLE_HOME = $ORACLE_HOME"
LOGFILE=`dirname $0`/orabkup.log
echo "see logfile in "$LOGFILE
date=`date +%Y-%m-%d`
echo "----------------------------start backup ----------------------------------" >> $LOGFILE
date >>$LOGFILE
#every 1th day of month truncate the logfile
dy=`date +%d`
if [ $dy -eq 1 ]; then
 cat /dev/null > $LOGFILE
fi
unset dy

WEEK_DAILY=`date +%a`
case  "$WEEK_DAILY" in
      "Mon")
           BAK_LEVEL=2;;
      "Tue")
           BAK_LEVEL=2;;
      "Wed")
           BAK_LEVEL=2;;
      "Thu")
           BAK_LEVEL=1;;
      "Fri")
           BAK_LEVEL=2;;
      "Sat")
           BAK_LEVEL=2;;
      "Sun")
           BAK_LEVEL=0;;
      "*")
           BAK_LEVEL=error
esac
echo "Today is $WEEK_DAILY ,backup level is $BAK_LEVEL" >> $LOGFILE

$ORACLE_HOME/bin/rman target / 1>>$LOGFILE  <<EOF
run{ allocate channel c1 device type disk;
    allocate channel c2 device type disk;
    allocate channel c3 device type disk;
    allocate channel c4 device type disk;
    crosscheck backup;
backup as compressed backupset
   incremental level $BAK_LEVEL tag '${ORACLE_SID}_lev_$BAK_LEVEL'
database include current controlfile format 'DUMP_DIR/${ORACLE_SID}_%U_%T.bak';
release channel c1;
release channel c2;
release channel c3;
release channel c4;
sql 'alter system archive log current';
delete noprompt expired backup;
delete noprompt obsolete device type disk;
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog all completed before 'sysdate-7';
#exit
}
EOF

date >>$LOGFILE
echo "---------------------------end backup ----------------------------------" >> $LOGFILE



以上是关于oracle12c数据备份恢复策略的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记:Oracle 12C 数据非常规恢复工具bbed的使用说明

案例:Oracle dul数据挖掘 非常规对ORACLE 12C CDB数据库进行恢复

技术指南:在Oracle Database 11g和12c中使用恢复目录的关键技术及相关热门认证推荐

oracle 12c 多租户 pdb 恢复(单个pdb数据文件非系统pdb表空间整个pdb数据库)

Oracle 12C rman

Oracle 12C 新特性之 恢复表