前言:最近给大家分享了两期关于Oracle数据库删除恢复的内容,有读者私信小知说:在现勘中如果遇到Oracle数据库怎么办?以前遇到Mysql的情况比较多,真遇到Oracle数据库,可能会现场一脸懵逼。



说到现勘碰到数据库,大家可谓是谈Oracle色变,无从下手,总觉得Oracle太太太难了,连碰的欲望都没有。其实参照我们对其他数据库的处理方法:现场备份(导出)数据库的数据,然后将数据库在本地重现即可。
接下来就给大家介绍Oracle数据的导出方法。

Oracle数据库数据导出导入总结起来,可以有3种方法:
(1)传统导出/导入exp/imp
(2)数据泵方式expdp/impdp
(3)第三方工具,如SQL Developer
传统导出/导入exp/imp:
优点:代码书写简单易懂,从本地即可直接导入,不用在服务器中操作;
缺点:导入/导出速度慢,几个G的数据一般要4-5小时;
数据泵方式expdp/impdp:
优点:导入/导出速度快,几个G的数据一般只要1-2小时;
缺点:代码相对不易理解,要想实现导入导出的操作,必须在服务器上创建逻辑目录;
第三方工具,如SQL Developer
优点:封装了导入导出命令;
缺点:长时间应用会对其产生依赖,降低对代码执行原理的理解。
总结来说:
1、如果小批量导出/导入oracle数据,用第三方工具操作
2、如果数据量不大,导出/导入时间不紧急,使用EXP/IMP方式,
3、如果时间紧,数据库库数据量大的整库导出/导入,使用expdp/impdp方式。
传统方式和第三方工具方式比较简单,这边就不介绍了,接下来我们一起来详细了解下数据泵方式

Expdp/impdp语法:
最普遍语法:
Expdp(impdp) username/password@SERVICENAME dumpfile=file.dmp directory=dmp_dir;
较复杂语法:
expdp(impdp) username/password@SERVICENAME:1521 schemas=username dumpfile=file.dmp logfile=file.log directory=dmp_dir FULL=y;
注解:红字部分可自定义
1)expdp(impdp):必写,expdp代表导出,impdp代表导入;
2) username/password:必写,数据库用户名和密码;
3) servicename: 必写,数据库名;sql查询语句(show parameter db_name);
4) Dumpfile:必写,dmp文件名,’=‘号后的dmp文件名可自定义;
5)Directory:必写,逻辑目录名,dmp文件所在目录的逻辑目录名;
-------------------其他选填参数------------------
6) 1521:如库为默认,端口可不写,如非默认端口需修改为其端口号;
7) Logfile:日志文件名,不写则将日志存于默认日志文件下;
8) schemas:用户名,如需导出/导入某一个或某几个用户数据可填,默认导出/导入所有用户数据;格式:schema=<用户名1>,<用户名2>;
9) tables: 按表名导入/导出,格式如下:tables=<用户名.表名1>,<用户名.表名2>;
10) tablespaces: 按表空间导入/导出,格式:tablespaces=<表空间名1>,<表空间名2>;
11) FULL=y:如果需要整库导出/导入,则加上这个参数;
12) remap_schema:用户名映射,选填,导入时如需将原用户名修改成新的用户名则填上,格式为:remap_schema=<原用户名>:<新用户名>;
接下来,我们来看现场经常遇到的几种常用导出语法:
(1)按用户名导出:
expdp 用户名/密码@orcl schemas=<用户名> dumpfile=expdp.dmp directory=testdata;
(2)按表名导出:
expdp 用户名/密码@orcl tables=<用户名.表名1>,<用户名.表名2> dumpfile=expdp.dmp directory=testdata;
(3)按表空间导出:
expdp 用户名/密码@orcl dumpfile=expdp.dmp directory=testdata tablespaces=<表空间名1>,<表空间名2>;
(4)整库导出:
expdp 用户名/密码@orcl dumpfile=expdp.dmp directory=testdata FULL=y;

通过以上介绍,我们对数据泵语法有了一定了解,接下来,我们就数据泵的整库导出/导入过程做个操作:
已知数据库参数如下:
数据库名:test007
数据库用户/密码:ccs/123456
原库存在的用户:sys,system等系统用户,ccs等生产用户
原库存在的表空间:system,users等系统表空间,ccs_data等生产表空间
原库存在的表:ccs.test,ccs.test1等
一、登录原库服务器,以管理员权限登陆
sqlplus as sysdba
二、创建虚拟目录,赋予“ccs”用户读写权限
create directory dmp_dir as 'C:\APP\FU\ORADATA\DMP';
grant read, write on directory dmp_dir to ccs;

三、赋予“ccs”用户导出全库角色权限
grant exp_full_database to ccs;

四、执行expdp导出语句
expdp ccs/123456@test007 dumpfile=expdp.dmp directory=dir_db full=y


注:windows环境下EXPDP/IMPDP命令前要加 $ 符号
$expdp ccs/123456@test007 dumpfile=expdp.dmp directory=dmp_dir full=y

以上就是今天给大家介绍如何将现场Oracle数据库的数据进行导出,至于导出之后的数据如何在其他环境下进行重现,我们下期再见。

喜欢小知的话请不要忘了关注,点赞,转发!





