1.oracle导入导出命令:imp/exp(10g引入impdp/expdp)
2.exp导出工具将数据库中数据备份压缩成一个二进制文件,可以在不同操作系统间迁移
有三种模式:
(1).用户模式:导出用户所有对象以及对象中的数据
(2).表模式:导出用户所有表或者指定的表
(3).表空间模式:导出数据库中指定表空间[一般不用]
(4).整个数据库模式:导出数据库中所有对象
3.exp/imp命令查看帮助信息:exp -help/imp -help
4.交互[直接在命令行输入命令,按提示操作] 和 非交互[下面主要叙述在非交互式下]
5.exp命令参数说明:[exp -help]
关键字 说明(默认)
-------- ------------------
USERID 用户名/口令
FULL 导出整个文件 (N)
BUFFER 数据缓冲区的大小
OWNER 所有者用户名列表
FILE 输出文件 (EXPDAT.DMP)
TABLES 表名列表
COMPRESS 导入一个范围 (Y)
RECORDLENGTH IO 记录的长度
GRANTS 导出权限 (Y)
INCTYPE 增量导出类型
INDEXES 导出索引 (Y)
RECORD 跟踪增量导出 (Y)
ROWS 导出数据行 (Y)
PARFILE 参数文件名
CONSTRAINTS 导出限制 (Y)
CONSISTENT 交叉表一致性
LOG 屏幕输出的日志文件
STATISTICS 分析对象 (ESTIMATE)
DIRECT 直接路径 (N)
TRIGGERS 导出触发器 (Y)
FEEDBACK 显示每 x 行 (0) 的进度
FILESIZE 各转储文件的最大尺寸
QUERY 选定导出表子集的子句
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TABLESPACES 将传输的表空间列表
6.exp导出实例操作:
(1).导出scott用户的emp/dept表,存放路径:/u01/app/oracle/dump/exp1.dmp
$exp scott/tiger tables=emp,deptfile=/u01/app/oracle/dump/exp1.dmp
(2).导出scott用户的所有表[导出某个用户的表,需要较大的用户权限,使用system],存放路径:/u01/app/oracle/dump/exp_scott.dmp
$exp system/oracle owner=scottfile=/u01/app/oracle/dump/exp_scott.dmp
(3).使用写好的参数文件,执行导出:参数文件:/u01/app/oracle/dump/exp_scott_par.txt
vim /u01/app/oracle/dump/exp_scott_par.txt
内容如下:
userid=scott/tiger # 用户名/密码
file=/u01/app/oracle/dump/exp_scott1.dmp# 备份存放地点
tables=emp,dept # 备份哪个表
direct=y # 直接导出模式
再执行如下命令:
$exp parfile=/u01/app/oracle/dump/exp_scott_par.txt
(4).备份整个数据库
$exp system/oracle full=yfile=/u02/full_exp.dmp
7.imp导入实例操作:
(1).导入scott用户的emp、dept表[前提是:scott用户下,现在没有这两张表]
$impscott/tiger tables=(emp,dept)file=/u01/exp/exp1.dmp
(2).当用户被删除后,恢复用户及内容:[需先建立用户,再恢复]
sys>createuserscott identified by tiger
default tablespace users
quota unlimited on users
temporary tablespace temp;
$impsystem/oracle fromuser=scottfile=/u01/app/oracle/dump/exp_scott.dmp
(3).将一个用户下的对象还原到另一个用户[创建用户,授权用户(resource、connect)]
sys>createusertest identified by test
default tablespace example
quota unlimited on example
temporary tablespace temp;
sys> grantresource,connect to test;
sys>impsystem/oracle fromuser=scott touser=testfile=/u02/exp/exp_scott.dmp
8.导入工具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相关信息.
导入完成后再改回来.
Author: Michael