RMAN初始化方案
本方案在初始化过程中,不需要源数据库停机。
步骤如下:
生产端===============================================
1) 源端和目标端安装OGG软件,并启动manager
2) 源端配置OGG的Extract及DataPump
3) 源端启动Extract进程,并且人工记录抽取进程启动的时间点,例如:“2011-05-03 11:20:55” ,将此时间点作为在下一步中查找长事务的一个判断条件;可以在数据库中查询该时间点:”select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual”
4) 长事务处理:在V$TRANSACTION中查找当前正在运行的事务(RAC环境下,查看gv$transaction),并找出相应的长事务。在执行rman备份之前,确保这些长事务已经完成,或者被kill掉(需要得到dba或者相关管理人员的确认)。
Select start_time from gv$transaction where to_date(start_time, ‘yyyy-mm-dd hh24:mi:ss’)<to_date(’2011-05-03 11:20:55′, ‘yyyy-mm-dd hh24:mi:ss’);
注:通过上面的SQL语句查找到比第3歩中记录下的时间点早的事务,需要等到该事务结束,然后执行rman的备份;
5) 使用oracle用户登录,执行rman备份
–备份数据库:
$rman target /
run {
allocate channel ch00 type disk maxpiecesize 20g;
allocate channel ch01 type disk maxpiecesize 20g;
crosscheck backupset;
delete noprompt expired backupset;
sql ‘alter system archive log current’;
backup as backupset skip inaccessible tag hot_db_bk_level0
full database
format ‘/u01/backup/bk_%s_%p_%t’;
release channel ch00;
release channel ch01;
}
–备份归档和控制文件:(如果有三个日志文件组,可以按照以下方式进行切换,如果更多,则对应增加切换的次数即可);
run {
ALLOCATE CHANNEL ch00 TYPE DISK MAXPIECESIZE 20G;
ALLOCATE CHANNEL ch01 TYPE DISK MAXPIECESIZE 20G;
sql ‘alter system switch logfile’;
sql ‘alter system switch logfile’;
sql ‘alter system switch logfile’;
sql ‘alter system archive log current’;
BACKUP ARCHIVELOG ALL FORMAT ‘/u01/backup/ARCH_%U’;
BACKUP CURRENT CONTROLFILE FORMAT ‘/u01/backup/bk_controlfile’;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
}
在源机执行
SQL>set linesize 200
SQL>select * from Gv$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
———- ———- ———- ———- ———- — —————- ————- ———
1 1 23 104857600 1 NO CURRENT 218512 01-DEC-10
2 1 22 104857600 1 YES ACTIVE 218422 01-DEC-10
3 2 17 104857600 1 NO CURRENT 218503 01-DEC-10
4 2 16 104857600 1 YES INACTIVE 218412 01-DEC-10 (*)
获取不活动的已归档日志的最后一个SCN号,如果有多个已归档的INACTIVE的组,取最大的FIRST_CHANGE#,这里取218412
记录该SCN号(在“第10歩”目标端恢复数据库时使用),将备份文件,FTP到目标机
========================================
hpux2:/u01/oracle$ ftp 192.168.1.27
Connected to 192.168.1.27.
220 hpux_dr FTP server (Revision 4.0 Version wuftpd-2.6.1 Wed Jun 18 07:11:14 GMT 2008) ready.
Name (192.168.1.27:oracle): oracle
331 Password required for oracle.
Password:
230 User oracle logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /u01/oracle/rmanbk
250 CWD command successful.
ftp> lcd /u01/oracle/rmanbk
Local directory now /u01/oracle/rmanbk
ftp> bin
200 Type set to I.
ftp> prompt
Interactive mode off.
ftp> mput hp*
容灾端===============================================
6) 使用oracle用户登录目标机执行恢复
ü 在目标机建立相同的目录结构,并正确设置:ORACLE_BASE,ORACLE_HOME,ORACLE_SID环境变量。
ü 拷贝源机init{ORACLE_SID}.ora文件到目标机
ü cp $ORACLE_HOME/dbs/initorcl.ora 目标机对应目录
ü 生成口令文件或者copy $ORACLE_HOME/dbs/PWD{ORACLE_SID}
7) 启动数据库到nomount状态
sqlplus ‘/ as sysdba’
SQL>startup nomount
8) 启动RMAN恢复控制文件
rman target /
RMAN>restore controlfile from ‘/u01/oracle/rmanbk/hpdb_ctlfile_757366280381.dbf’;
9) 将数据库更改为mount状态
sqlplus ‘/ as sysdba’
SQL>alter database mount;
10) 启动RMAN恢复数据库
rman target /
RMAN>restore database;
RMAN>
run
{
set archivelog destination to ‘/u01/arch’;
SET UNTIL SCN 218412; –在第5歩源端记录下的scn号
RECOVER DATABASE;
}
11) 使用以下SQL语句查找目标端数据库的SCN号:(得到该SCN号之后,在2.5.8章节中启动复制进程时,使用该SCN号。)
SQL> SELECT CHECKPOINT_CHANGE#,CHECKPOINT_TIME FROM V$DATAFILE_HEADER;
CHECKPOINT_CHANGE# CHECKPOIN
—————— ———
218412 28-MAY-11
218412 28-MAY-11
218412 28-MAY-11
218412 28-MAY-11
218412 28-MAY-11
注:
a) 如果目标端数据库在“第10歩”操作之后,又额外追加了源数据库rman备份后的归档日志,导致目标端数据库的SCN号大于“第10歩”中SCN号。所以必须以目标端数据库当前的SCN为主,从而避免数据重复。
b) 如果目标端数据库在“第10歩”操作之后,没有额外追加源数据库rman备份后的归档日志,则“第11歩”中得到的SCN号应该与“第10歩”中的SCN号相等;
12) (备选)如果源端为RAC,目标端为单机,需将目标机改为单机模式
删除多余的redolog group
SQL> select THREAD#, STATUS, ENABLED from v$thread;
THREAD# STATUS ENABLED
———- —— ——–
1 OPEN PUBLIC
2 CLOSED PRIVATE
SQL> select group# from v$log where THREAD#=2;
GROUP#
———-
4
5
6
SQL> alter database disable thread 2;
Database altered.
SQL> alter database drop logfile group 4;
alter database drop logfile group 4
ERROR at line 1:
ORA-00350: log 4 of instance racdb2 (thread 2) needs to be archived
ORA-00312: online log 4 thread 2: ‘/u01/oracle/oradata/ractest/log/redo04.log’
SQL> alter database clear unarchived logfile group 4;
Database altered.
SQL> alter database drop logfile group 4;
Database altered.
SQL> alter database drop logfile group 5;
Database altered.
SQL> alter database drop logfile group 6;
Database altered.
SQL> select THREAD#, STATUS, ENABLED from v$thread;
THREAD# STATUS ENABLED
———- —— ——–
1 OPEN PUBLIC
删除多余UNDO表空间
SQL> show parameter undo;
NAME TYPE VALUE
———————————— ———– ——————————
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL> select tablespace_name from dba_tablespaces where contents=’UNDO’;
TABLESPACE_NAME
——————————
UNDOTBS1
UNDOTBS2
SQL> drop tablespace UNDOTBS2 including contents and datafiles;
Tablespace dropped.
如果源数据库为Oracle9i,因为RMAN时不备份TEMP表空间,需重新创建TEMP表空间
SQL> create temporary tablespace TEMP tempfile ‘/u01/temp.dbf’ size 500M;
Tablespace created.
SQL> alter database default temporary tablespace TEMP;
Database altered.
13) 目标端打开数据库
alter database open resetlogs;
注意:由于此时源端和目标端一样,所以要先删除DDL那几个脚本,删除replicat进程再 重新添加,最后才能 start replicat repea,aftercsn <>