oracle12c數據備份、恢復策略
阿新 • • 發佈:2018-01-11
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數據備份、恢復策略