之前在http://blog.csdn.net/bisal/article/details/19067515写过一篇关于expdp和impdp的实践的帖子,今天碰到个问题,有些内容没有介绍全,这里再补充下。
知识点1:需要登录到数据库,操作create (or replace) directory test_dump as '/opt/test',这里不能用test_dump='/opt/test',且/opt/test就够了,不用必须是/opt/test。
知识点2:导入时不用必须和导出的用户名一致。
知识点3:如果导入过程中报的是“Unable to open the log file.”、找不到test_dump等之类的错误,检查方法:
1、首先检查test_dump是否设置正确,可以检索dba_directories表;
2、其次要看test_dump目录是否有读写权限;
3、然后也可以看导入用户是否有权限访问到dba_directories,
今天的问题就是导入使用的用户是普通用户,无法访问dba_directories,首先报的是“Unable to open the log file.”、找不到test_dump等之类的错误,开始以为test_dump建立有问题,但dba_directories有值,且路径是有读写权限,但导入的账户没有dba_directories的权限,想必导入时自然无法读到test_dump,此时可以使用以下两条语句将所需权限赋给这个普通用户:
grant read,write on directory test_dump to user;
grant imp_full_database to user;
知识点4:导入过程中可能会出现一些GRANT INSERT ...权限赋予账户错误的问题,很可能是导入的库中没有对应的角色ROLE,如果应用不用这些,则可以忽略。
知识点5:如果导入的库中包含待导入的数据表结构,则impdp会失败,猜测expdp的dump中包含DDL语句,因此不允许导入库中包含表结构,需要提前清空导入用户空间的相关表结构。