中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle RMAN 自動恢復

發布時間:2020-02-28 06:10:39 來源:網絡 閱讀:401 作者:MrChase 欄目:關系型數據庫


在日常工作中,有時會需要進行Oracle數據庫恢復,比如搭建測試環境、查找歷史數據、恢復測試等.

可以通過計劃任務或nohup等方式來執行恢復腳本從而提高整個操作的效率,特此記錄.

這里使用的測試環境如下:

OS PlatformRed Hat Enterprise Linux Server release 5.4 (Tikanga)- 64bit
DatabaseOracle Database 11g Enterprise Edition Release 11.2.0.1.0- 64bit


1. 在需要恢復數據庫的機子(本文中為testsvr01)上安裝Oracle軟件

2. Oracle數據庫的RMAN備份文件及相應的歸檔日志傳輸到目標機子(testsvr01),

  并確保oracle用戶有權限訪問,可以通過 chown-R oracle:oinstall /backup_dir命令

  改變備份文件的屬主

3. $ORACLE_HOME/dbs目錄下編輯參數文件pfile以便于啟動Oracle實例, 本文的pfileinitmydb.ora

  可以在源庫中通過create pfile 命令來創建pfile, 然后傳到目標機子,修改相應的參數值

pfile, 注意以下幾個參數的值

*.control_files='/data1/oradata/mydb/control01.ctl','/data1/oradata/mydb/control02.ctl','/data1/oradata/mydb/control03.ctl'
*.log_archive_dest_1='LOCATION=/data3/rman_bak/mydb/Arc'
*.log_archive_format='ARC%s_%t_%r.dbf'
*.db_name='mydb'
*.undo_tablespace='UNDOTBS1'
*.undo_management=auto
*.job_queue_processes=0


4. 確保pfile中使用到的目錄已經存在, 并且屬主為oracle

5. /home/oracle目錄下創建auto_recovery.sh腳本, 并賦予可執行權限

auto_recovery.sh 內容示例:

[root@ testsvr01 oracle]# cat auto_recovery.sh
#!/bin/bash
source /home/oracle/.bash_profile
 
SHELL_NAME=$(basename $0)
if [ $# -ne 1 ]; then
  echo -e "\n Usage:  ${SHELL_NAME} ORACLE_SID \n"
  exit
fi
 
ORACLE_SID=$1
SCRIPT_PATH=/home/oracle
RMAN_SQL=${SCRIPT_PATH}/${ORACLE_SID}_rman.sql
RMAN_LOG=${SCRIPT_PATH}/${ORACLE_SID}_rman.log
SQLPLUS_SQL=${SCRIPT_PATH}/${ORACLE_SID}_sqlplus.sql
SQLPLUS_LOG=${SCRIPT_PATH}/${ORACLE_SID}_sqlplus.log
CONTROL_SQL=${SCRIPT_PATH}/${ORACLE_SID}_control.sql
 
if [ ! -s ${RMAN_SQL} ]; then
  echo "${RMAN_SQL}  doesn't exist!"
  exit
elif [ ! -s ${SQLPLUS_SQL} ]; then
  echo "${SQLPLUS_SQL}  doesn't exist!"
  exit
elif [ ! -s ${CONTROL_SQL} ]; then
  echo "${CONTROL_SQL}  doesn't exist!"
  exit
else
  ls -lrth  ${SCRIPT_PATH}/${ORACLE_SID}*.sql
fi
 
 
su - oracle <<EOF
source /home/oracle/.bash_profile
export ORACLE_SID=$1
export ORACLE_HOME=/u01/app/oracle/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
 
echo -e "RMAN Part Begin... \n"
echo `date +'%Y%m%d %H:%M:%S'`
rman target / log='${RMAN_LOG}' cmdfile=${RMAN_SQL}
echo `date +'%Y%m%d %H:%M:%S'`
echo -e "RMAN Parat End. \n"
 
echo -e "SQLPLUS Part Begin... \n"
echo `date +'%Y%m%d %H:%M:%S'`
sqlplus -s / as sysdba @${SQLPLUS_SQL} $ORACLE_SID >  ${SQLPLUS_LOG}
echo `date +'%Y%m%d %H:%M:%S'`
echo -e "SQLPLUS Part End. \n"
EOF


 如果是Windows平臺,可以參考以下批處理,auto_recovery.bat:

@echo Oracle Auto Recovery
@set ORACLE_SID=mydb
@set ORACLE_BASE=C:\app
@set ORACLE_HOME=C:\app\product\11.2.0\dbhome_1
@set SCRIPT_PATH=D:\scripts
@set RMAN_SQL=%SCRIPT_PATH%\%ORACLE_SID%_rman.sql
@set RMAN_LOG=%SCRIPT_PATH%\%ORACLE_SID%_rman.log
@set SQLPLUS_SQL=%SCRIPT_PATH%\%ORACLE_SID%_sqlplus.sql
@set SQLPLUS_LOG=%SCRIPT_PATH%\%ORACLE_SID%_sqlplus.log
@set CONTROL_SQL=%SCRIPT_PATH%\%ORACLE_SID%_control.sql

date /t
time /t
@echo Creating Oracle Service...
oradim -new -sid %ORACLE_SID% -srvc OracleService%ORACLE_SID% -syspwd oracle -startmode manual -srvcstart demand -pfile %ORACLE_HOME%/database/init%ORACLE_SID%.ora

@REM echo Starting Oracle service...
@REM oradim -startup -sid %ORACLE_SID% -starttype srvc -pfile %ORACLE_HOME%/database/init%ORACLE_SID%.ora


%ORACLE_HOME%\Bin\rman target / log='%RMAN_LOG%' cmdfile=%RMAN_SQL%

%ORACLE_HOME%\Bin\sqlplus -s / as sysdba @%SQLPLUS_SQL% %ORACLE_SID% >  %SQLPLUS_LOG%

date /t
time /t
exit


6. /home/oracle目錄下編輯RMAN腳本${ORACLE_SID}_rman.sql,本文為mydb_rman.sql

mydb_rman.sql內容示例:

run{
startup nomount;
restore controlfile from '/data3/rman_bak/mydb/datafile/ MYDB_20170823_46007_1_CONTROL';
alter database mount;
crosscheck backup;
delete noprompt expired backup;
catalog start with '/data3/rman_bak/mydb/' noprompt;
allocate channel c1 device type disk;
allocate channel c2 device type disk;
set newname for datafile 1   to  '/data1/oradata/mydb/datafile/system.dbf';
set newname for datafile 2   to  '/data1/oradata/mydb/datafile/sysaux.dbf';
set newname for datafile 3   to  '/data1/oradata/mydb/datafile/undotbs1.dbf';
set newname for datafile 4   to  '/data1/oradata/mydb/datafile/users.dbf';
restore datafile 1;
restore datafile 2;
restore datafile 3;
restore datafile 4;
switch datafile all;
release channel c1;
release channel c2;
shutdown immediate;
}


7. /home/oracle目錄下編輯${ORACLE_SID}_sqlplus.sql腳本, 本文為mydb_sqlplus.sql

mydb_sqlplus.sql內容示例:

[root@ testsvr01 oracle]# cat mydb_sqlplus.sql
startup nomount;
@/home/oracle/&1._control.sql
set autorecovery on;
recover database using backup controlfile until cancel;
set autorecovery off;
alter database open resetlogs;
alter tablespace TEMP add tempfile '/data1/oradata/mydb/datafile/temp01.dbf'  size 1G autoextend off;
shutdown immediate;
startup;
alter session set nls_date_format='yyyy-mm-dd hh34:mi:ss';
select instance_name,status,startup_time from v$instance;
select name,open_mode,log_mode,sysdate from v$database;
shutdown immediate;
exit;


8. /home/oracle目錄下編輯用于創建控制文件的腳本${ORACLE_SID}_control.sql,本文為mydb_control.sql

mydb_control.sql內容示例:

[root@testsvr01 oracle]# cat mydb_control.sql
CREATE CONTROLFILE REUSE DATABASE "MYDB" RESETLOGS  noARCHIVELOG
    MAXLOGFILES 20
    MAXLOGMEMBERS 5
    MAXDATAFILES 1000
    MAXINSTANCES 8
    MAXLOGHISTORY 4927
LOGFILE
  GROUP 1 (
    '/data1/oradata/mydb/onlinelog/REDO1.log'
  ) SIZE 400M BLOCKSIZE 512,
  GROUP 2 (
    '/data1/oradata/mydb/onlinelog/REDO2.log'
  ) SIZE 400M BLOCKSIZE 512,
  GROUP 3 (
    '/data1/oradata/mydb/onlinelog/REDO3.log'
  ) SIZE 400M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/data1/oradata/mydb/datafile/system.dbf',
'/data1/oradata/mydb/datafile/sysaux.dbf',
'/data1/oradata/mydb/datafile/users.dbf',
'/data1/oradata/mydb/datafile/undotbs1.dbf'
CHARACTER SET WE8MSWIN1252
;


9. 通過crontabnohup在后臺執行auto_recovery.sh腳本

nohup /home/oracle/auto_recovery.sh mydb &

 

:

本文只是恢復了部分數據文件, 所以需要重建控制文件, 如果是全庫恢復,可以不用重建控制文件,將本文腳本進行適當的修改即可.

 


 

要點梳理

一、在recover, 如何自動應用歸檔日志

Oracle RMAN 自動恢復

根據Oracle官方文檔的介紹, 使用sqlplus實現自動recover有兩種方法:

1. 使用set autorecovery on命令, 即本文中使用的方法

2. recover命令中使用automatic選項

STARTUP MOUNT

RECOVER AUTOMATIC DATABASE

ALTER DATABASE OPEN

 

二、歸檔日志的路徑

一般來講, recover時所需要應用的歸檔日志默認存在于LOG_ARCHIVE_DEST_nLOG_ARCHIVE_FORMAT這兩個初始化參數所定義的路徑及文件名.如果相應的歸檔日志存在,Oracle可以自動應用它們.

如果目標庫與源庫中的路徑不一樣, 可以通過以下方法來修改LOG_ARCHIVE_DEST_nLOG_ARCHIVE_FORMAT這兩個參數的值

1. 修改pfile中對應參數的值

2. 使用alter system 命令修改

alter system set LOG_ARCHIVE_DEST_1 = 'LOCATION =  /oracle/oradata/trgt/arch/';

alter system set LOG_ARCHIVE_FORMAT =’ arcr_%t_%s.arc

 

如果不想修改以上兩個參數的值, 也可以通過以下方法來指定recover所需要用到的歸檔日志的路徑

1. 設定LOGSOURCE參數

set logsource ‘/tmp’

RECOVER AUTOMATIC TABLESPACE user

 

2. recover命令中使用FROM選項

RECOVER AUTOMATIC TABLESPACE users FROM "/tmp

 

--End.--

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉义市| 台江县| 安庆市| 雅安市| 即墨市| 体育| 临洮县| 龙门县| 秦皇岛市| 江门市| 凯里市| 阜康市| 北宁市| 肥西县| 嘉黎县| 台中县| 张家口市| 朔州市| 焉耆| 友谊县| 鄂伦春自治旗| 阳春市| 公安县| 丽水市| 新竹县| 田东县| 灵璧县| 甘肃省| 子长县| 东阳市| 元江| 奉贤区| 自治县| 沛县| 郁南县| 黄大仙区| 青田县| 津市市| 邯郸县| 新绛县| 乌兰察布市|