Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

2135

积分

502

好友

184

主题
1#
发表于 2013-9-5 21:14:22 | 查看: 6778| 回复: 5
2.        Goldengate容灾系统实施方案
如果goldengate安装在unix或者linux操作系统下,则建议以oracle系统用户进行安装。如果使用其他用户进行安装,则需要确保该用户在dba组中,以确保该用户具备读取redo和归档日志的系统权限;
注:
1) Goldengate软件建议安装在服务器Server的/goldengate路径下,该目录的属主为oracle:dba,权限为775;
2)/goldengate目录一般是建立在共享存储上,这样实际上goldengate的软件和相应的文件如参数文件,队列文件等都是在共享存储上的。这样做的好处是,例如在RAC环境下,如果一台服务区宕机,则可以将/goldengate mount到另外一个正常的rac节点上,启动goldengate各个进程就可以了,不需要做任何其他的动作。
2.1.        GG软件的安装
1)        使用Oracle用户(如非此用户,请自行取代,下同)通过ftp上传GGS软件并解压缩:
        tar zxvf *.gz
或者分两步解压:
gunzip *.gz 或 gzip –d *.gz
tar xvf *.gz
2)        创建子目录
在数据库服务器上创建文件系统:/goldengate(小写), GoldenGate安装目录统一为:/goldengate(小写)
3)        队列文件存放目录为/goldengate/dirdat
4)        在/goldengate目录下运行GGS命令行控制界面:
        ./ggsci
5)        在GGS命令行界面下创建子目录:
        GGSCI> create subdirs
2.2.        容灾中心GG软件安装
1)        使用Oracle用户(如非此用户,请自行取代,下同)通过ftp上传GGS软件并解压缩:
tar zxvf *.gz
或者分两步解压:
gunzip *.gz 或 gzip –d *.gz
tar xvf *.gz
2)        创建子目录
在数据库服务器上创建文件系统:/goldengate(小写), GoldenGate安装目录统一为:/goldengate(小写)
3)        队列文件存放目录为/goldengate/dirdat
4)        在/goldengate目录下运行GGS命令行控制界面:
        ./ggsci
5)        在GGS命令行界面下创建子目录:
        GGSCI> create subdirs
2.3.        源端配置
2.3.1.        设置数据库为归档模式
数据库是否处于归档模式:
Select log_mode from v$database;
开启归档模式:
shutdown immediate;
startup mount;
alter database archivelog;
alter database open;
2.3.2.        开启数据库附加日志
2.3.2.1.        检查附加日志情况
使用以下sql语句检查数据库附加日志的打开状况:
Select  
SUPPLEMENTAL_LOG_DATA_MIN
,SUPPLEMENTAL_LOG_DATA_PK
,SUPPLEMENTAL_LOG_DATA_UI
,SUPPLEMENTAL_LOG_DATA_FK
,SUPPLEMENTAL_LOG_DATA_ALL from v$database;
2.3.2.2.        打开数据库附加日志
打开附加日志并切换日志(保证Online redo log和Archive log一致)
alter database add supplemental log data ;
alter database add supplemental log data (primary key, unique,foreign key) columns;
alter system switch logfile;

回退操作:如果出现问题,可以通过以下语句进行回退:
alter database drop supplemental log data ;
alter database drop supplemental log data (primary key, unique,foreign key) columns;

2.3.2.3.        确认附加日志情况
使用以下sql语句检查数据库附加日志的打开状况:
Select  
SUPPLEMENTAL_LOG_DATA_MIN
,SUPPLEMENTAL_LOG_DATA_PK
,SUPPLEMENTAL_LOG_DATA_UI
,SUPPLEMENTAL_LOG_DATA_FK
,SUPPLEMENTAL_LOG_DATA_ALL from v$database;
注:确保最小附加日志,pk,uk,fk附加日志打开。而all columns的附加日志关闭;
如果all columns的附加日志打开的话,则需要使用以下语句予以关闭:
alter database drop supplemental log data (ALL) columns;

2.3.3.        开启数据库强制日志模式
Alter database force logging
注:该模式的打开需要和业务部门进行相关确认和讨论;如果数据库不能打开到force logging的模式下,则no logging的表无法进行同步;
如果需要进行回退,关闭强制日志模式,请使用以下sql:
Alter database no force logging

2.3.4.        创建运行GoldenGate的用户
1)        在源端采用ORACLE用户运行GoldenGate
2)        安装位置:/goldengate  
3)        创建GoldenGate数据库用户goldengate  
--create tablespace
create tablespace goldengate datafile '/xx/goldengate01.dbf' size 10240M ;

-- Create the user
create user goldengate identified by "XXXXX" default tablespace goldengate;

-- Grant role privileges
grant  resource, connect, dba to goldengate;




2.3.5.        关闭数据库的recyclebin (仅实施DDL时进行配置)
查询当前recyclebin的参数值:
SQL> show parameter recyclebin

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      OFF
SQL>
如不是off,需要关闭recyclebin:
SQL>alter system set recyclebin=off scope=both;


如果需要回退,打开recyclebin的话,可以使用以下语句:
SQL>alter system set recyclebin=off scope=both;


2.3.6.        添加变量(以linux操作系统为例)
export  GG_HOME=/goldengate
export  LD_LIBRARY_PATH=$ORACLE_HOME/lib   
以下为一些不同操作系统,对LIBRARY path 环境变量的不同名称:
IBM AIX        LIBPATH
IBM z/OS        LIBPATH
HP-UX        SHLIB_PATH
Sun Solaris        LD_LIBRARY_PATH
HP Tru64 (OSF/1)        LD_LIBRARY_PATH
LINUX        LD_LIBRARY_PATH

2.3.7.        编辑GLOBALS参数文件
这里直接建立在goldengate用户下:
Ggsci>EDIT PARAMS ./GLOBALS  --在该文件中添加以下内容
GGSCHEMA goldengate  --指定的进行DDL复制的数据库用户




2.3.11.        停止数据库的所有Session
OGG的DDL对象安装时不能有运行的sessoin存在,请DBA执行停机清理或者杀死所有数据库中的Session。
建议有条件先执行停止业务,并关闭Oracle的Listener。
注:时间大约需要30分钟左右,在这段时间内,需要完成2.3.12与2.3.13两个小节的所有操作步骤。此后的所有步骤,都可以在业务正常运行时进行操作。
2.3.12.        建立OGG的DDL对象

sqlplus "/ as sysdba"
SQL> @marker_setup.sql
Enter GoldenGate schema name:goldengate

SQL> @ddl_setup.sql
Enter GoldenGate schema name:goldengate

SQL> @role_setup.sql

Grant this role to each user assigned to the Extract, Replicat, GGSCI, and Manager processes, by using the following SQL command:

GRANT GGS_GGSUSER_ROLE TO <loggedUser>

where <loggedUser> is the user assigned to the GoldenGate processes.
注意这里的提示:需要手工将这个GGS_GGSUSER_ROLE指定给extract所使用的数据库用户(即参数文件里面通过userid指定的用户),可以到sqlplus下执行类似的sql:
GRANT GGS_GGSUSER_ROLE TO goldengate;
注:这里的goldengate是extract使用的用户。如果你有多个extract,使用不同的数据库用户,则需要重述以上过程全部赋予GGS_GGSUSER_ROLE权限。
运行以下脚本,使触发器生效
SQL> @ ddl_enable.sql


2.3.13.        安装提升性能工具
本步骤为可选步骤,一般情况下建议运行该步骤。
为了提供OGG的DDL复制的性能,可以将ddl_pin脚本加入到数据库启动的脚本后面,该脚本需要带一个OGG的DDL用户(即安装DDL对象的用户,本例中是goldengate)的参数:
SQL> @ddl_pin <DDL_user>

注:如果因为业务问题,开启DDL以后,对性能的影响比较大的话,需要临时禁用DDL触发器的话,可以运行以下语句:
SQL> @ ddl_disable.sql


2.3.14.        添加抽取/传输进程与队列文件
根据事先规划好的进程个数、进程名称,执行以下命令,添加相应的进程和队列文件:
GGSCI>add ext extxx,tranlog ,begin now
GGSCI>add exttrail ./dirdat/xx,ext extxx,megabytes 200
GGSCI>add ext dpexx,exttrailsource ./dirdat/xx
GGSCI>add rmttrail ./dirdat/xx,ext dpeea,megabytes 200

2.4.        数据初始化
2.4.1.        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 /
Rman> 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  FORMAT '/bakdir/data/bk_%s_%p_%t';
FULL  DATABASE;
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 '/bakdir/data /ARCH_%U';
BACKUP CURRENT CONTROLFILE FORMAT /bakdir/data /bk_controlfile';
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
}

在源机执行
SQL>set line 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;
2.4.2.        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 sglaw ;
6)        源端获取数据库当前的SCN
SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
                 3079975
7)        源端数据导出
在源端OS系统中执行数据导出,导出用户名、dmp文件名自行修改,导出完成后ftp至目标端datapump目录
expdp sglaw/sglaw directory=DATA_PUMP dumpfile=<dp_sglaw.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 sglaw;
9)        目标端导入数据
--- 以下操作在OS中执行,具体用户名与导入dmp文件名视具体情况而定
impdp sglaw/sglaw DUMPFILE=DATA_PUMP:DP_SGLAW.DMP

2.5.        目标端配置
2.5.1.        创建运行GoldenGate的用户
1)        在目标端采用goldengate  用户运行GoldenGate
2)        安装位置: /goldengate  
3)        创建GoldenGate数据库用户goldengate  
create tablespace goldengate datafile '/xx/goldengate01.dbf' size 1000M;
-- Create the user
create user goldengate  
identified by "hljorarz"
default tablespace goldengate
temporary tablespace TEMP;
-- Grant/Revoke role privileges
grant dba to goldengate;
2.5.2.        安装GoldenGate
通过ftp上传GoldenGate软件包道安装目录/goldengate,并解压缩
gzip –d *.gz
tar -xvf *.tar
在ggsci环境下创建GoldenGate子目录,
create subdirs
2.5.3.        添加变量
export GG_HOME=/goldengate  
export  LD_LIBRARY_PATH=$ORACLE_HOME/lib
2.5.4.        修改数据库
2.5.4.1.        禁用触发器

declare
v_sql varchar2(2000);
CURSOR c_trigger IS SELECT 'alter trigger '||owner||'.'||trigger_name||' disable' from dba_triggers where owner in ('EMP_HLJ','EPC_HLJ','EPSA_HLJ','FLOW_HLJ','EPM_DE_HLJ','XEPMA_HLJ','EPM_LOADC_HLJ','EPM_HIS_HL','EPM_RPT_HLJ','SYSODM','EPM_CP','EPM_BANK_HLJ','EPM_IC_HLJ','EPM_SEC');
BEGIN
OPEN c_trigger;
LOOP
FETCH c_trigger INTO v_sql;
EXIT WHEN c_trigger%NOTFOUND;
execute immediate v_sql;
end loop;
close c_trigger;
end;
/
2.5.4.2.        禁用外键

declare
v_sql varchar2(2000);
CURSOR c_trigger IS SELECT 'alter table '||owner||'.'||table_name||' disable constraint '||constraint_name from dba_constraints where constraint_type='R' and owner in ('EMP_HLJ','EPC_HLJ','EPSA_HLJ','FLOW_HLJ','EPM_DE_HLJ','XEPMA_HLJ','EPM_LOADC_HLJ','EPM_HIS_HL','EPM_RPT_HLJ','SYSODM','EPM_CP','EPM_BANK_HLJ','EPM_IC_HLJ','EPM_SEC');
BEGIN
OPEN c_trigger;
LOOP
FETCH c_trigger INTO v_sql;
EXIT WHEN c_trigger%NOTFOUND;
execute immediate v_sql;
end loop;
close c_trigger;
end;
/

2.5.4.3.        禁用带有DML操作的JOB
1)        在dba_jobs中,有些job/schedule,会在复制对象中产生DML的操作,必须禁用掉,否则会造成DML语句在目标端的重复执行;
2)        在dba_schedule_jobs中的有些job,会在复制对象中产生DML操作,必须禁用掉,否则会造成DML语句在目标端的重复执行;
注:在目标端恢复的时候,可以在pfile文件中将job_queue_processes设置为0,然后将带有dml的job停掉以后,再修改job_queue_processes参数至正常值,如job_queue_processes=10;

2.5.5.        GLOBALS配置
GGSCI> EDIT PARAMS ./GLOBALS
CHECKPOINTTABLE goldengate.ggschkpt

2.5.8.        启动复制进程
Start replicat repxx , aftercsn 218412
注:该scn号是3.4.1小节的第11歩得到的;
3.        附录1—禁用触发器和级联删除的脚本
容灾端去掉trigger及cascade delete/update的脚本:






4.        附录2—开启DDL复制(在实施DML复制之后)
如果系统当前已经完成了Goldengate的DML复制实施(请确保DML实施遵循了本实施规范,打开的是数据库一级的PK,UI,FK,而不是在表一级实行add trandata的操作),并且正在运行,想在此基础上打开DDL复制,则需要按照本节介绍的步骤进行相应的操作。

4.1.        准备工作
1)        明确在配置DML时所创建的golengate的用户名,密码,表空间以及权限等信息;参考本文档的2.3.4小节部分内容。
2)        在配置DDL时,停止目前正在运行的goldengate所有进程,如mgr,extract,datapump,以及目标端的replicat进程
3)        在配置DDL时,生产端的数据库所有的session连接都应该退出(强烈建议);

4.2.        卸载DDL配置(可选)
如果之前曾经安装过ddl,需要重新进行安装,则需要先将ddl的一些组件卸载掉,然后再重新安装:
依次在OGG的根目录执行
1)        切换到Goldengate安装目录下,并且按照顺序以SYS用户依次执行以下脚本:
2)        SQLPLUS SYS/ORACLE@ORCL  @./ddl_disable.sql
3)        SQL>/goldengate/ddl_remove.sql
4)        SQL>/goldengate/marker_remove.sql
注:在执行上述脚本的时候,会提示输入安装时所指定的schema名称。

4.3.        配置数据库级别的附加日志

以下脚本用以查询和开启数据库级别的附加日志信息,
conn /as sysdba

SQL>Select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI,SUPPLEMENTAL_LOG_DATA_FK from v$database;

SQL>alter database add supplemental log data;

SQL>alter database add supplemental log data (PRIMARY KEY,FOREIGN KEY,UNIQUE) columns;

--附加日志打开以后,正常需要执行一次归档操作,以使附加日志即时生效:

SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;

--ALL COLUMNS的附加日志不建议开启:
SQL>alter database add supplemental log data (ALL) columns;
--以下为取消数据库级别附加日志的方法:
SQL>alter database drop supplemental log data;
SQL>alter database drop supplemental log data (PRIMARY KEY,FOREIGN KEY,UNIQUE) columns;
SQL>alter database drop supplemental log data (ALL) columns;

注:正常需要切换一次redo,以确保附加日志即时生效

4.4.        删除表级别的附加日志
如果在实施DML操作时,曾经添加过表级别的附加日志信息,如:
--在ggsci的界面中运行:
Ggsci>add trandata scott.table1;
--或者在sql界面中执行以下sql语句:
SQL>alter table scott.t1 add supplemental log data (primary key, unique, foreign key) columns;
都是在表一级打开的附加日志信息。
因为已经开启了数据库级别的附加日志信息,所以对表级别的附加日志配置进行清除,使用以下脚本可以生成批量可执行的sql语句:
Conn / as sysdba
Sql>set line 200
Sql>set head off
Sql>Spool droptrandata.sql
Sql>select 'alter table '||owner|| '.' ||table_name|| ' drop supplemental log group '|| log_group_name||';' from dba_log_groups where dba_log_groups.owner  in (’SAPSR3’,’xxx’);
Sql>spool off
--确认脚本保存路径,如/home/oracle
--在sys用户下运行droptrandata.sql脚本,清除表级别的附加日志信息:
Sql>@/home/oracle/droptrandata.sql
           
4.5.        编辑GLOBALS参数文件

这里直接建立在goldengate用户下:
Ggsci>EDIT PARAMS ./GLOBALS
GGSCHEMA goldengate

4.6.        关闭数据库的recyclebin
SQL> show parameter recyclebin

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      OFF
--如不是off,需要关闭recyclebin:
SQL>alter system set recyclebin=off scope=both;
4.7.        停止数据库的所有Session
OGG的DDL对象安装时不能有运行的sessoin存在,请DBA执行停机清理或者杀死所有数据库中的Session。
建议有条件先执行停止业务,并关闭Oracle的Listener。

4.8.        建立OGG的DDL对象

sqlplus "/ as sysdba"
SQL> @marker_setup.sql
Enter GoldenGate schema name:goldengate

SQL> @ddl_setup.sql
Enter GoldenGate schema name:goldengate

SQL> @role_setup.sql

Grant this role to each user assigned to the Extract, Replicat, GGSCI, and Manager processes, by using the following SQL command:

GRANT GGS_GGSUSER_ROLE TO <loggedUser>

where <loggedUser> is the user assigned to the GoldenGate processes.

注意这里的提示:它需要你手工将这个GGS_GGSUSER_ROLE指定给你的extract所使用的数据库用户(即参数文件里面通过userid指定的用户),可以到sqlplus下执行类似的sql:
GRANT GGS_GGSUSER_ROLE TO goldengate;
这里的goldengate是extract使用的用户。如果你有多个extract,使用不同的数据库用户,则需要重述以上过程全部赋予GGS_GGSUSER_ROLE权限。


4.9.        安装提升性能工具
本步骤为可选步骤。
为了提供OGG的DDL复制的性能,可以将ddl_pin脚本加入到数据库启动的脚本后面,该脚本需要带一个OGG的DDL用户(即安装DDL对象的用户,本例中是goldengate)的参数:
SQL> @ddl_pin <DDL_user>

4.10.        配置OGG进程中DDL参数
GoldenGate的data pump进程和replicat的ddl开关默认是打开的,只有主extract是默认关闭的,所以DDL的配置要在extract进程中配置;同时因为replicat进程默认是所有DDL都复制,如果有多个replicat进程,如果在参数中不进行复制范围限制,必然引起DDL的重复复制,所以在replicat进程中也需要进行配置。
Extract中需要添加的配置参数:
DDL &
INCLUDE MAPPED OBJTYPE 'table' &
INCLUDE MAPPED OBJTYPE 'index' &
EXCLUDE OPTYPE COMMENT
DDLOPTIONS  NOCROSSRENAME  REPORT
Replicat中需要添加的配置参数:
DDL include mapped
DDLOPTIONS report

4.11.        MGR的配置(只需配置源端)
另外,在mgr里面加入自动purge ddl中间表的参数:
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7

4.12.        删除系统已有的OGG进程和队列,重新添加
GGSCI>delete er *
进入dirdat目录,删除里面的所有队列文件,进入dirrpt目录,删除里面的所有日志文件
GGSCI>add ext extea,tranlog ,begin now
GGSCI>add exttrail ./dirdat/ea,ext extea,megabytes 200
GGSCI>add ext dpeea,exttrailsource ./dirdat/ea
GGSCI>add rmttrail ./dirdat/ea,ext dpeea,megabytes 200

GGSCI>alter repea,extseqno 0,extrba 0
GGSCI>alter repeb,extseqno 0,extrba 0
GGSCI>alter repec,extseqno 0,extrba 0
4.13.        启动OGG DDL捕捉的trigger
在sqlplus里面执行ddl_enable.sql脚本启用ddl捕捉的trigger。
说明:ddl捕捉的trigger与OGG的extract进程是相互独立的,它并不依赖于extract进程存在。即使OGG的extract进程不存在或者没有启动,但是trigger已经启用了,那么捕捉ddl的动作就一直延续下去。如想彻底停止捕捉DDL捕捉,需要禁用ddl的trigger,此时需要执行ddl_disable.sql
1)        启动OGG的ext数据抽取进程,等抽取进程开始工作后,进行系统数据库热备份,具体方法参考数据库热备方案。
2)        在容灾中心的数据库上禁用外键、触发器、级联删除、带有dml操作的JOB,参考本文档的2.5.4部分。
3)        启动OGG所有进程
注意:启动容灾中心的REP进程的时候,使用如下的启动命令
GGSCI>start repea,aftercsn <recover时候指定的SCN>
GGSCI>start repeB,aftercsn <recover时候指定的SCN>
GGSCI>start repeC,aftercsn <recover时候指定的SCN>
GGSCI>start repeD,aftercsn <recover时候指定的SCN>
下载专业ORACLE数据库恢复工具PRM-DUL  For Oracle http://www.parnassusdata.com/zh-hans/emergency-services

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638  QQ: 47079569   
2#
发表于 2013-9-13 17:11:52
写得很详细,很到位,没用过RMAN进行数据初始化,这个我会实验一下,谢谢

回复 只看该作者 道具 举报

3#
发表于 2013-10-17 01:03:34
好好实验下

回复 只看该作者 道具 举报

4#
发表于 2013-10-18 22:25:21
最近正在实施

回复 只看该作者 道具 举报

5#
发表于 2013-10-27 20:10:49
刘大,最近我们正在做跨平台的迁移,AIX-HPUX 数据文件均使用裸设备 请问 RMAN可不可以实施 我们提了SR 回复的ORACLE工程师说不可以 请刘大指点一下 谢谢!

回复 只看该作者 道具 举报

6#
发表于 2013-10-27 20:15:03
14eer 发表于 2013-10-27 20:10
刘大,最近我们正在做跨平台的迁移,AIX-HPUX 数据文件均使用裸设备 请问 RMAN可不可以实施 我们提了SR 回复 ...


你的这个问题为什么要在此帖子里问?

我的回答是 可以, 但是可以 不代表没有注意事项

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-5-2 17:51 , Processed in 0.049415 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569