Oracle数据库数据的导入导出imp/exp就相当与oracle数据还原与备份
假定: 将数据库orcl导出,用户名:test,密码:test
一. 导出文件:通过exp导出
1. 用户模式: 导出用户所有对象以及对象中的数据
将数据库中test用户与test用户的表导出到d:\daochu.dmp中
exp test/test@orcl file=d:\daochu.dmp owner=(test,test1)
2. 表模式: 导出用户所有表或者指定的表
将数据库中的表table1 、table2导出到d:\daochu.dmp中
exp test/test@orcl file=d:\daochu.dmp tables=(table1,table2)
3. 整个数据库: 导出数据库中所有对象
将数据库中所有对象完全导出到D:\daochu.dmp中
exp test/test@orcl file=d:\daochu.dmp full=y
注:若需要执行完全导出,必须具有特殊的权限
4.实例:
a. 根据提示操作:
b. 输入命令,以表模式导出为例:
c. 当不指定文件存放路径时,导出的文件存放在系统默认路径下:
使用:pwd 命令,显示:文件存放的默认路径
d. 将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
如果想生成压缩文件,在上面命令后面 加上 compress=y 即可。
e. 用户模式下,导出文件:
二. 导入文件:采用imp导入
导入数据也是分为三种模式:
1. 用户模式: 导入用户所有对象以及对象中的数据
imp test/test@orcl file=d:\daochu.dmp fromuser=test1 touser=test
fromuser:取出当前dmp文件的用户
touser:把现在dmp文件中的数据导入到目标库的指定用户
2. 表模式: 导入用户所有表或者指定的表
imp test/test@orcl file=d:\daochu.dmp tables=(table1,table2)
3. 整个数据库: 导入数据库中所有对象
imp test/test@orcl file=d:/daochu.dmp
注:若需要执行完全导入,必须具有特殊的权限
4. 实例:
a.指定路径的文件导入,如图:为表模式导入
b. 当exp导出时,未指定文件路径,默认存放路径下的文件导入(表模式导入)
c. 用户模式下,导入文件:
fromuser: 是指生成的dmp文件数据的用户名
touser:指要导入dmp文件的用户名
总结:imp数据的步骤:
(1) create table (2) insert data (3) create index (4) create triggers,constraints
三. 在导入导出中遇到的问题
(1) 数据库对象已经存在
一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等;
数据库对象已经存在, 按缺省的imp参数, 则会导入失败。如果用了参数 ignore=y, 会把exp文件内的数据内容导入。
如果表有唯一关键字的约束条件, 不符合条件将不被导入,如果表没有唯一关键字的约束条件, 将引起记录重复。
(2) 导出多张表数据时问题
正常情况下,导出多张表的数据采用:exp test/test@orcl file=d:\daochu.dmp tables=(table1,table2),在xshell中执行时
会报错:
下面为一些错误的情况:
正确情况为:
(3) 数据库对象有主外键约束
不符合主外键约束时, 数据会导入失败
解决办法: 先导入主表, 再导入依存表
disable目标导入对象的主外键约束, 导入数据后, 再enable它们
(4) 权限不够
如果要把A用户的数据导入B用户下, A用户需要有imp_full_database权限
(5) 导入大表( 大于80M ) 时, 存储分配失败
默认的EXP时, compress = Y, 也就是把所有的数据压缩在一个数据块上.
导入时, 如果不存在连续一个大数据块, 则会导入失败
导出80M以上的大表时, 记得compress= N, 则不会引起这种错误.
(6) imp和exp使用的字符集不同
如果字符集不同, 导入会失败, 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息.
导入完成后再改回来.