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.命令结束不要分号。