oracle expdp 导出库

先普及一下使用expdp备份oracle数据库的过程吧。

将服务器A(CentOS)上的库导出:(服务端sqlplus里可以执行的一般都可以在客户端plsql里远程执行。sqlplus可以远程操作吗?没用过。)

这里演示sqlplus里执行的:

cmd输入:

sqlplus /nolog;

connect as sysdba;

接下来输入sys账户及密码登陆;#这里以sysdba登陆,以便创建导出目录后给用户drag赋予读写权限,所以不以drag登陆。另外,我试了sqlplus /as sysdba;登陆失败,以及sqlplus sys/sys或sqlplus "sys/sys"都失败,不知为何。

SQL>create directory dump_dir as '/opt/dump';
SQL>grant READ ,WRITE ON DIRECTORY dump_dir TO drag;
SQL>select * from dba_directories;#查看数据库所有的目录。

退出到系统:
C:>expdp drag/dragtest   schemas=drag dumpfile=drag.dmp DIRECTORY=dump_dir 导出drag用户下的库。

C:>EXPDP drag/dragtest  directory=/var/ TABLES=t_hostinfhis_n1 dumpfile=drag.dmp parallel=4 logfile=exp.log #导出一些表
C:>expdp drag/dragtest   DIRECTORY=dump_dir DUMPFILE=drag.dmp FULL=y #导出整个库

C:>expdp drag/dragtest   schemas=drag dumpfile=drag.dmp DIRECTORY=dump_dir content=metadata_only 导出drag用户下的库,只导出元数据,不导出表中数据

content=data_only则相反

错误和解决:
1、文件无法正确写入:dump_dir物理上不存在,手动创建,另外注意赋予权限给drag;只有在系统身份下才能赋予权限给drag,如果是drag创建的则不需要赋予。

有时候执行了grant 赋予了权限也不行,索性系统里面:chmod 777 /opt/dump ,然后就可以了。

2、最纠结的是,一开始我查看以前的操作记录是:

expdp drag/dragtest@testLinux schemas=drag dumpfile=drag130.dmp DIRECTORY=dump_dir  parallel=4 logfile=expdrag.log;导出drag用户下的库。

注意账户信息后面是要加上实例名的,可今天不断报错。后来把@及以后的去掉就不报错了。。

难道是因为我本地导出的,难道之前是远程用plsql导出的才加服务名?不记得了。。也许是这么个道理。。

3.命令结束不要分号。

原文地址:https://www.cnblogs.com/peterpanzsy/p/2989888.html