基础知识:
导出导入是Oracle提供的实用工具,可以使我们完成不同oracle数据库之间转移数据对象。
使用导出工具具有四中模式:
表模式:导出某个用户下的指定表,授权用户可以导出其他用户下的表。
用户模式:导出某个指定的用户下所有的对象,授权用户可以导出其他用户下的所有对象。
数据库模式:导出除了sys用户以外的、数据库里所有的对象,只有已授权的用户才能在该模式下执行导出
可传输表空间模式:如果要导出某个指定表空间中的所有对象时,可以使用该模式。通过使用该模式,可以将一组表空间从一个数据库快速的转移到另一个数据库里。其速度比普通导出导入快很多,原因在于传输表空间时,只需要复制数据文件,然后将表空间的结构信息导入到目标数据库即可。
===============================================
使用工具基本命令:
]$ exp help=y
exp命令的帮助文档。
这里会有很多的参数,其中用户是必填的。
如:
表模式:
$ exp scott/tiger file=/oracle/my_bak.dmp tables=(employees,departments) log=/oracle/my_bak_exp.log
以上是一个表模式的导出命令。
我们也可以导出其他用户模式下的表,如将上面tables后面内容改为=(lyf.test)。前提条件是,导出使用的用户必须有该表的查看权限。
用户模式:
$ exp scott/tiger file=/oracle/my_bak.dmp owner=scott
以上命令会将scott用户模式下所有对象导出。
只要用户具有相应权限也可以导出其他用户的所有对象,如上例也可以改成:
$ exp system/redhat file=/oracle/my_bak.dmp owner=scott
数据库模式:
使用该模式,用户一定要有对应权限--exp_full_database。可以用下面这个命令来授予:
SQL>grant exp_full_database to scott;
然后就可以用下面的命令进行全库导出了
$ exp scott/tiger file=/oracle/full_bak.dmp full=y log=/oracle/all_log.log
================================================
参数文件:
导出也可以使用参数文件,参数文件通常用.par结尾,如在linux下编辑
$ cat 〉 dept_exp.dmp
userid=scott/tiger
file=/oracle/dept_exp.dmp
tables=(dept)
log=...
执行只需用下面这个命令:
$ exp parfile=dept_exp.par
================================================
导入:
导出的文件只能由导入工具读取
使用方式与exp类似:
可以使用imp help=y来查看所有关键字。
我们之前已经试过简单的表导入,我们现在来看一下用户导入。
$ imp lyf/oracle file=/oracle/my_bak.dmp fromuser=scott touser=lyf log=...
这个命令将scott用户模式下的所有对象导入到lyf用户下。
导入执行顺序为:创建表——>导入表数据——>创建相关索引——>导入触发器——>对导入的表启用完整性约束——>建立位图、函数及其他索引。
从这样的顺序看,如果在我们的用户模式下如果某个表已经存在,如果再次导入时,就会出错,以后的导入工作就停止了,这个时候可以使用ignore=y来忽略表已存在错误。