mysql 导入 export_Import/Export导入导出数据(理论)

Import/Export导入导出数据(理论)

Import/Export可以完成的任务:

1、获取数据库中对象的创建脚本(如建表脚本,以及其关联的索引、约束等);

2、备份数据。除整体导入导出外,还可以选择只导出数据库中的指定对象,或者只导出表中符合条件的数据(EXP命令提供了对应参数,能够支持WHERE查询的方式限定导出记录),这一功能是物理备份不能实现的;

3、跨平台、跨版本迁移数据;

4、在多个Oracle数据库之间通过传输表空间特性快速复制数据;

调用IMP和EXP

1、创建相关视图和角色

如果是使用DBCA创建的数据库,那么DBCA会自动创建执行IMP/EXP所需的视图和角色。如果你的Oracle数据库是通过手工方式CREATE DATABASE语法创建,那么在执行IMP/EXP之前,必须首先执行cataxp.sql或catalog.sql(后者中包含调用catexp.sql的语句)

cataxp.sql脚本文件中的语句主要执行下列任务:

1)创建执行Import/Export所需的数据字典及相关视图;

2)创建EXP_FULL_DATABASE角色并收取相应权限,拥有该角色的用户能够执行整库的导出;

3)创建IMP_FULL_DATABASE角色并授予相应权限,拥有该角色的用户能够执行整库的导入;

4)将EXP_FULL_DATABASE/IMP_FULL_DATABASE两个角色授予DBA角色。

2、授予权限

1)执行IMP/EXP的用户至少要有CREATE SESSION权限(该权限包含在CONNECT角色中);

2)拥有DBA角色的用户不用单独授予IMP/EXP权限,且拥有DBA角色的用户被称为特权用户,其所导出的DUMP文件在导入时,也必须是拥有DBA角色的特权用户。

3)在执行跨版本的数据迁移任务,导出与导入时IMP/EXP的版本是否适当,将决定导出或导入任务能否顺利执行。有一个通用的规则,就是尽可能用低版本的EXP执行导出(源端和目标端数据库版本中,哪个低就用哪个执行导出),尽可能用目标数据库的IMP版本导入。

3、调用方式

1)命令行方式调用

注意:如果操作系统对于执行命令的字符长度是有限制的,如果指定的参数或参数值较多,超出了操作系统的限制,那么命令执行就会报错。对于这种情况必须使用参数文件调用方式。

2)参数文件方式调用

IMP和EXP命令都支持PARFILE参数,该参数的作用就是指定一个参数文件。指定的参数文件是一个文本格式的文件,用户可以使用任意文本编辑工具创建或编辑,其中的内容也并无特殊,仍是EXP/IMP命令支持的那些参数。例如,创建参数文件paramter.dat:file=d:backupuserexp.dmp

Indexes=n

buffer=20480000

……

然后通过EXP命令执行导出时,就可以通过下列方式进行:

EXP USERNAME/PASSWORD@TNSNAME PARFILE=PARAMTER.DAT

3)交互式调用(略)

4)处理模式

Import/Export工具在使用时提供了下列4种操作模式:

i.整库模式:导入/导出整个数据库,必须拥有EXP_FULL_DATABASE和IMP_FULL_DATABASE角色或DBA特权,对应参数FULL;

ii.表空间模式:导入/导出指定表空间中的对象数据,对应参数TABLESPACE;

iii.用户模式:导入/导出用户对象,即OWNER为当前连接用户的所有对象,如果是DBA角色用户,则可以同时导出多个用户,对应IMP/EXP命令中的OWNER参数。

iv.表模式:导入/导出指定的表或表的分区,对应参数TABLES。

5)常用导出/导入命令

i.EXP/IMP HELP=Y

导出

ii.exp username/pwd@tnsname file=….dmp log=….log owner=(username)

iii.exp username/pwd@tnsname file=….dmp log=….log full=y

iv.exp username/pwd@tnsname file=….dmp log=….log full=y rows=n //只导结构

v.exp username/pwd@tnsname file=….dmp log=….log tables=(tab1,tab2…)

vi.exp username/pwd@tnsname file=….dmp log=….log tables=(tab1) query=”’ where id>10’”

vii.exp username/pwd@tnsname file=….dmp log=….log tables=(tab1) direct=y recordlength=65535 buffer=10240000

viii.exp username/pwd@tnsname parfile=parfile.dat

parfile.dat:

file=….dmp

log=….log

owner=(username)

导入

ix.导入指定表到相同用户:

imp username/pwd@tnsname file=….dmp log=….log ignore=y full=y

x.导入指定表到其他用户

imp username/pwd@tnsname file=….dmp log=….log ignore=y fromuser=user1 touser=user2

这里有些问题需要特别注意:

IMP在导入数据时会首先创建表结构,这个表结构来自于EXP导出的数据库,其中包含存储属性,并且肯定是在源端数据库的存储属性,那么IMP在目标端创建表时,存储属性仍然将继续继承源端属性,于是数据在源端存储在哪个表空间,目标端时仍然会寻找并存储到那个表空间。如果找到了,就会存储到那个表空间中,否则,那就会报错。

因此将数据导入到其他用户时就要注意这个问题了:

场景1:虽然导入的用户不同,但其缺省表空间和导出用户表空间相同,则没问题;

场景2:导入的用户不同,且其缺省的表空间和导出用户表空间也不同,但数据库中有导出用户的表空间,如果此时不做任何处理直接调用上面命令导入,其结果是不会报错,但实际上确实将数据导入到和导出时同名的那个表空间了,显然不符合我们的初衷。此时需要这样提前处理:

SQL>conn / as sysdba

SQL>alter user impusername quota unlimited on impusertbspace;

SQL>revoke unlimited tablespace from impusername;

如果用户需要对多个表空间拥有读写权限,需要执行多条alter user quota语句进行授权;其中impusertbspace是导入用户的缺省表空间名。

xi.导入含LOB类型的表:

我们在报错信息中找到这样的语句

create table “LOBTBL” (“ID” NUMBER, “DESCRIPT” CLOB);

于是我们以导入用户连接到数据库,执行该命令创建LOBTBL表即可。

如果导入的数据中含有LOB、分区表、分区索引等类型的对象,都按照上面示例中进行操作。也就是说必须首先在目标数据库中创建这些对象,然后才能执行导入操作。

xii.

6)常见导出/导入注意事项

i.BUFFER的计算方法:记录总条数*记录行的最大长度

导出

ii.EXP-00091(Exporting questionable statistics)错误:

执行导出任务的客户端字符集问题

首先查询数据库中的字符集:

SQL>select * from v$NLS_PARAMETERS where parameter=’NLS_CHARCTERSET’;

然后再执行导出任务的客户端设置NLS_LANG变量:

set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

iii.EXP-00904错误:

导出端版本和数据库版本不一致。

iv.生成Dump文件的数据库版本,如果比目标数据库的版本高,那么有可能失败;

v.DBA导出的,导入时也需要DBA权限;

vi.导出的数据中是否包含LOB类型,是否有分区表、分区索引等,如果有需要提前做些准备;

vii.IMP导入时的逻辑过程:创建表,插入数据,创建位图索引,创建完整性约束和触发器等并启用,最后导入其他类型的索引。

导入

viii.如果要导入的序列在目标端不存在,那么不会有问题,不过如果目标端已经存在同名的序列对象,则对于该序列导入问题可能会有问题存在。

解决办法就是在导入前,删除同名的序列![@more@]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值