oracle的imp使用方法

oracle的imp使用方法,第1张

1、exp和imp工具是否可以跨平台使用?比如我在windows上用exp导出数据之后到linux或者unix上用imp导入数据?
可以,但一般都是用同样的工具做导出和导入,windows上和unix上的endianness不同,混用的话,这个工具有bug。
2、exp和imp工具是否可以跨版本使用?比如我用9i的exp工具导出数据之后到10g上用imp导入数据这样是否可以?
这个工具有挺严格的版本限制,不能跨版本使用,你举例的这种会不识别的。
3、exp导出的时候,table参数填写的是多个表名,那么在imp的时候是否可以只导入其中的某一个表,该如何 *** 作?
exp
tables=(tab1,tab2)
imp
tables=(tab2)
没有什么特别的,这个自己试一下就知道了
4、exp导出的数据,在imp的时候如果机器上没有对应的表,imp工具是否会自动创建表结构?是否必须我手动先创建好表结构才能imp成功?
imp时候会自动执行create语句,然后才是insert,所以你的问题恰好说反了,
是如果你已经建好表结构的话,imp会报警告,说这个表已经存在了,需要在导入时ignore=y
5、exp导出的数据,在imp的时候目标机器上的数据库表空间分配是否必须和原来的机器上的一致(空间大小肯定够,就是空间的其他配置是否必须一致)?如果不一致是否可以?
这个工具有个限制,导出时候的表空间名必须就是导入到这个同样名称的表空间里面,如果没有这个表空间的话,导入失败,
不知道你说的其他配置是什么配置,我只能说只要名称相同的话,问题不大,具体问题具体分析了。

C:\>imp help=y
Import: Release 102050 - Production on 星期五 7月 17 22:56:25 2015
Copyright (c) 1982, 2007, Oracle All rights reserved
通过输入 IMP 命令和您的用户名/口令, 导入
*** 作将提示您输入参数:
例如: IMP SCOTT/TIGER
或者, 可以通过输入 IMP 命令和各种参数来控制导入
的运行方式。要指定参数, 您可以使用关键字:
格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,,valueN)
例如: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N
或 TABLES=(T1:P1,T1:P2), 如果 T1 是分区表
USERID 必须是命令行中的第一个参数。
关键字 说明 (默认值) 关键字 说明 (默认值)
--------------------------------------------------------------------------
USERID 用户名/口令 FULL 导入整个文件 (N)
BUFFER 数据缓冲区大小 FROMUSER 所有者用户名列表
FILE 输入文件 (EXPDATDMP) TOUSER 用户名列表
SHOW 只列出文件内容 (N) TABLES 表名列表
IGNORE 忽略创建错误 (N) RECORDLENGTH IO 记录的长度
GRANTS 导入权限 (Y) INCTYPE 增量导入类型
INDEXES 导入索引 (Y) COMMIT 提交数组插入 (N)
ROWS 导入数据行 (Y) PARFILE 参数文件名
LOG 屏幕输出的日志文件 CONSTRAINTS 导入限制 (Y)
DESTROY 覆盖表空间数据文件 (N)
INDEXFILE 将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES 跳过不可用索引的维护 (N)
FEEDBACK 每 x 行显示进度 (0)
TOID_NOVALIDATE 跳过指定类型 ID 的验证
FILESIZE 每个转储文件的最大大小
STATISTICS 始终导入预计算的统计信息
RESUMABLE 在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME 用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
COMPILE 编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION 导入流的一般元数据 (Y)
STREAMS_INSTANTIATION 导入流实例化元数据 (N)
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户
成功终止导入, 没有出现警告。
imp 时,加入TABLESPACES=backuptest参数
imp userid=system/123 TABLESPACES=backuptest file=e:\111\exp_cumldmp ignore=y full=y

最近用到Oracle导出导入数据,在网上看了别人的一些文章,总结如下:
Oracle导出导出有两中方式:一、利用exp imp导出导入;二、利用Oracel数据泵expdp impdp导出导入。
一、利用exp imp导出导入
exp imp 语法如下:
exp:
1) 将数据库orcl完全导出
exp system/manager@orcl file=d:\orcl_bakdmp full=y
2) 将数据库中system用户的表导出
exp system/manager@orcl file=d:\system_bakdmp owner=system
3) 将数据库中表table1,table2导出
exp system/manager@orcl file=d:\table_bakdmp tables=(table1,table2)
4) 将数据库中的表customer中的字段mobile以"139"开头的数据导出
exp system/manager@orcl file=d:\mobile_bakdmp tables=customer query=\"where mobile like '139%' \"
imp:
1) 将备份文件bakdmp导出数据库
imp system/manager@orcl file=d:\bakdmp
如果数据表中表已经存在,会提示错误,在后面加上ignore=y就可以了。
2) 将备份文件bakdmp中的表table1导入
imp system/manager@orcl file=d:\bakdmp tables=(table1)
exp imp导出导入数据方式的好处是只要你本地安装了Oracle客户端,你就可以将服务器中的数据导出到你本地计算机。同样也可以将dmp文件从你本地导入到服务器数据库中。但是这种方式在Oracle11g版本中会出现一个问题:不能导出空表。Oracle11g新增了一个参数deferred_segment_creation,含义是段延迟创建,默认是true。当你新建了一张表,并且没用向其中插入数据时,这个表不会立即分配segment。
解决办法:
1、设置deferred_segment_creation参数为false后,无论是空表,还是非空表,都分配segment。
在sqlplus中,执行如下命令:
SQL>alter system set deferred_segment_creation=false;
查看:
SQL>show parameter deferred_segment_creation;
该值设置后,只对后面新增的表起作用,对之前建立的空表不起作用,并且注意要重启数据库让参数生效。
2、使用 ALLOCATE EXTEN
使用 ALLOCATE EXTEN可以为数据库对象分配Extent,语法如下:
alter table table_name allocate extent
构建对空表分配空间的SQL命令:

SQL>select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
批量生成要修改的语句。
然后执行这些修改语句,对所有空表分配空间。
此时用exp命令,可将包括空表在内的所有表导出。

二、利用expdp impdp导出导入
在Oracle10g中exp imp被重新设计为Oracle Data Pump(保留了原有的 exp imp工具)

数据泵与传统导出导入的区别;
1) exp和imp是客户端工具,他们既可以在客户端使用,也可以在服务端使用。
2) expdp和impdp是服务端工具,只能在Oracle服务端使用。
3) imp只适用于exp导出文件,impdp只适用于expdp导出文件。

expdp导出数据:
1、为输出路径建立一个数据库的directory对象。
create or replace directory dumpdir as 'd:\';
可以通过:select from dba_directories;查看。
2、给将要进行数据导出的用户授权访问。
grant read,write on directory dumpdir to test_expdp;
3、将数据导出
expdp test_expdp/test_expdp directory=dumpdir dumpfile=test_expdp_bakdmp logfile=test_expdp_baklog schemas=test_expdp
注意:这句话在cmd窗口中运行,并且最后不要加分号,否则会提示错误。因为这句话是 *** 作系统命令而不是SQL。
impdp导入数据:
1、给将要进行数据导入的用户授权访问。
grant read,write on directory dumpdir to test_impdp;
2、将数据导入
impdp test_impdp/impdp directory=dumpdir dumpfile=test_expdp_bakdmp remap_schema=test_expdp:test_impdp

最后:这些内容是我在查找资料时找到,由于比较杂乱,现在稍作整理,方便以后查阅。同时,如果能给需要的人提供一些帮助,那就再好不过了。

我给你一些数据库常用的导入导出命令吧:\x0d\该命令在“开始菜单>>运行>>CMD”中执行\x0d\一、数据导出(expexe)\x0d\1、将数据库orcl完全导出,用户名system,密码accp,导出到d:\daochudmp文件中\x0d\exp system/accp@orcl file=d:\daochudmp full=y\x0d\\x0d\2、将数据库orcl中scott用户的对象导出\x0d\exp scott/accp@orcl file=d:\daochudmp owner=(scott)\x0d\\x0d\3、将数据库orcl中的scott用户的表emp、dept导出\x0d\exp scott/accp@orcl file= d:\daochudmp tables=(emp,dept)\x0d\\x0d\4、将数据库orcl中的表空间testSpace导出\x0d\exp system/accp@orcl file=d:\daochudmp tablespaces=(testSpace)\x0d\\x0d\二、数据导入(impexe)\x0d\1、将d:\daochudmp 中的数据导入 orcl数据库中。\x0d\imp system/accp@orcl file=d:\daochudmp full=y\x0d\\x0d\2、如果导入时,数据表已经存在,将报错,对该表不会进行导入;加上ignore=y即可,表示忽略现有表,在现有表上追加记录。\x0d\imp scott/accp@orcl file=d:\daochudmp full=y ignore=y\x0d\\x0d\3、将d:\daochudmp中的表emp导入\x0d\imp scott/accp@orcl file=d:\daochudmp tables=(emp)

一 导出工具 exp
1 它是 *** 作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin
exp导出工具将数据库中数据备份压缩成一个二进制系统文件可以在不同OS间迁移
它有三种模式:
a 用户模式: 导出用户所有对象以及对象中的数据;
b 表模式: 导出用户所有表或者指定的表;
c 整个数据库: 导出数据库中所有对象。
2 导出工具exp交互式命令行方式的使用的例子
$exp test/test123@appdb
Enter array fetch buffer size: 4096 > 回车
Export file: expdatdmp > mdmp 生成导出的文件名
(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 3
Export table data (yes/no): yes > 回车
Compress extents (yes/no): yes > 回车
Export done in ZHS16GBK character set and ZHS16GBK NCHAR character set
About to export specified tables via Conventional Path
Table(T) or Partition(T:P) to be exported: (RETURN to quit) > cmamenu 要导出的表名
exporting table CMAMENU 4336 rows exported
Table(T) or Partition(T:P) to be exported: (RETURN to quit) >要导出的表名n
Table(T) or Partition(T:P) to be exported: (RETURN to quit) > 回车
Export terminated successfully without warnings
3 导出工具exp非交互式命令行方式的例子
$exp scott/tiger tables=(emp,dept) file=/directory/scottdmp grants=y
说明:把scott用户里两个表emp,dept导出到文件/directory/scottdmp
$exp scott/tiger tables=emp query=\"where job=\'salesman\' and sal\<1600\" file=/directory/scott2dmp
说明:在exp里面加上导出emp的查询条件job='salesman' and sal<1600
(但我个人很少这样用,还是把满足条件的记录生成临时表后,再exp会方便一些)
$exp parfile=usernamepar
file=/directory1/username_1dmp,/directory1/username_2dmp
filesize=2000M log=/directory2/username_explog
参数文件usernamepar内容
userid=username/userpassword
buffer=8192000
compress=n
grants=y
说明:usernamepar为导出工具exp用的参数文件,里面具体参数可以根据需要去修改
filesize指定生成的二进制备份文件的最大字节数
(可用来解决某些OS下2G物理文件的限制及加快压缩速度和方便刻历史数据光盘等)
二导入工具 imp
1 它是 *** 作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin
imp导入工具将EXP形成的二进制系统文件导入到数据库中
它有三种模式:
a 用户模式: 导出用户所有对象以及对象中的数据;
b 表模式: 导出用户所有表或者指定的表;
c 整个数据库: 导出数据库中所有对象。
只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入
imp步骤:
(1) create table (2) insert data (3) create index (4) create triggers,constraints
2导入工具imp交互式命令行方式的例子
$ imp
Import: Release 81600 - Production on 星期五 12月 7 17:01:08 2001
(c) Copyright 1999 Oracle Corporation All rights reserved
用户名: test
口令:
连接到: Oracle8i Enterprise Edition Release 81600 - 64bit Production
With the Partitioning option
JServer Release 81600 - Production
导入文件: expdatdmp> /tmp/mdmp
输入插入缓冲区大小(最小为 8192 ) 30720>
经由常规路径导出由EXPORT:V080106创建的文件
警告: 此对象由 TEST 导出, 而不是当前用户
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入
只列出导入文件的内容(yes/no):no>
由于对象已存在, 忽略创建错误(yes/no):no> yes
导入权限(yes/no):yes>
导入表数据(yes/no):yes>
导入整个导出文件(yes/no):no> yes
正在将TEST的对象导入到 SCOTT
正在导入表 "CMAMENU" 4336行被导入
成功终止导入,但出现警告。
3导入工具imp非交互式命令行方式的例子
$ imp system/manager fromuser=jones tables=(accts)
$ imp system/manager fromuser=scott tables=(emp,dept)
$ imp system/manager fromuser=scott touser=joe tables=emp
$ imp scott/tiger file = expdatdmp full=y
$ imp scott/tiger file = /mnt1/t1dmp show=n buffer=2048000 ignore=n
commit=y grants=y full=y log=/oracle_backup/log/imp_scottlog
$ imp system/manager parfile=paramsdat
paramsdat 内容
file=dbadmp show=n ignore=n grants=y fromuser=scott tables=(dept,emp)
4导入工具imp可能出现的问题
(1) 数据库对象已经存在
一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;
数据库对象已经存在, 按缺省的imp参数, 则会导入失败
如果用了参数ignore=y, 会把exp文件内的数据内容导入
如果表有唯一关键字的约束条件, 不合条件将不被导入
如果表没有唯一关键字的约束条件, 将引起记录重复
(2) 数据库对象有主外键约束
不符合主外键约束时, 数据会导入失败
解决办法: 先导入主表, 再导入依存表
disable目标导入对象的主外键约束, 导入数据后, 再enable它们
(3) 权限不够
如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限
(4) 导入大表( 大于80M ) 时, 存储分配失败
默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上
导入时, 如果不存在连续一个大数据块, 则会导入失败
导出80M以上的大表时, 记得compress= N, 则不会引起这种错误
(5) imp和exp使用的字符集不同
如果字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息
导入完成后再改回来
(6) imp和exp版本不能往上兼容
imp可以成功导入低版本exp生成的文件, 不能导入高版本exp生成的文件
根据情况我们可以用
$ imp username/password@connect_string
说明: connect_string 是在/ORACLE_HOME/network/admin/tnsnamesora
定义的本地或者远端数据库的名称
注意事项:
UNIX: /etc/hosts 要定义本地或者远端数据库服务器的主机名
win98: windows\hosts 和IP地址的对应关系
win2000: winnt\system32\drivers\etc\hosts


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13365178.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-22
下一篇 2023-07-22

发表评论

登录后才能评论

评论列表(0条)

保存