OGG常见初始化方案

数据初始化

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 <>

Oracle EXPDP/IMPDP初始化方案

在数据初始化的过程中,不需要源数据库停机。

1)        源端和目标端安装OGG软件,并启动manager

2)        源端配置OGG的Extract及DataPump

3)        源端启动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 file

CREATE OR REPLACE DIRECTORY DATA_PUMP AS ‘E:\OGG\data’;

grant read ,write on DIRECTORY DATA_PUMP to ggs ;

–users to execute expdp

grant read ,write on DIRECTORY DATA_PUMP to maclean ;

6)        源端获取数据库当前的SCN

SQL> select dbms_flashback.get_system_change_number from dual;

 

GET_SYSTEM_CHANGE_NUMBER

————————

                 3079975

7)        源端数据导出

在源端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 file

CREATE 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

 

 

Comments

  1. BJ-YYF says

    好文章啊,马上实验一下。

  2. GOGOGO!!! says

    正在学习当中,感谢分享

  3. 灰狼 says

    EXPDP/IMPDP初始化的时候,为什么还要检查长事务呢?

  4. EXPDP/IMPDP初始化的时候,为什

  5. 感谢分享,不过比较乱

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号