暂无图片
暂无图片
3
暂无图片
暂无图片
暂无图片

使用rman完成ogg环境数据初始化

IT那活儿 2022-03-20
2092

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

源端环境检查

1.1 最小附加日志检查:

SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;

1.2 检查强制日志是否开启:

select FORCE_LOGGING from v$database;

1.3 开启附加日志和强制日志:

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;ALTER DATABASE FORCE LOGGING;

重新添加trandata

此步骤非常关键
ggscidblogin userid ogg,password oggdelete trandata owner.*add trandata owner.*info trandata owner.*

源端数据库备份

3.1 开启抽取和投递进程

在备份开启前,需要开启抽取和投递进程,并需要保持源端和目标端文件系统剩余空间充裕。
注:源端启动Extract进程,人工记录抽取进程启动的时间点,例如:
“2019-03-28 10:20:55”,将此时间点作为在下一步中查找长事务的一个判断条件;可在数据库中查询该时间点:select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual”
长事务处理:在GV$TRANSACTION中查找当前正在运行的事务,并找出相应的长事务。
在执行rman备份之前,确保这些长事务已经完成。
Select start_time from gv$transaction where to_date(start_time, 'yyyy-mm-dd hh24:mi:ss')<to_date('2019-03-28 10:20:55', 'yyyy-mm-dd hh24:mi:ss');
通过上面的SQL语句查找到比启动Extrac进程记录下的时间点早的事务,需要等到该事务结束,然后执行rman的备份。

3.2 执行数据库备份

执行数据库备份,启动rman:
run{allocate channel c1 type disk;allocate channel c2 type disk;allocate channel c3 type disk;allocate channel c4 type disk;allocate channel c5 type disk;allocate channel c6 type disk;allocate channel c7 type disk;allocate channel c8 type disk;sql 'alter system archive log current';sql 'alter system archive log current';sql 'alter system archive log current';sql 'alter system archive log current';sql 'alter system archive log current';sql 'alter system archive log current';sql 'alter system archive log current';sql 'alter system archive log current';sql 'alter system archive log current';backup database format '/backup/db_%U.bak';backup archivelog format '/backup/arc_%U.bak';backup current controlfile format '/backup/controlfile.bak';release channel c1;release channel c2;release channel c3;release channel c4;release channel c5;release channel c6;release channel c7;release channel c8;}

目标端进行数据库恢复

4.1 恢复数据库

在目标端恢复控制文件数据文件,保持数据库在mount 状态。

4.2 追加归档日志

将从备份开始以来,在源端生成的归档日志,拷贝到目标端的归档日志目录,执行数据库恢复,追加归档。
recover database
此步骤的目的是加快数据同步的速度。

目标端添加复制进程

由于数据库重新初始化需要在目标端重新添加复制进程,但不启动。

源端检查联机日志

在源端产生的归档日志被全部应用后,检查联机日志,获取最大first_change。
select MAX(first_change#)from v$logwhere status='INACTIVE'and ARCHIVED='YES';
记录输出,后续会使用该数值:11294270011522

目标端不完全恢复数据库

7.1 使用步骤6 获取的scn  数据库执行恢复:
run{SET UNTIL SCN 11294270011522RECOVER DATABASE;}
7.2 开启数据库:
Alter database open resetlogs

目标端数据库调整

8.1 禁用触发器:

SQL> declarev_sql varchar2(2000);CURSOR c_trigger IS SELECT 'alter trigger '||owner||'.'||trigger_name||' disable ;' from dba_triggers where owner in ('schema');BEGINOPEN c_trigger;LOOPFETCH c_trigger INTO v_sql;EXIT WHEN c_trigger%NOTFOUND;execute immediate v_sql;end loop;close c_trigger;end;/

8.2 禁用外建:

SQL> declarev_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 ('schema');BEGINOPEN c_trigger;LOOPFETCH c_trigger INTO v_sql;EXIT WHEN c_trigger%NOTFOUND;execute immediate v_sql;end loop;close c_trigger;end;/

8.3 禁用相关scheduler:

SQL>declarev_jobname varchar2(50);err_code NUMBER;ERR_MSG VARCHAR2(256);CURSOR c_trigger ISselect owner || '.' || job_namefrom dba_scheduler_jobswhere owner in ('SCHEMA1', 'SCHEMA2')and enabled = 'TRUE';BEGINOPEN c_trigger;LOOPFETCH c_triggerINTO v_jobname;EXIT WHEN c_trigger%NOTFOUND;begindbms_scheduler.disable(v_jobname);exceptionwhen others thenNULL;err_code := SQLCODE;err_msg := substr(SQLERRM, 1, 200);dbms_output.put_line(sqlcode || '--' || sqlerrm);dbms_output.put_line(v_jobname);end;end loop;close c_trigger;end;/

8.4 禁用DML操作的job:

SELECT 'exec dbms_job.broken( '||JOB||',true);'  from dba_jobs s where s.BROKEN='N' and s.SCHEMA_USER='schema';

目标端启动复制进程

start rep_01, aftercsn 11294270011522

本文作者:李亚明

本文来源:IT那活儿(上海新炬王翦团队)

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论