当前位置:七道奇文章资讯数据防范Oracle防范
日期:2011-01-25 22:55:00  来源:本站整理

<b>Oracle数据库迁移相关本领介绍</b>[Oracle防范]

赞助商链接



  本文“<b>Oracle数据库迁移相关本领介绍</b>[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

本文将报告的是Oracle数据库迁移的一些本领,包含Oracle数据库迁移前的预备工作,以及差别范例迁移的处理办法.但愿对大家理解Oracle数据库迁移有所帮忙.bitscn数据库频道之前也曾为大家介绍过《Oracle跨平台迁移构造而不迁移数据办法详解》.

去年年底做了不少系统的数据迁移,大部份系统由于平台和版本的缘由,做的是逻辑迁移,少部份做的是物理迁移,有一些心得领会,与大家分享.

首先说说迁移流程,在迁移之前,写好筹划,分外是实施的筹划步骤一定要写清楚,然后举行完好的测试.我们在迁移时,有的系统测试了四五次,通过测试来完善筹划和流程.

针对物理迁移,也即通过RMAN备份来举行复原并利用归档的方法(这里不谈论通过dd方法举行的冷迁移),固然注意的是要将数据库设为force logging的方法,在用RMAN做全备之前,一定要履行:

  1. view plaincopy to clipboardprint?  
  2. alter database force logging;   
  3. alter database force logging; 

不然大概会产生坏块.

关于逻辑迁移,在job_processes设置为>0的数值之前,注意job的下次履行时间和job所属用户.比方job的定义在之前已经导入,但是在迁移之时,job已经运行过,那么迁移完成之后,job的下次时间还是本来的时间,这样大概会反复运行.别的,job通过IMP导入后,job所属用户会变成导入用户的名称,明显job本来的用户就不能对JOB举行管理了,可以通过下面的sql举行改正:

  1. view plaincopy to clipboardprint?  
  2. update sys.job___FCKpd___1nbsp;set lowner=cowner , powner=cowner;   
  3. update sys.job___FCKpd___1nbsp;set lowner=cowner , powner=cowner; 

在迁移之前,应当禁止对系统举行构造上的改正和公布,比方表构造,索引,存储历程包等.

假如是用exp/imp导入的对象,包含存储历程等,应当查抄对象能否与原生产库一致,比方由于dblink的缘由,imp之后,存储历程不能成立,招致有部份存储历程丧失,固然这些存储历程大概没有被利用.

下面是一些加快迁移速度的本领:

通过dblink,利用append insert的方法,同时操纵并行,这种方法比exp/imp更快

关于有LONG范例的列,insert..select的方法明显是不行的,可以通过exp/imp的方法,但是这种方法速度非常慢,其缘由在于imp时一行一行地插入表.有别的一种方法,即sqlplus的copy号令,下面是一个示例: view plaincopy to clipboardprint?

  1. spool copy_long_table_1.log     
  2. conn / as sysdba     
  3. set copycommit=2000     
  4. set arraysize 30     
  5. set long 10485760     
  6.     
  7. copy from system/xxxx@source_db append username.table_name using select * from username.table_name;     
  8.     
  9. spool off    
  10. exit   
  11.  
  12. spool copy_long_table_1.log  
  13. conn / as sysdba  
  14. set copycommit=2000  
  15. set arraysize 30  
  16. set long 10485760  
  17.  
  18. copy from system/xxxx@source_db append username.table_name using select * from username.table_name;  
  19.  
  20. spool off 
  21. exit 

不过,sqlpus的copy号令不支持有timestamp和lob列范例的表.假若有timestamp范例的表,可以通过在exp时,加上rowid的条件,将一个表分成多个部份同时操作,关于有lob范例的表,也可以一样处理(因为insert …select方法下,有lob范例列时,也一样是一行一行地插入).注意在这种方法下,就不能利用direct的方法exp/imp.下面是exp导出时parfile示例:

  1. query="where rowid>=dbms_rowid.rowid_create(1,71224,52,9,0) and rowid<=dbms_rowid.rowid_create(1,71224,55,1038344,10000)"    
  2. file=/dumpdata/n1.dmp     
  3. tables=username.table1     
  4. constraints=n     
  5. grants=no    
  6. indexes=no    
  7. buffer=104857600     
  8. ...     
  9. ...     
  10. query="where rowid>=dbms_rowid.rowid_create(1,71224,423,137,0) and rowid<=dbms_rowid.rowid_create(1,71224,432,59272,10000)"    
  11. file=/dumpdata/n6.dmp     
  12. tables=username.table1     
  13. constraints=n     
  14. grants=no    
  15. indexes=no    
  16. buffer=104857600   
  17.  
  18. query="where rowid>=dbms_rowid.rowid_create(1,71224,52,9,0) and rowid<=dbms_rowid.rowid_create(1,71224,55,1038344,10000)" 
  19. file=/dumpdata/n1.dmp  
  20. tables=username.table1  
  21. constraints=n  
  22. grants=no 
  23. indexes=no 
  24. buffer=104857600  
  25. ...  
  26. ...  
  27. query="where rowid>=dbms_rowid.rowid_create(1,71224,423,137,0) and rowid<=dbms_rowid.rowid_create(1,71224,432,59272,10000)" 
  28. file=/dumpdata/n6.dmp  
  29. tables=username.table1  
  30. constraints=n  
  31. grants=no 
  32. indexes=no 
  33. buffer=104857600 

将表分成几部份同时操作,不但仅可以操纵rowid,也可以操纵表上的列,比方说,表上有一个created_date的列,并且保证是递增插入数据,那么这种情形下,也可以利用这个字段将表分成差别的范围同时举行导出和导入.不过利用ROWID普通具有更高的效率.

当然关于有lob列的表,可以按上述方法,拆成多个insert方法同时插入,不需求exp/imp.

关于分外大的分区表,固然利用并行可以提高速度,但是受限于单个进程(不能跨DB LINK举行并行事件,只能并行查询,也即insert..select只能是SELECT部份才能举行并行)的处理本领,这种方法下速度仍旧有限.可以并行将数据插入多此中间表,然后通过exchange partition without validation 的方法,交换分区,这种方法将会大大提高了速度.

有朋友大概会问,为什么不并行直接插入分区表,当然假如是非direct path(append)方法,则是没问题的,但是这种方法插入的性能较低.而direct path的方法,会在表上持有mode=6(互斥)的TM锁,不能多个会话同时插入.(update: 在insert 时利用这样的语句:insert into tablename partition (partname) select * from tablename where ….,更简单更有效率.)

迁移时,将数据分成两部份,一部份是历史表,第二部份是动态改变的表,在迁移之前,先导入历史表,并在历史表上建好索引,这无疑会大大削减迁移时业务系统中止时间.
迁移之前,考虑清理掉垃圾数据.

迁移时,应保证表上没有任何索引,约束(NOT NULL除外)和触发器,数据导入完成后,再建索引.建索引时一样,同时利用多个进程跑脚本.索引成立无成后,应去掉索引的PARALLEL属性.

在成立约束时,应按先成立CHECK约束,主键,唯一键,再成立外键约束的次序.约束状况为 ENABLE NOVALIDATE,这将大大削减约束成立时间.而在迁移完成后,再考虑设回为ENABLE VALIDATE.

通过利用dbms_stats.export_schame_stats和dbms_stats.import_schame_stats导入原库上的统计信息,而不用重新汇集统计利用.
朋友们可以看到,以上均是针对9i的,实际上在10g乃至11g环境下,也仍旧很多鉴戒意义.当然这些本领不但仅用于完好的数据库迁移,也可以利用到将个体表复制到其他数据库上.

这里没有提到的是操纵物化视图或高级复制、触发器之类的技术,因为这些技术,毕竟要改正生产库,对生产库的运行有对比大的影响,因此,只有在停机时间要求分外严峻,而在这个时间内又不能完成迁移时才应当考虑.

从迁移的经验来说,只有完善的流程,完好的测试才可以保证成功.这里只是摆列了一些小本领,假如对整个迁移历程有爱好,可以针对这个话题再举行谈论.

原文链接:http://www.laoxiong.net/some_data_migration_tips.html   以上是“<b>Oracle数据库迁移相关本领介绍</b>[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .