数据初始化RMAN初始化方案本方案在初始化过程中,不需要源数据库停机。步骤如下:生产端===============================================1) 源端和目标端安装OGG软件,并启动manager2) 源端配置OGG的Extract及DataPump3) 源端启动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_level0full databaseformat '/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 200SQL>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.27Connected 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): oracle331 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/rmanbk250 CWD command successful.ftp> lcd /u01/oracle/rmanbkLocal directory now /u01/oracle/rmanbkftp> bin200 Type set to I.ftp> promptInteractive 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 nomount8) 启动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 groupSQL> select THREAD#, STATUS, ENABLED from v$thread; THREAD# STATUS ENABLED---------- ------ --------1 OPEN PUBLIC2 CLOSED PRIVATESQL> select group# from v$log where THREAD#=2;GROUP#----------456SQL> alter database disable thread 2;Database altered.SQL> alter database drop logfile group 4;alter database drop logfile group 4ERROR at line 1:ORA-00350: log 4 of instance racdb2 (thread 2) needs to be archivedORA-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 AUTOundo_retention integer 900undo_tablespace string UNDOTBS1SQL> select tablespace_name from dba_tablespaces where contents='UNDO';TABLESPACE_NAME------------------------------UNDOTBS1UNDOTBS2SQL> 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 <>Oracle EXPDP/IMPDP初始化方案在数据初始化的过程中,不需要源数据库停机。1) 源端和目标端安装OGG软件,并启动manager2) 源端配置OGG的Extract及DataPump3) 源端启动Extract进程以及DataPump进程,并且人工记录抽取进程启动的时间点,例如:“2011-05-03 11:20:55” ,将此时间点作为在下一步中查找长事务的一个判断条件;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) 创建directory用于执行数据泵操作--directory path for store dump fileCREATE OR REPLACE DIRECTORY DATA_PUMP AS 'E:\OGG\data';grant read ,write on DIRECTORY DATA_PUMP to ggs ;--users to execute expdpgrant read ,write on DIRECTORY DATA_PUMP to maclean ;6) 源端获取数据库当前的SCNSQL> select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER------------------------ 30799757) 源端数据导出在源端OS系统中执行数据导出,导出用户名、dmp文件名自行修改,导出完成后ftp至目标端datapump目录expdp maclean/maclean directory=DATA_PUMP dumpfile=<dp_maclean.dmp> flashback_scn=<scn>--以下操作在目标端执行8) 创建directory用于执行数据泵操作,同时给ggs以及导入用户赋权--directory path for store dump fileCREATE OR REPLACE DIRECTORY DATA_PUMP AS '/goldengate/data';grant read ,write on DIRECTORY DATA_PUMP to ggs ;grant read ,write on DIRECTORY DATA_PUMP to maclean;9) 目标端导入数据--- 以下操作在OS中执行,具体用户名与导入dmp文件名视具体情况而定impdp maclean/maclean DUMPFILE=DATA_PUMP:DP_maclean.DMP