【Oracle篇】一文搞清exp/imp逻辑迁移工具的用法(第一篇,总共四篇)

news2024/12/23 5:45:21

☘️博主介绍☘️

✨又是一天没白过,我是奈斯,DBA一名✨

✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌️

❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣️❣️❣️

    好久不见又是新的一周,今天给大家的介绍的内容想必大家已经在文章标题了解了,那么话不多说,让我们开始今天的内容。

    在Oracle中作为一款备受推崇的转储工具,exp/imp在多个方面都表现出色。首先,它特别适用于小型数据库的转储工作,能够轻松实现数据的导出与导入,为数据库管理员提供了极大的便利。其次,在表空间迁移方面,exp/imp同样发挥着不可或缺的作用,能够确保数据在迁移过程中的完整性和准确性。此外,对于表的抽取操作,exp/imp也表现得游刃有余,无论是单个表的抽取还是多个表的批量抽取,都能高效完成。

    因此,无论是数据库管理员还是数据库开发者,掌握exp/imp逻辑迁移工具的使用方法都是非常重要的。在接下来的文章中,我将详细介绍exp/imp工具的基本概念、使用方法以及应用场景,希望能够为大家在数据库管理工作中提供有益的参考和帮助。

    除了exp/imp逻辑迁移工具,在10g还引入了expdp/impdp,在效率上要比exp/imp要高。如果一篇文章去整理两个逻辑迁移工具和案例篇幅会过长,所以我将分成四篇来进行介绍,以便大家因为篇幅过长而感到阅读疲惫。四篇的内容分别如下:

  • 第一篇:一文搞清exp/imp逻辑迁移工具的用法(当前篇)
  • 第二篇:一文搞清expdp/impdp逻辑迁移工具的用法
  • 第三篇:expdp/impdp轻松完成从GBK到UTF8编码的迁移
  • 第四篇:expdp/impdp高效完成全库迁移

         

目录

1、exp用法:

exp导出案例:

案例1:实例完全导出(普通用户完全导出,需要有EXP_FULL_DATABASE和IMP_FULL_DATABASE角色)

案例2:导出时限制导出文件大小(os文件大小有限制或者导出量太大)

案例3:用户模式:(用户的所有对象被输出到文件中)

案例4:表模式:(用户的表被输出到文件中)

案例5:导出全库所有对象包括表结构,但不包含表数据(rows=n)

案例6:导出生产用户某些表的前10行(query=" 'where rownum<10' ")

2、imp用法:

exp导出案例:

案例1:完全导入

案例2:用户导入

案例3:表导入(不支持在导入时重命名,也就是不支持异表导入)

3、exp/imp导出和导入常见问题


         

    exp/imp工具在数据库逻辑迁移和备份中发挥着重要的作用,它拥有许多明显的优点,但同时也存在一些不容忽视的缺点。

优点:

       1. 操作简便:exp工具的使用相对直观和简单,即使对数据库不是很熟悉的管理员也可以较快上手,进行数据的导出操作。
       2. 逻辑备份:exp工具主要进行逻辑备份,这意味着它备份的是数据库对象的结构和数据,而非底层的物理文件。这样的备份更易于理解、查看和编辑,适合进行跨平台或跨版本的迁移。

       3. 灵活性:exp工具允许用户选择性地导出特定的表、表空间或用户,这为用户提供了很大的灵活性,可以根据实际需求进行定制化的备份。

            

缺点:

       1. 性能问题:对于大型数据库,exp工具可能会遇到性能瓶颈,导出过程可能会变得非常缓慢,影响业务的正常运行。
       2. 不支持增量备份:exp工具只能进行全量备份,无法只备份自上次备份以来发生变化的数据。这意味着每次备份都会生成大量的数据,占用较多的存储空间。
       3. 依赖数据库版本:不同版本的数据库可能使用不同版本的exp工具,这可能导致在不同版本之间进行迁移时出现问题。此外,随着数据库技术的不断发展,新的功能和特性可能无法在旧版本的exp工具中得到支持。

          

官方文档对exp/imp的介绍(12c版本):

Original Export

Original Import

                

1、exp用法:

exp -help选项:

userid:用于指定执行导出操作的用户名,口令,连接字符串
full=n|y:用于指定执行是否完全导出数据库
Buffer=:是指数据行的缓冲区大小(byte),默认值根据系统而定。Exp时建议>64000,imp时建议>100000
Owner=:用于指定执行导出操作的方案(用户)
File=:用于指定导出的文件名
Tables=:用于指定执行导出操作的表
ROWS=n|y:是否导出数据,默认导出
TABLESPACES:要导出的表空间列表
Log=:库log日志存储目录
Rows=n|y:用于指定执行导出操作是否要导出表中的数据
query=:指定导出表的前多少行(从where子句后开始)
FEEDBACK=:每多个行显示进度,如:feedback=100000
FILESIZE:每个导出文件的最大大小。
FLASHBACK_SCN:用于将会话快照设置回以前状态的SCN 
FLASHBACK_TIME:用于获取最接近指定时间的 SCN 的时间

COMPRESS:导入到一个区 (Y),建议为n 。主要目的是为了消除存储碎片,以保证某张表的所有记录都存储在连续的空间里。但是负面效应很明显,如果该参数值为y,则会将高水位线以下的所有extent导入到一个区中,因此在导入时很有可能出现,明明表中数据很少,但是却花了很多时间在建立的extent上。 且自oracle9i 开始,使用了本地管理的表空间,存储碎片的问题应该比低版本好多了,建议将compress设为n。

RECORDLENGTH:IO记录的长度(最大为 64k)

STATISTICS在导出文件中保留对象的统计信息,默认值ESTIMATE,还可以为compute或者none。如果导出时出现EXP-00091: Exporting questionable statistics,可以考虑将STATISTICS设置为NONE。

OBJECT_CONSISTENT只在对象导出期间设置为只读的事务处理 (N)

PARFILE指定导出参数文件的名称,可以写入exp的所有参数。parfile=[directory_path] file_name。表比较多的情况下建议用parfile各个参数在parfile里写好。tables=test.liu,test.liu2

            

exp导出案例:

案例1:实例完全导出(普通用户完全导出,需要有EXP_FULL_DATABASE和IMP_FULL_DATABASE角色)

方式一:使用system用户

[oracle@11g ~]$ exp system/password compress=n buffer=4096000 feedback=100000 full=y file=exp_orcl_full.dmp log=exp_orcl.log

              

方式二:使用sys用户,在linux /unix上需要设置"/ as sysdba"为 \"/ as sysdba\"转译符号

[oracle@11g ~]$ exp \"/ as sysdba\" compress=n buffer=4096000 feedback=100000 full=y file=exp_orcl_full.dmp log=exp_orcl.log

            

案例2:导出时限制导出文件大小(os文件大小有限制或者导出量太大)

[oracle@11g ~]$ exp \"/ as sysdba\" compress=n buffer=4096000 feedback=100000 full=y file=exp_orcl_full_01.dmp,exp_orcl_full_02.dmp log=exp_orcl.log filesize=200g  
###exp导出之前先预估数据量,避免因为限制了文件而导致错误,如果file指定了2文件,限制每个文件200g,如果数据量有450g,多出来的数据,exp会自动弹出expdat.dmp,也就是用这个文件名继续导出。

注意:exp中没有%U参数,设置file=exp_orcl_full_%U.dmp,导出时不会进行生成1、2、3..文件,expdp支持

            

案例3:用户模式:(用户的所有对象被输出到文件中)

方式一:通过生产用户直接导出,但是只能导出这一个用户的数据

[oracle@11g ~]$ exp user1/password compress=n buffer=4096000 feedback=100000 file=exp_orcl_user1.dmp log=exp_orcl.log

              

方式二:使用sys用户,在linux /unix上需要设置"/ as sysdba"为 \"/ as sysdba\"转译符号。这种方式可以导出多个生产用户

[oracle@11g ~]$ exp \"/ as sysdba\" compress=n buffer=4096000 feedback=100000 owner=user1,user2 file=exp_orcl_user.dmp log=exp_orcl.log

               

案例4:表模式:(用户的表被输出到文件中)

方式一:使用sys用户,在linux /unix上需要设置"/ as sysdba"为 \"/ as sysdba\"转译符号

[oracle@11g ~]$ exp \"/ as sysdba\" compress=n buffer=4096000 feedback=100000 tables=user1.table_name1,user1.table_name2 file=exp_orcl_table.dmp log=exp_orcl.log

            

方式二:通过生产用户直接导出

[oracle@11g ~]$ exp user1/password compress=n buffer=4096000 feedback=100000 tables=table_name1,table_nam2 file=exp_orcl_table.dmp log=exp_ orcl.log

             

案例5:导出全库所有对象包括表结构,但不包含表数据(rows=n)

[oracle@11g ~]$ exp \"/ as sysdba\" compress=n buffer=4096000 feedback=100000 full=y file=exp_orcl_full.dmp log=exp_orcl.log rows=n

             

案例6:导出生产用户某些表的前10行query=" 'where rownum<10' "

[oracle@11g ~]$ exp user1/password compress=n buffer=4096000 feedback=100000 tables=table_name1 file=exp_orcl_table.dmp log= exp_orcl.log query=" 'where rownum<10' "      
###普通用户导出时需要EXP_FULL_DATABASE和IMP_FULL_DATABASE角色,dba权限包括这2个角色

                

2、imp用法:

imp -help选项:

Userid用于指定执行导入操作的用户名,口令,连接字符串

Tables=:用于指定执行导入操作的表

Formuser=:指出导出时dmp文件中记载的用户信息(源用户数据),多用户时fromuser=(user1,user2)。配合touser使用.

Touser=dmp 文件要导入到什么目标用户中(目标用户)。配合formuser使用

ROWS=n|y:是否导入数据,默认导入

full=n|y:用于指定执行导入整个文件

Ignore=n|y默认n(有表时中断导入,不冲突的数据也不导入),建议y。 恢复数据,当恢复到某个已经存在的表,就要根据ignore参数的设置来决定如何操作。若ignore=Y,Oracle不执行CREATE TABLE 语句,直接将数据插入到表中。如果插入的记录违背了约束条件,比如主键约束,则出错的记录不会插入,但合法的记录会添加到表中。 注意:如果表中的字段并没有唯一性约束,那么在使用ignore=y的情况下很有可能插入重复数据,ignore=y类似impdp的TABLE_EXISTS_ACTION=append,没违反约束的值会全部插入

Buffer=:是指数据行的缓冲区大小,默认值根据系统而定,通常应设置为高值,exp 的buffer 最好>64000,imp 的buffer 最好>100000

Show=y:导入时可以显示执行的DDL语句

commit:默认N,及在每插入完一个对象后提交。当COMMIT=Y时是根据BUFFER的大小决定每次提交的数量。对于包含了LONG、RAW、DATE等类型的表,不论BUFFER设置多大,都是每插入一行进行提交。设置commit=y可以防止减少回滚段的压力,但由于频繁提交,会带来性能上的影响,推荐使用COMMIT=N。

PARFILE指定导参数文件的名称,可以写入imp的所有参数。parfile=[directory_path] file_name。表比较多的情况下建议用parfile,各个参数在parfile里写好。tables=test.liu,test.liu2

TRANSPORT_TABLESPACE导入可传输的表空间元数据 (N)

TABLESPACES:将要传输到数据库的表空间

DATAFILES:将要传输到数据库的数据文件

TTS_OWNERS:拥有可传输表空间集中数据的用户

              

exp导出案例:

案例1:完全导入

方式一:使用system用户

[oracle@11g ~]$ imp system/password buffer=4096000 feedback=100000 full=y file=exp_orcl_full.dmp log=imp_orcl.log ignore=y

             

方式二:使用sys用户,在linux /unix上需要设置"/ as sysdba"为 \"/ as sysdba\"转译符号

[oracle@11g ~]$ imp \"/ as sysdba\" buffer=4096000 feedback=100000 full=y file=exp_orcl_full.dmp log=imp_orcl.log ignore=y  

         

案例2:用户导入

[oracle@11g ~]$ imp \"/ as sysdba\" fromuser=user1 touser=user1 buffer=4096000 feedback=100000 file=exp_orcl_user.dmp log=imp_orcl.log ignore=y

              

案例3:表导入(不支持在导入时重命名,也就是不支持异表导入)

方式一:使用sys用户,在linux /unix上需要设置"/ as sysdba"为 \"/ as sysdba\"转译符号

[oracle@11g ~]$ imp \"/ as sysdba\" fromuser=user1 touser=user1 buffer=4096000 feedback=100000 tables=table_name1,table_name2 file=exp_orcl_table.dmp log=imp_orcl.log  ignore=y

            

方式二:通过生产用户直接导出

[oracle@11g ~]$ imp user1/password fromuser=user1 touser=user1 buffer=4096000 feedback=100000 tables=table_name1,table_nam2 file=exp_orcl_table.dmp log=imp_orcl.log ignore=y  

                      

3、exp/imp导出和导入常见问题

             

1)imp导入时避免磁盘排序。涉及到 sort_area_size 参数,也就是我们的 PGA 要够大。

                 

2)imp导入时避免日志切换等待。

解决版本:增加重做日志组的数量,增大日志文件大小  

           

3)一般来说,从低版本数据库导入到高版本问题不大,麻烦的是将高版本数据库的数据导入到低版本中,所以必须正确地使用 EXP 和 IMP 的版本。

               

4)imp导入时数据库对象已经存在

解决办法:一般情况,导入数据前应该彻底删除目标数据下的表、序列、函数/过程、触发器等。数据库对象已经存在,按缺省的imp参数则会导入失败。如果用了参数ignore=y,会把 exp 文件内的数据内容导入如果表有唯一关键字的约束条件, 不合条件将不被导入如果表没有唯一关键字的约束条件, 将引起记录重复。

                 

5)imp导入时权限不足

解决办法:如果要把A用户的数据导入B用户下, A 用户需要有imp_full_database权限

             

6)imp导入时大表存储分配失败

解决办法:默认EXP参数compress = y,也就是把所有的数据压缩在一个数据块上导入时,如果不存在连续一个大数据块则会导入失败,导出大表时记得compress= n, 则不会引起这种错误。


    好啦!今天的内容就分享到这里,那么下一篇文章将详细介绍另一款逻辑迁移工具expdp/impdp。相比于exp/imp,expdp/impdp最大的优势在于支持并行导出和导入,这在效率上比exp/imp要高很多。因此,在Oracle 10g及以后的版本中,expdp/impdp成为了更受欢迎的选择。那么,我们下一篇文章再见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1525415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

{“message“:“Expecting value (near 1:1)“,“status“:400}

按照网页请求数据的方式无法获取数据 {“message”:“Expecting value (near 1:1)”,“status”:400} 将content-type改为以下请求数据方式 content-type: application-json,参考:https://stackoverflow.com/questions/72333040/why-400-response-status-code-when-send-post…

组建对等网

一、概念 对等网络&#xff08;Peer-to-Peer, P2P&#xff09;是一种分布式网络架构&#xff0c;其中每个参与节点&#xff08;称为"对等体"或"节点"&#xff09;既可以作为客户端也可以作为服务器&#xff0c;直接与网络中的其他节点分享资源&#xff08…

【Ubuntu20.04】Clion 配置 Libtorch + OpenCV

首先根据自己的CUDA版本安装正确对应的cuda和cudnn并进行配置。 这里安装的是cuda-11.3版本&#xff0c;以下基于这个版本进行安装。 1. 安装 Clion 因为Clion更容易直接编写CMakelists.txt&#xff0c;所以使用Clion作为IDE。 需要在File -> Setting -> CMake的CMake…

汽车电子零部件(6):DMS/OMS、CMS

前言: 有一个部件过去不曾有,而如今有可能要标准化标配化,那就是Driver Monitoring System (DMS)驾驶员监控系统、Occupant Monitoring System (OMS)乘客监控系统和Camera Monitor System(CMS)摄像头监控系统。 汽车视觉技术的创新推动先进驾驶辅助系统的变革(ADAS),并…

ssh 下连接Mysql 查看数据库数据表的内容的方法及步骤

要通过SSH连接到MySQL数据库&#xff0c;可以按照以下步骤进行操作&#xff1a; 在本地计算机上打开终端或命令提示符。 使用SSH命令连接到远程服务器。命令的格式如下&#xff1a; ssh usernameserver_ip其中&#xff0c;username是指在远程服务器上的用户名&#xff0c;serv…

Testng框架集成新业务

1. 向公司开发人员要setting.xml 修改 <localRepository>/Users/qa/.m2/repository</localRepository> 为自己的仓库地址 2. 如果有开发人员给的下载好的Maven仓库 可以直接解压缩用

FPGA 学习需要哪些东西?

FPGA 学习需要哪些东西&#xff1f; 三样东西&#xff1a;第一就是完整的理论&#xff0c;第二一套开发板&#xff0c;第三可练手的项目 第一&#xff0c;一套完整的课程&#xff0c; 这个课程必须是紧跟技术发展的&#xff0c;适应市场的&#xff0c;这样不至于学完后发现太…

Python从0到100(六):Python分支和循环结构的应用

分支和循环结构的重要性不言而喻&#xff0c;它是构造程序逻辑的基础。 一、程序的结构控制 单分支结构&#xff1a; 单分支结构是分支结构中最简单的一种方式&#xff0c;单分支结构只需要判断一个条件&#xff0c;根据这个条件是否成立来决定是否执行一段语句。 二分支结…

Python递归函数画五角星

递归函数是在函数内部调用自己的函数。递归函数通常有两个部分&#xff1a;基本情况和递归情况。 基本情况是递归函数停止递归的条件&#xff0c;当满足基本情况时&#xff0c;递归函数将不再递归调用自己&#xff0c;而是返回结果。 递归情况是递归函数继续调用自己的条件&a…

RuiYi-Vue开源项目1-下载并实现运行RuiYi-Vue项目

下载并实现运行RuoYi项目 RuiYi-Vue介绍环境需要下载项目项目配置后端项目配置前端项目配置 启动后前端登录页面截图 RuiYi-Vue介绍 RuoYi-Vue 是一个 Java EE 企业级快速开发平台&#xff0c;基于经典技术组合&#xff08;Spring Boot、Spring Security、MyBatis、Jwt、Vue&a…

力扣-1351 统计有序矩阵中的负数

给你一个 m * n 的矩阵 grid&#xff0c;矩阵中的元素无论是按行还是按列&#xff0c;都以非严格递减顺序排列。 请你统计并返回 grid 中 负数 的数目。 示例 1&#xff1a; 输入&#xff1a;grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]] 输出&#xff1a;8 解释&…

迁移学习怎么用

如果想实现一个计算机视觉应用&#xff0c;而不想从零开始训练权重&#xff0c;比方从随机初始化开始训练&#xff0c;更快的方式是下载已经训练好权重的网络结构&#xff0c;把这个作为预训练&#xff0c;迁移到你感兴趣的新任务上。ImageNet、PASCAL等等数据库已经公开在线。…

力扣L16--- 189.轮转数组-2024年3月18日

1.题目描述 2.知识点 注1&#xff1a; System.arraycopy() 方法是Java中用于数组复制的一个静态方法。它允许将一个数组的部分或全部内容复制到另一个数组中的指定位置。其语法如下&#xff1a; public static void arraycopy(Object src, int srcPos, Object dest, int dest…

Linux磁盘配额

磁盘配额 概述 Linux系统作为一个多用户的操作系统&#xff0c;在生产环境中&#xff0c;会发生多个用户共同使用一个磁盘的情况&#xff0c;会造成Linux根分区的磁盘空间耗尽&#xff0c;导致Linux系统无法建立新的文件&#xff0c;从而出现服务程序崩溃、系统无法启动等故障…

Vue3项目部署安装

Vue3ts部署 查看官网安装项目vue3的命令&#xff08;四个&#xff09;其中有&#xff1a; yarn create vuelatest 我执行时遇到报错&#xff0c;可能是我yarn版本不是最新 的问题&#xff0c; 改用这个命令去掉latest即可 yarn create vue 新项目先要安装yarn依赖,才能yarn …

LLM文本生成—解码策略(Top-k Top-p Temperature)

{"top_k": 5,"temperature": 0.8,"num_beams": 1,"top_p": 0.75,"repetition_penalty": 1.5,"max_tokens": 30000,"message": [{"content": "你好","role": "user&…

十八、软考-系统架构设计师笔记-真题解析-2022年真题

软考-系统架构设计师-2022年上午选择题真题 考试时间 8:30 ~ 11:00 150分钟 1.云计算服务体系结构如下图所示&#xff0c;图中①、②、③分别与SaaS、PaaS、IaaS相对应&#xff0c;图中①、②、③应为( )。 A.应用层、基础设施层、平台层 B.应用层、平台层、基础设施层 C.平…

python知识点总结(二)

这里写目录标题 1、什么是解释性语言&#xff0c;什么是编译性语言&#xff1f;2、说说中作用域是怎么划分的3、type和isinstance方法的区别4、浅拷贝和深拷贝5、python中变量在内存中存储方式6、python中的封装、继承、多态7、python中内存管理机制是怎么样的&#xff1f;8、简…

Halcon 深度图片==>点云图

文件路径 链接:https://pan.baidu.com/s/1UfFyZ6y-EFq9jy0T_DTJGA 提取码:ewdi * 1.读取深度图片 *****************

ubuntu16.04上pycharm卡住关不了

在使用pycharm的过程中&#xff0c;突然卡住&#xff0c;黑屏&#xff0c;手动界面关闭失败&#xff0c;可尝试以下方法解决。 输入以下命令&#xff0c;查看所有和pycharm有关的进程 ps -ef | grep pycharm得到以下结果 根据相应的PID&#xff0c;输入以下命令&#xff0c;强…