1 安装catalog数据库
如果没有instance则先创建。
设置本地服务名中catalog database为catalog_database
Target database为target_database
用system用户登录catalog数据库
sqlplus system/oracle@catalog_database
create tablespace rman_ts datafile ’/opt/oracle/oradata/catalog_database/rmants.dbf’--(需要修改路径,如果catalog数据库放在HA数据库中,这个表空间需要放在共享磁盘上) size 20m default storage( initial 100k next 100k pctincrease 0 );
create user rman identified by passw0rd--(需要修改密码) default tablespace rman_ts Temporary tablespace temp quota unlimited on rman_ts; grant recovery_catalog_owner to rman; grant connect,resource to rman;
2 做准备
2.1 设置target数据库并查看参数
查看LARGE_POOL_SIZE设置,使备份可以使用连续的缓冲池
sqlplus “/as sysdba”
show parameters large
查看DB_FIL_DIRECT_IO_COUNT设置,可以提高缓冲区的利用。
show parameters db_fil
2.2 设置target数据库block参数
指定block change tracking位置,打开block change tracking功能
alter database enable block change tracking using file '/opt/oracle/oradata/cutest/chg01.dbf';
是否已经打开的查看方法:
Select * from v$block_change_tracking;
2.3 打开target 数据库的归档
此处已经做完,对于MC来说,数据库会直接运行到open状态,这时需要修改oracle10g.sh文件,使数据库运行到nomount状态,这样就能修改某些参数了
A. 用操作系统oracle用户登录主机
B. 用操作系统用户登录数据库
sqlplus “/as sysdba”
C. 查看当前归档状态
archive log list;
D. 备份初始化文件
create pfile=’/home/oracle/pfilebackup20110318’ from spfile;
E. 配置归档日志名称和格式
alter system set log_archive_format='%S_%T_%R.log' scope=spfile;
F. 配置归档文件存放位置(首先要创建location的目录,注意目录后要有’/’)
alter system set log_archive_dest_1='location=/opt/oracle/oradata/cutest/arc' scope=spfile;
G. 运行下面命令关闭数据库
shutdown immediate
H. 将数据库开启到mount状态
startup mount
I. 开启归档模式
alter database archivelog;
J. 打开数据库
alter database open;
K. 测试是否产生归档日志
alter system switch logfile;
L. 查看当前状态
archive log list;
select log_mode from v$database;
2.4 将target数据库注册到catalog数据库中
A. 运行下面脚本
rman
RMAN>connect catalog rman/passw0rd@catalog_database
RMAN>create catalog tablespace rman_ts
RMAN>connect target system/oracle
RMAN>register database;
RMAN>resync catalog;
3 备份程序shell脚本
先要指定备份目录,对于HA来说备份目录需要放在共享磁盘中
在备份目录建立几个文件夹
mkdir data
mkdir log
mkdir data/1
touch data/1/aaa
mkdir data/7
touch data/7/aaa
mkdir data/14
touch data/14/aaa
mkdir data/21
touch data/21/aaa
mkdir data/28
touch data/28/aaa
mkdir data/temp
在备份目录创建rman_bak.sh文件,给该shell文件赋权
touch rman_bak.sh
chmod 777 rman_bak.sh
前提:ORACLE_BASE ORACLE_HOME NLS_LANG PATH都需要设置好
附上的是rman_bak.sh文件内容,需要在target数据库本机上运行该脚本。(需要设置前面几个参数)
rman_bak.sh文件见扩展
4 设置crontab
将oracle用户加入到crontab允许列表中
用root运行vi /etc/cron.allow(linux系统)
用root运行vi /usr/adm/cron/cron.allow(HPUX系统)
将oracle用户加入,立刻生效
以下用oracle身份执行
crontab –l
crontab –e
(需要修改shell文件的路径,HA也要设置该路径,可以先禁用)
备份策略:(备份时间需要再讨论)每月1日凌晨5点做0级备份,每月7/14/21/28日凌晨5点做1级备份,
0 5 1 * * nohup /opt/oracle/oradata/backup/rman_bak.sh 0 > /opt/oracle/oradata/backup/rman_bak.log &
0 5 7,14,21,28 * * nohup /opt/oracle/oradata/backup/rman_bak.sh 1 > /opt/oracle/oradata/backup/rman_bak.log &
5 重复设置
分别对下面几个数据库进行设置:
平台和HA,核心1和HA,核心2和HA
6 最小磁盘占用估算(5.7T)
平台核心数据库的全量备份2个(因为在每月月初全量备份需要存放两份)
平台核心数据库增量备份4个
归档日志存放8天
一份全量备份预计占用500G
一份增量备份≈min(归档日志*8,全量备份)
一天的归档日志大概占用100G
现阶段磁盘占用:
500G*2+500G*4+100G*8=3.8T
加上buffer,最小磁盘占用=3.8T*1.5=5.7T
7 恢复过程:
7.1 启动target数据库到nomount状态
sqlplus连接target数据库,将target数据库启动到nomount状态,此处需要用到pfile或者是spfile
sqlplus “/as sysdba”
shutdown immediate
startup nomount
exit
7.2 rman连接catalog数据库和target数据库
rman catalog rman/passw0rd@catalog_database target system/oracle(需要修改用户名和密码)
7.3 恢复控制文件
run {
allocate channel d1 type disk;
restore controlfile;
release channel d1;
}
7.4 查询数据文件
sqlplus连接catalog数据库,查询有几个数据文件和数据文件的号码
sqlplus rman/passw0rd@catalog_database(需要修改本地服务名)
select * from DF; (select file# from DF;)
7.5 rman恢复数据文件
(需要根据上面查询出的数据文件代码来写本部分代码)
run {
allocate channel d1 type disk;
sql "alter database mount";
restore datafile 1;
restore datafile 2;
restore datafile 3;
restore datafile 4;
restore datafile 5;
restore datafile 6;
release channel d1;
}
7.6 rman注册归档文件
sqlplus “/as sysdba”
alter system set "_allow_resetlogs_corruption"=true scope=spfile;
shutdown immediate
startup mount
rman catalog rman/passw0rd@catalog_database target system/oracle
(需要设置归档路径)
run {
set archivelog destination to '/db0/oradata/ora_bk/arc';
allocate channel d1 type disk;
restore archivelog all;
release channel d1;
}
exit
7.7 recover
sqlplus连接target数据库,根据日志做recover
sqlplus “/as sysdba”
recover database using backup controlfile until cancel;(本步骤可能会出现一个ora-1152错误,不用担心)
alter database open resetlogs;
7.8 查询数据库是否恢复
sqlplus连接target数据库,查询数据库是否恢复
select table_name from user_tables;
exit
7.9 同步
target数据库恢复后,做rman数据库的同步。(需要设置用户名和密码)
rman catalog rman/passw0rd@catalog_database target system/oracle
reset database;
[@more@]#!/bin/sh
#set env
PATH=$PATH:$HOME/bin
ORACLE_BASE=/opt/oracle
export ORACLE_BASE
export ORACLE_SID=cutest
export ORACLE_HOME=/opt/oracle/product/10.2.0
export PATH=$ORACLE_HOME/bin:/home/oracle/dba/bin:$PATH
DATE=`date +%d`
DATE_2=`date +%Y%m%d`
BACKUP_PATH=/opt/oracle/oradata/backup
TEMP_PATH=$BACKUP_PATH/data/temp
LEVEL=$@
TARGET_SID=cutest
TARGET_USERNAME=system
TARGET_PASS=oracle
RMAN_SID=catalog_database
RMAN_USERNAME=rman
RMAN_PASS=passw0rd
if [ $# != 1 ]; then
echo "usage: rman_bak.sh n where n is the rman backup level(0,1,2 is permitted)."
exit 1
fi
if [ $@ -ne 0 -a $@ -ne 1 -a $@ -ne 2 ]; then
echo "usage: rman_bak.sh n where n is the rman backup level(Only 0,1,2 is permitted)."
exit 2
fi
# Move data to temp folder
rm -rf $TEMP_PATH/*
mv $BACKUP_PATH/data/$DATE/* $TEMP_PATH/
echo "-----------------------------start-----------------------------";date
if [ $LEVEL = 0 ]; then
rman log $BACKUP_PATH/log/level.$TARGET_SID.$LEVEL.$DATE_2.log <connect target $TARGET_USERNAME/$TARGET_PASS;
connect catalog $RMAN_USERNAME/$RMAN_PASS@$RMAN_SID;
resync catalog;
run{
allocate channel c1 type disk ;
crosscheck backupset of archivelog all ;
backup filesperset 3 format '$BACKUP_PATH/data/$DATE/arch.%d.live.$LEVEL.%t'(archivelog from time 'sysdate-8' all delete input) ;
delete noprompt expired backupset of archivelog all ;
release channel c1 ;
}
run{
allocate channel c2 type disk ;
crosscheck backupset of database ;
backup incremental level $LEVEL filesperset 3 format '$BACKUP_PATH/data/$DATE/data.%d.live.$LEVEL.%t'(database include current controlfile) ;
delete noprompt expired backupset of database ;
delete noprompt obsolete ;
release channel c2 ;
}
exit;
EOF
else
rman log $BACKUP_PATH/log/level.$TARGET_SID.$LEVEL.$DATE_2.log <connect target $TARGET_USERNAME/TARGET_PASS;
connect catalog $RMAN_USERNAME/$RMAN_PASS@$RMAN_SID;
resync catalog;
run{
allocate channel c1 type disk ;
crosscheck backupset of archivelog all ;
backup filesperset 3 format '$BACKUP_PATH/data/$DATE/arch.%d.live.$LEVEL.%t' (archivelog from time 'sysdate-8') ;
delete noprompt expired backupset of archivelog all ;
release channel c1 ;
}
run{
allocate channel c2 type disk ;
crosscheck backupset of database ;
backup incremental level $LEVEL filesperset 3 format '$BACKUP_PATH/data/$DATE/data.%d.live.$LEVEL.%t' (database include current controlfile) ;
delete noprompt expired backupset of database ;
delete noprompt obsolete ;
release channel c2 ;
}
exit;
EOF
fi
exp $RMAN_USERNAME/$RMAN_PASS@$RMAN_SID file=$BACKUP_PATH/data/$DATE/live.rman.$DATE_2.dmp log=$BACKUP_PATH/log/$RMAN_SID.rman.$DATE_2.log
echo "------------------------------end------------------------------";date
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/41451/viewspace-1047908/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/41451/viewspace-1047908/