教你如何成为Oracle 10g OCP - 第十九章 数据迁移

本文详细介绍Oracle数据库中exp/imp工具的原理及使用方法,包括不同导出模式的选择、参数配置技巧以及常见问题解决方案。此外,还对比了传统路径与直接路径导出的优缺点。

主要内容
1. exp/imp的原理及使用
2. 如何进行可传输表空间的操作,特别是进行跨平台表空间传输
3. expdp/impdp的原理及使用
4. 如何使用外部表
5. 如何进行可传输数据库的操作 


1. exp/imp

exp/imp 原理:  它是一个位于客户端的程序(在DB Server及远程客户端都能操作) , 能跨平台进行导出导入操作,
普通的exp出来的dmp文件包括两部分内容,一部分是文件头,还有一部分是表和其它对象的定义,如果是表 ,则
还包括二进制的行数据(如果选择rows=y),这种格式与实际块中存储的行格式一致(可以通过特殊工具比如UltraEdit
查看到,如下,当然这些语句前面还有很多的二进制的字符)。 

基本可以看出,就是将建立Objects的脚本导出,数据部分采用insert into的方式进行记录。 

"
CREATE TABLE "PF_TEMP_EXCEL" ("COL1" VARCHAR2(36), "COL2" VARCHAR2(36), "COL3" VARCHAR2(36), "COL4" VARCHAR2(36))  PCTFREE 10 PCTUSED 0

INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1) TABLESPACE "USERS" LOGGING NOCOMPRESS
INSERT INTO

"PF_TEMP_EXCEL" ("COL1", "COL2", "COL3", "COL4") VALUES (:1, :2, :3, :4)


exp/imp 是跨平台的数据迁移工具,因为它的导出是一种逻辑模式,而不是物理的,也就是说它是以建立物件脚本以及
SQL语句插入数据为存储格式的,而不是block为单位来复制的(Standby就是以Block为单位来进行备份的),所以和
平台没有关系。exp/imp可以作为数据备份的补充手段(逻辑备份)。  


备注: Oracle10g或以后可以使用expdp/impdp, 但是exp/imp还是可以使用。后面会详细讲到expdp/impdp.  

 

exp有四种模式:

A. 表模式
B. 用户模式(Schema)
C. 数据库模式(可以导出除了用户sys以外的数据库里的所有对象)
D. 可传输表空间模式(导出某个指定的表空间中的所有对象) 

 

$ exp  help=y 可以得到帮助
C:\>exp help=y

 

 

 


导出某个用户(hrm)下指定的表(表模式),其中table所在用户就是hrm,如果不是需要加入schema.

$ exp hrm/hrm file=emp_dept.dmp  tables=(employees,departments)  log=empdept.log

$ exp hrm/hrm file=emp_dept.dmp  tables=(oe.employees,oe.departments)  log=empdept.log
(其中要求hrm用户有权限导出导入,且hrm用户有查看oe用户下这两个表的权限) 


导出某个用户下的所有对象(对象包括:table,procedure,index,grant,trigger,constraint等)
$ exp  sys/sysoracle file=hrm.dmp  wner=hrm   log=hrm.log 

 

 


导出整个数据库: 连接用户必须有 exp_full_database的系统权限

SQL> grant exp_full_database to  hrm ; 
$ exp  hrm/hrm  file=full_db.dmp  full=y  log=full_db.log 

 

 


导出时的输入参数可以使用一个文件代替。

$vi emp.par

userid=hrm/hrm
file=emp.dmp
tables=(emp,dept)
log=emp.log 

执行导出命令: $ exp  parfile=emp.par 

 

 

 

导出有两种方式:  A. 传统路径导出 , B. 直接路径导出

A. 传统路径导出: exp采用SQL语句的方式把要导出的表的数据检索出来,通过网络将数据传输到客户端,在客户端生成
转储文件,由于是SQL语句方式,就需要在shared pool中解析执行计划,将数据缓存到buffer cache中,然后传递到客户
端,这是默认的导出方式。

B. 直接路径导出: 采用加入参数 direct=y 来设置。这种exp不采用传统的SQL读取数据的方式,而是直接获得数据块,并
绕过shared pool 和buffer cache , 将数据块里面的数据抽取出来以后直接传输给客户端上,这种方式相对传统方式会快很多,但是这种方式有一些限制,比如

不能导出含有 LOB,BFILE等大对象的表,还有含有Query子句的exp也不能使用direct=y  . 

传统路径导出: 要经过SQL语句,shared pool, buffer cache等一系列SQL必须的过程,且数据会被移动到一个工作区,行被提出来,检查和Query查询中的

where子句(如果有的话)是否匹配。所以速度慢一些。

直接路径导出: Specifying DIRECT=y causes Export to extract data by reading the data directly, bypassing the SQL command-processing layer

(evaluating buffer). This method can be much faster than a conventional path Export. 

 

 

 
imp导入同样有四种模式 。
$ imp hr/hr file=emp.dmp table=(emp,dept) log=emp.log ignore=y
$ imp sys/sysora fromuser=hrm  touser=hrkq  file=emp.dmp table=(emp,dept) ignore=y  log=emp.log 
导入时也可以使用参数文件 parfile .

 

导入物件的顺序:

A. 创建表结构
B. 导入表的数据
C. 创建索引
D. 导入触发器
E. 对导入的表启用完整性约束
F. 建立所有位图,函数以及其他索引 

如果出现table已经存在等错误,那么imp就不能正常进行了,我们可以使用ignore=y来解决。

 

 

exp/imp的注意事项:


1. Conventional path Export.
    -------------------------
传统导出模式使用SQL SELECT语句抽取表数据。将数据从磁盘中读入到buffer cache缓冲区中,并应用SQL表达式,将纪录返回给导出客户端,然后写到到处文件

2. Direct path Export.
    -------------------
直接导出模式,数据直接从磁盘中读取到导出session的UGA中,跳过了SQL命令处理层。避免了不必要的数据转换, 然后将纪录返回给导出客户端,然后写到到

处文件   跳过了SQL命令处理层表示DIRECT导出不支持QUERY选项。


性能
    1. Direct Export 比Conventional Export要快很多。在实际应用中,如果直接模式导出需要时间N,传统模式导出则需要2*N到3*N之间。
    2. 当Direct Export 的时候设置大的RECORDLENGTH(length of IO record) 参数可以加快导出。最大64k,
    exp userid=system/manager full=y direct=y recordlength=65535
    file=exp_full.dmp log=exp_full.log
    imp userid=system/manager full=y recordlength=65535
    file=exp_full.dmp log=imp_full.log
    3. Direct 模式导出并不影响导入数据的速度;导入数据与传统模式花费时间一样。
    4. imp时适当调整参数buffer以及数据库undo大小以及UNDO_RETENTION时间 。
    5. exp时候加入 consistent=n  

限制
    ------------
    1. 导出表空间必须使用传统模式。
    2. 含有LOB对象的表不支持直接导出模式。
    3. 直接导出不支持QUERY.
    4. 直接导出模式使用RECORDLENGTH设置一次可以导出数据的量,传统模式使用buffer设置.
    5. 低版本直接导出模式要求导出客户端和数据库字符集设置一致。

    直接导出模式bug比传统模式要多,但由于其导出数据在性能上的优势,仍然要多加使用。

 


常用的一些exp/imp语句例子:


exp  "'sys/oracle  as sysdba'"  buffer=8192  tables=pdm626.streamdata  feedback=200  compress=n   filesize=20G  file=

(streamdata1,streamdata2)  log=stream    

exp  system/system  QUERY=\"WHERE streamid>=1 and streamid<2000\"   buffer=8192   tables=pdm626.streamdata   feedback=50  consistent=n 

compress=n    filesize=20G   log=pdm_streamdata  file=(pdmstream_1,pdmstream_2)     


exp  "'sys/oracle  as sysdba'"  buffer=8192  wner=cis  feedback=100  consistent=n compress=n   filesize=10G  log=cis 

imp  "'sys/oracle  as sysdba'"  fromuser=cis  touser=cis  file=cis_1.DMP  log=cisimp2  ignore=y 

 

exp  "'sys/oracle  as sysdba'"  buffer=8192  wner=pdmext  feedback=100  consistent=n  compress=n   filesize=10G  log=pdmext  

exp  "'sys/oracle  as sysdba'"  buffer=8192  wner=pdmext   feedback=100   consistent=n
compress=n    filesize=20G   log=pdmext_data  file=(pdmext_1,pdmext_2,pdmext_3,pdmext_4,pdmext_5)   


imp  "'sys/oracle  as sysdba'"  fromuser=pdmext  touser=pdmext  file=pdmext_1.DMP  log=pdmextimp_data  ignore=y


exp  system/system  QUERY=\"WHERE streamid>=100000 and streamid<150000\"   buffer=8192   tables=pdm626.streamdata   feedback=50  consistent=n  compress=n    filesize=20G   log=pdmstream3  file=(pdmstream3_1,pdmstream3_2) 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-620590/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-620590/

内容概要:本文系统阐述了智能物流路径规划的技术体系与实践应用,涵盖其发展背景、核心问题建模、关键算法、多目标与动态环境处理、系统架构及典型应用场景。文章以车辆路径问题(VRP)及其变体为核心数学模型,介绍了从Dijkstra、A*等单智能体算法到多车VRP的元启发式求解方法(如遗传算法、蚁群算法、大规模邻域搜索),并深入探讨了多目标优化(成本、时间、碳排放)与动态环境(实时订单、交通变化)下的自适应规划策略。结合城市配送、干线运输、场内物流等案例,展示了路径规划在提升效率、降低成本方面的实际价值,并分析了当前面临的复杂性、不确定性等挑战,展望了AI融合、数字孪生、车路协同等未来趋势。; 适合人群:具备一定物流、运筹学或计算机基础,从事智能交通、物流调度、算法研发等相关工作的技术人员与管理人员,工作年限1-5年为宜。; 使用场景及目标:①理解智能物流路径规划的整体技术架构与核心算法原理;②掌握VRP建模方法与多目标、动态环境下路径优化的实现策略;③为物流系统设计、算法选型与系统优化提供理论依据与实践参考; 阅读建议:建议结合文中案例与数学模型,重点理解算法选择与实际业务场景的匹配逻辑,关注动态规划与多目标优化的工程实现难点,可配合仿真工具或开源求解器进行实践验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值