exp 导出、imp 导入

支持远程导出,下面列出了常用的语法,在 windows 的 cmd/powershell 命令行或者 Linux 的 shell 下执行:

exp导出基本语法

# 导出基本语法
exp user_name/password owner=导出用户 file=导出地址
# 远程语法参考
exp user_name/password@ip:port/db ...
# 全部导出
exp user_name/password ... full=y
# 导出指定用户
exp user_name/password ... owner=(user1, user2)
# 导出指定数据表
exp user_name/password ... tables=(table1,table2)
# 是否压缩
exp user_name/password ... compress=y
# 导出权限 导出索引
exp user_name/password ... grants=y indexes=y
# 日志文件
exp user_name/password ... log=日志文件
# 导出表数据的条件语句
exp user_name/password ... query=\" where filed1like '00%'\"

导出数据库:

exp demo/123456@orcl file=d:/bak_1023.dmp
exp yhtj/123456@127.0.0.1:1521/orcl file=d:\tijian.dmp

dmp文件数据导出:

1将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2将数据库中system用户与sys用户的表导出
3将数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat) 
4将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"

上面是常用的导出,对于压缩,既用winzip把dmp文件可以很好的压缩。
也可以在上面命令后面 加上 compress=y 来实现。

imp导入基本语法

# 导入基本语法
imp user_name/password fromuser=导出的用户 touser=导入的用户 file=文件路径
# 远程语法参考
imp user_name/password@ip:port/db ...
# 导入整个文件
imp user_name/password ... full=y
# 按用户导入,可以是 (user1, user2) 的列表
imp user_name/password ... fromuser=user1 touser=user1
# 按表导入
imp user_name/password ... tables=(table1, table2)
# 忽略错误
imp user_name/password ... ignore=y
# 导入权限、导入索引
imp user_name/password ... grants=y indexes=y

授权

create user lis_xh identified by 123456;
grant create session to lis_xh;     --授予用户创建session的权限,即登陆权限
grant CREATE VIEW to lis_xh;--创建视图
--授予dba权限   grant connect,resource,dba to his_nh;
--视图
grant select on lis_xh_clc to lis_xh;   --授予
grant select on lis_xh_inp to lis_xh;   --授予
grant select on lis_xh_user to lis_xh; --授予
grant select on lis_xh_dept to lis_xh;--授予
grant select on lis_xh_labitem to lis_xh;--授予
grant select on lis_peis_tminfo to lis_xh;  --授予
--存储过程
grant execute on lis_xh_return_confirm to lis_xh;
grant execute on peis_transmitresult to lis_xh;
grant execute on peis_saveresult to lis_xh;
grant execute on peis_reverse_audit to lis_xh;
--表
grant select on lis_dangerousnum to lis_xh;
grant insert on lis_dangerousnum to lis_xh;
grant update on lis_dangerousnum to lis_xh;

dmp文件数据导入

1 将D:\daochu.dmp 中的数据导入 TEST数据库中。

imp system/manager@TEST file=d:\daochu.dmp
   imp aichannel/aichannel@HUST full=y file=file= d:\data\newsmgnt.dmp ignore=y

上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
在后面加上 ignore=y 就可以了。
2 将d:\daochu.dmp中的表table1 导入

imp system/manager@TEST file=d:\daochu.dmp tables=(table1)

基本上上面的导入导出够用了。不少情况要先是将表彻底删除,然后导入。

exp yhtj/123456@orcl file=d:\tijian.dmp full=y

imp导入数据库:

imp demo/123456@orcl file=d:/bak_1023.dmp full=y ignore=y

expdp 数据泵导出、 impdp数据泵导入

服务端工具,理论上只能在服务端 expdp 导出,但是也可以通过创建DBLink等方法远程 expdp 导出。

其性能大大高于 exp/imp,支持并发多线程。

下面列出了常用的语法,在 windows 的 cmd/powershell 命令行或者 Linux 的 shell 下执行:

expdp导出基本语法

# 导出 备份
# 创建逻辑目录,以 system 用户登录数据库,创建已有物理目录的逻辑映射
create directory dpdata1 as 'd:\test\dump';
# 查询验证
select * from dba_directories;
# 赋予用户 user1 操作权限
grant read, write on directory dpdata1 to user1;
# 导出数据 切回命令行
# 基本语法 按用户导出
expdp user1/password@db schemas=user1 dumpfile=expdp.dmp directory=dpdata1;
# 导整个数据库
expdp user1/password@db ... full=y;
# 并行导出
expdp user1/password@db ... parallel=40 job_name=user1job1
# 按表名导出
expdp user1/password@db ... tables=table1,table2
# 根据查询条件导出
expdp user1/password@db ... tables=table1 query='where deptno=20'
# 压缩
expdp user1/password@db ... compression=all

数据泵的导出

相比于导入,导出的工作就很简单了。
同导入操作一样,我们也需要创建一个目录,并通过以下语句创建数据泵:

create directory dump_dir as 'e:\dump';

之后我们直接执行导出命令就可以了,命令如下:

expdp cospace/123456@orclWG directory=dump_dir file=COSPACE.dmp schemas=cospace logfile=expdp.log

schemas指的是要导出的用户名,dumpfile指的是要导出的DMP文件名,directory指定刚刚自定义的dump_dir,logfile指定日志文件名,执行语句后会在dump_dir路径下。

到这里,数据泵的导出也结束了。

impdp数据泵导入导出基本语法

# 导入 还原
# 基本语法 导到指定用户下
impdp user1/password directory=dpdata1 dumpfile=expdp.dmp schemas=user1
# 改变表的owner schemas>>remap_schema
impdp user2/password ... tables=user1.table1 remap_schema=user1:user2
# 导入数据库
impdb user1/password ... full=y
# 追加数据

impdp数据泵的导入

在进行操作之前,一定要问清楚表空间名字,如果表空间命名不统一,可能会导致导入失败的问题。

所以第一步就是建立表空间,语句如下:

create tablespace VIEWHIGH
datafile 'D:/app/admin/oradata/orcl/VIEWHIGH'
size 1M autoextend on next 50M maxsize unlimited;

这里的datafile路径一般选择你本地oracle的数据文件路径。

之后,我们可以建立一个新的用户来导入数据用,这个用户名也可以提前问好,最好用户名一致,否则需要做一次用户名的映射,这个我们下文再说。

建立用户语句如下:

create user DRGS_INIT
 identified by "vhiadsh"
 default tablespace VIEWHIGH
 profile DEFAULT
 ACCOUNT UNLOCK;

建立用户后需要给用户授权,语句如下:

--给新建用户授DBA权限

grant dba to DRGS_INIT;
grant unlimited tablespace to DRGS_INIT;

接下来我们需要在本地的磁盘中创建一个文件夹,作为数据泵文件夹来使用,同时把DMP文件放入到此文件夹下。

之后使用如下语句创建数据泵:

create directory data_dir as '/usr/oracle' ;-- 注意:windows 路径为反斜杠:c:\oracle

这里的data_dir是我们自定义的名字,导入的时候与它一致即可。

之后就是导入操作了,注意,导入的命令不属于sql哦,打开本地的CMD命令行,输入如下语句即可:

impdp drgs_init/vhiadsh@192.168.1.188/orcl directory=data_dir dumpfile=YD.DMP REMAP_SCHEMA=viewhigh:drgs_init
 EXCLUDE=USER logfile=expdp.log

接下来对这条语句做一下解释。

前边就是正常的用户名/密码和oracle数据库地址,directory指定的就是我们自定义的data_dir,dumpfile就是DMP文件名,REMAP_SCHEMA=原用户:现用户,也就是我们前文说到的用户映射,如果用户名一致,则不需要映射,EXCLUDE=USER指的是排除掉用户,因为我们已经自己创建好了用户,所以就把用户排除掉,logfile指定的是日志文件名,执行语句后日志文件会在我们的data_dir路径下。

最后修改:2021 年 12 月 17 日
如果觉得我的文章对你有用,请随意赞赏