1. 程式人生 > >oracle12c數據備份、恢復策略

oracle12c數據備份、恢復策略

arc compress pass overflow tom tps space 開始 esp

對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/PASSWORD@ORACLE_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/PASSWORD@${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數據備份、恢復策略