资讯专栏INFORMATION COLUMN

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

IT那活儿 / 3580人阅读
使用rman完成ogg环境数据初始化

点击上方“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



此步骤非常关键
ggsci
dblogin userid ogg,password ogg
delete 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$log
where status=INACTIVE
and ARCHIVED=YES;
记录输出,后续会使用该数值:11294270011522





七、目标端不完全恢复数据库



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






八、目标端数据库调整



8.1 禁用触发器:

SQL> declare
v_sql varchar2(2000);
CURSOR c_trigger IS SELECT alter trigger ||owner||.||trigger_name|| disable ; from dba_triggers where owner in (schema);
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;
/

8.2 禁用外建:

SQL> 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 (schema);
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;
/

8.3 禁用相关scheduler:

SQL>declare
v_jobname varchar2(50);
err_code NUMBER;
ERR_MSG VARCHAR2(256);
CURSOR c_trigger IS
select owner || . || job_name
from dba_scheduler_jobs
where owner in (SCHEMA1, SCHEMA2)
and enabled = TRUE;
BEGIN
OPEN c_trigger;
LOOP
FETCH c_trigger
INTO v_jobname;
EXIT WHEN c_trigger%NOTFOUND;
begin
dbms_scheduler.disable(v_jobname);
exception
when others then
NULL;
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那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129617.html

相关文章

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<