归档逐步应用辅助数据库迁移(适用大数据库)
很多时候你可能要从一个大型数据库平台,迁移至同版本、同平台异地异机,但是停机时间很少,则可以通过备份热备份,然后手工不断应用归档日志,最后在停机时间应用剩余日志来解决,操作如下:
-
确定源数据库信息,主要是查询源数据库归档情况,确认归档日志;
select name from v$archived_log;
NAME
--------------------------------------------------------------------------------
+FLASH/orcl/onlinelog/group_1.257.856384971
+DATA/orcl/onlinelog/group_2.262.856384971
+FLASH/orcl/onlinelog/group_2.258.856384971
+DATA/orcl/onlinelog/group_3.263.856384971
+FLASH/orcl/onlinelog/group_3.259.856384973
+FLASH/orcl/archivelog/2014_08_25/thread_1_seq_5.276.856492209
+FLASH/orcl/archivelog/2014_08_25/thread_1_seq_3.286.856492209
+FLASH/orcl/archivelog/2014_08_25/thread_1_seq_4.287.856492209
41 rows selected.
SQL> alter system switch logfile;
-
备份数据库,对源数据库进行热备份,脚本如下:
alter tablespace system begin backup;
host copy E:\ORACLE\ORADATA\MARK\SYSTEM01.DBF
alter tablespace system end backup;
.....
-
更改数据并归档部分日志,未测试目的,修改部分数据,并继续归档,数据库继续对外提供服务。
begin
for i in 1 .. 4 loop
insert into mark values(i,sysdate,dbms_flashback.get_system_change_number);
execute immediate 'alter system switch logfile';
dbms_lock.sleep(15);
end loop;
end;
/
Commit;
-
执行恢复,在迁移过程中,可以将备份文件传输至目标主机,在目标主机恢复备份的数据文件,启动数据库。
sql>startup mount;
sql>recover database using backup controlfile until cancel;
应用了所有的归档日志文件之后,可以将数据库只读打开;
sql>alter database open read only;
因为原数据库的修改还在继续,关闭数据库,启动到mount状态,然后从源数据库拷贝归档日志,继续应用归档。通过不断应用归档日志,建议数据库和源数据库就处于同步状态。当到达迁移指定的时间时,将源数据库归档,然后停机,拷贝在线日志。然后再迁移数据库应用日志。
这种方法和DAGAGUARD类似,但是更为可控。