迁移Oracle数据的两个方案(待续)

本文介绍两种Oracle数据库的数据迁移方案:一是通过物理standby迁移,适用于相同操作系统和数据库版本间迁移,支持跨平台;二是使用prebuilt MV进行迁移,适合短时间内大数据量表的迁移,支持跨数据库版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

                                                                    迁移Oracle数据的两个方案(待续)

方案一:采用物理standby进行迁移,该方法适用于在相同操作系统平台,相同数据库版本之间进行数据迁移。在Oracle11G中可以实现,从         10G到11G的物理Standby的迁移,而且可以实现从Windows平台到Linux平台的迁移。 步骤:   要首先具有主备数据库结构(如DataGuard环境),本方案针对Oracle10GR2版本。   1、在32Bit的OS上,利用RMAN或者是其他方式备份住数据库。   2、产生备份数据库的控制文件、以及参数文件、并把备用控制文件和参数文件拷贝到备用机器上。   3、把备份恢复到备用机器上(可以是64Bit机器),如果是普通文件备份,只拷过去即可,如果是RMAN备份,需要先拷贝备份集(或NFS)      过去,然后在备份机器上恢复。32Bit OS上的数据库可以直接恢复到64Bit的OS上。   4、配置监听与tnsnames.ora,使备库可以接收日志。(分别针对主备机上配置)   5、恢复备用库,适用如下命令      recover automatic standby database;      或者      recover managed standby database disconnect from session;   6、等到日志全部恢复完毕后,执行如下命令做切换:      主:alter database commit to switchover to physical standby with session shutdown;      备:alter database commit to switchover to primary;   7、等切换完毕后,关闭新主库,如果是RAC先关闭RAC环境参数:      alter system set cluster_database=false scope=spfile;      shutdown immediate;   8、使用UPGRADE方式打开新主库:      startup upgrade;   9、执行数据库格式转换脚本,此时不要执行DDL      spool utlirp.log      /u01/oracle/ora10g/rdbms/admin/utlirp.sql(具体路径会有差异)      spool off   10、重新启动主库,如果是RAC环境,先打开RAC参数:     alter system set cluster_database=true scope=spfile;     shutdown immediate;     startup open;   11、编译经过上面过程可能失效的包:     spool utlrp.log     /u01/oracle/ora10g/rdbms/admin/utlrp.sql(具体路径会有差异)     spool off   12、检验是否还存在失效对象:     select distinct object_name from dba_objects where status='INVALID';   13、等原来的主库成为备用库后,在其上完成如下操作:     srartup monut;     recover managed standby database disconnect from session;(恢复日志)

方案二:使用prebuilt MV 进行数据迁移,该方法适用于在短时间内,对大数据量表进行迁移,要求被迁移表具有主键,可以实现跨平台、跨         数据库的版本迁移,而且可以实现重组优化,但是不能实现跨字符集的迁移,并且被迁移表不要频繁的被更新。 步骤:    1、进行表的分级,如100M以上的表作为大表,100M以下的表作为小表,对于小表可以使用      insert /*+append+*/ into...... from table@db_link;    进行插入。    2、对于大表在表上创建MV日志:      create materialized view log on tablename;    3、在目标数据库上创建于该表具有相同结构的表,并且在表上创建主键或者唯一约束,其他索引或者约束,可以在全刷新后再创建。最后       使用如下命令在目标数据库的新表上创建prebuilt mv:       create materialized view table_name on prebuilt table refresh fast as select * from table_name@db_link;    4、执行全刷新与增量刷新:       exec dbms_mview.refresh('table_name','complete');       exec dbms_mview.refresh('table_name');       执行后创建相关索引:create index index_name on table_name(filed_name);    5、创建一个数据库JOB,定时同步增量日志,如下定义每一分钟同步一次:       declare jobid number;       begin         sys.dbms_job.submit(job=>jobid,                             what=>'dbms_mview.refresh(''table_name'');',                             next_date=>sysdate,                             interval=>'sysdate+1/1440');         commit;       end;       /    6、依次处理完所有大表。    7、在目标数据库创建好于小表相同结构的表包括索引等,整理好insert into脚本。    8、预先创建好除序列外的其他对象,如function,procedure,type等。    9、停机切换:      .停止原数据库一切活动,包括任何DML与DDL。      .等待最后一批日志刷新完毕。      .运行insert into脚本迁移小表数据。      .等大表刷新完成,删除相关MV信息        在原数据库上执行:drop materialized view log on table_name;        在目标数据库上执行:drop materialized view table_name;    10、创建与表有依赖关系的对象,如序列。   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值