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路径下。