Oracle导入导出

导出空表:

oracle11g有个新特性,当表无数据时,不分配segment,以节省空间。所以用exp导出时无法导出空表。
解决办法:
1.插入一行在rollback就有segment了。
2.alter system set deferred_segment_creation=false scope=both;
   默认是TRUE,空表不分配segment。
   需要注意的是:该值设置后只能对后面新增的表产生作用。
3.找出空表,手动操作。

数据访问方法:

直接路径--数据格式不转换;外部表--允许Oracle在位于数据库外的操作系统文件中读写数据。
oracle总是试着用直接路径方式,但在某些条件下不能使用此方法。
直接路径访问不支持分区内的并行性,因此通常用外部表。

使用外部表的情况:
1.集群表;2.表中的活动触发器;3.带有全局索引的表的一个单独的分区;4.引用完整性约束;5.lob列的域索引;6.使用插入方式的带细粒度访问控制的表;7.带BFILE或晦涩类型的列的表;8.另一方面,如果表有LONG数据,必须使用直接路径访问方法。

导入大表( 大于80M ) 时, 存储分配失败:
默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上.
导入时, 假如不存在连续一个大数据块, 则会导入失败.
导出80M以上的大表时, 记得compress= N, 则不会引起这种错误.

帮助信息:
   C:\empdp help=y

在外部表和直接访问方式中,数据文件格式都是相同的。因此,可以用一种方法导出数据,而用另一种方法导入它。

表的表空间不同时导入会失败,此时可以先在目标数据库创建表结构,再使用ignore=y忽略表创建错误,这样即可导入数据。
主要是因为表在创建的时候会检测表空间,导致表空间不存在的错误。

语句
imp ignore=y  --忽略创建错误
导出表:
   exp scott/tiger@mycon tables=(dept,emp) file=tab1.dmp
exp system/mc309@werm tables=(NH用户信息) file=E:\tab1.dmp
导出用户:
   exp system/manager@mycon owner=scott file=usr1.dmp
导出数据库:
   1.完全导出
   exp system/manager@mycon full=y inctype=complete    file=full1.dmp
exp system/mc309@werm full=y inctype=complete    file=F:\FullDB2014-12-04.dmp  log=F:\FullDB2014-12-04.log
   2.增量导出
   exp system/manager@mycon full=y inctype=incremental file=inc1.dmp
   3.累积导出
   exp system/manager@mycon full=y inctype=cumulative file=cum1.dmp

imp example:
导入表:
   imp system/manager@mycon ignore=y file=c:\tab1.dmp tables=(dept,emp) touser=scott
导入用户:
   imp system/manager@mycon file=usr1.dmp fromuser=scott touser=scott
导入数据库:
   1.全库导入
   imp system/manager@mycon file=full1.dmp full=y
imp system/mc404@werm full=y file=F:\FullDB2010-07-09.dmp log=F:\implog2010-06-21-10 buffer=5120000
   2.增量导入
   1)导入数据库最新信息
   imp system/manager@mycon inctype=system full=y file=inc7.dmp
   2)导入最近完全导出文件
   imp system/manager@mycon inctype=restore full=y file=full1.dmp
   3)导入所有累积导出文件
   imp system/manager@mycon inctype=restore full=y file=cum1.dmp
   4)导入最近一次增量导出的文件
   imp system/manager@mycon inctype=restore full=y file=inc1.dmp

文章来源:http://blog.csdn.net/dwsjs/archive/2005/11/17/531766.aspx


以下来自《三思笔记之一步一步学Oracle》-李丙洋

1.全库直接路径导出:
说明:关键字-用户/密码@数据库名_IP(即TNSNAMES)-全库导出-文件名-文件名-直接路径导出-导出表名(非全库时使用)缓存池设定为5M-recordlength参数设置为DB_BLOCK_SIZE的整数倍54K
EXP system/manager@mycon_192.168.100.66 FULL=Y FILE=FULLDB_091105.DMP LOG=FULLDB_091105_EXP.LOG DIRECT=Y TABLES=tables BUFFER=5120000 RECORDLENGTH=65535
IMP system/mc404@werm FULL=Y FILE=D:\Oracle_Bk\full20120601.dmp LOG=D:\Oracle_Bk\imp0601.log BUFFER=5120000 RECORDLENGTH=65535
2.全库导入:
     1)目标端数据库用户的默认表空间与要导入的表的原存储表空间名完全相同
IMP system/manager@mycon_192.168.100.68 FULL=Y BUFFER=5120000 FILE=FULLDB_091105.DMP LOG=FULLDB_091105_EXP.LOG
     2)导入指定表到其他用户
说明:假设指定表为SCOTT和TBLS。
IMP JSS/JSS@mycon_192.168.100.68 FROMUSER=SCOTT TOUSER=JSS BUFFER=5120000 FILE=SCOTT_TBLS_091105.DMP LOG=SCOTT_TBLS_091105_EXP.LOG
     注:若目标端数据库用户的默认表空间与要导入的表的原存储表空间名不同,则先执行下列语句(显示的授予用户无限操作指定表空间的权限,然后收回Unlimited Tablespace权限):
CONN system/manager AS SYSDBA
ALTER USER JSS QUOTA UNLIMITED ON tablesname;
IMP...
REVOKE UNLIMITED TABLESPACE FROM JSS;

数据泵方式导出导入

--首先要创建导出目录,并授予用户读写权限(system用户不必授权)
create directory dpump_dir as 'F:\ORACLE资料\数据备份';
--通过导出目录值,设置新目录为默认目录
export data_pump_dir=dpump_dir
grant read,write on directory user_dir to scott;

--默认job_name:"SYSTEM"."SYS_EXPORT_FULL_01",dpump_dir='F:\ORACLE资料\数据备份'
expdp system/mc404@werm full=y dumpfile=dpump_dir:dpFull2010-07-16.dmp logfile=dpump_dir:dpFull2010-07-16.log

expdp system/mc404@werm full=y dumpfile=dpump_dir:dpFull2010-05-28.dmp  nologfile=y
--导出语法
expdp system/mc404@werm
[full=y | schemas=scott | tablespaces=scott | tables=tab_name | version=vsn_name]
dumpfile=dpump_dir:expdp_01.dmp [expdp_%u.dmp | expdp_01.dmp,expdp_02.dmp filesize=100M]
[logfile=dpump_dir:expdp.log | nologfile=y]
[content=all | data_only | metadata_only]
[exclude | include=object_type[:name_clause] ]
/*   content=data_only时不能用exclude/include;eg,exclude=table:"like 'emp%'"  */
[query schemas.tab_name:"where clause"]
[encryption_password=123456]        --加密
[job_name=jobname parallel=2]        --工线程数量必须与转储文件数量一致

--进入交互模式
expdp system/mc404@werm attach=jobname [按Ctrl+C组合键]

--终止导出作业,进入交互以后
export> kill_job
export> add_file=data_dump_dir:expdat02.dmp


--导入时要创建与转储文件和日志文件同名的目录,否则将发生错误
impdp system/mc404@werm full=y dumpfile=dpump_dir:FullDBpump2010-04-28.dmp nologfile=y
--导入语法
impdp system/mc404@werm
[full=y | schemas=scott | tablespaces=scott | tables=tab_name | version=vsn_name]
dumpfile=dpump_dir:expdp_01.dmp [expdp_%u.dmp | expdp_01.dmp,expdp_02.dmp filesize=100M]
[logfile=dpump_dir:expdp.log | nologfile=y]
[content=all | data_only | metadata_only]
[exclude | include=object_type[:name_clause] ]
/*   content=data_only时不能用exclude/include;eg,exclude=table:"like 'emp%'"  */
[query schemas.tab_name:"where clause"]
[encryption_password=123456]        --加密
[job_name=jobname parallel=2]        --工线程数量必须与转储文件数量一致
[remap_datafiles=...]            --重新定义数据文件的名称和目录
[remap_schema=...]            --将传送到模式的对象映射到另一个模式中
[remap_tablespace=...]        --将对象映射到表空间,而那些表空间不是它们最初指定的
[sqlfile=...]            --提取所有要导入到输出文件的SQL DDL

posted @ 2020-09-06 11:43  publiter  阅读(169)  评论(0编辑  收藏  举报