用Oracle导出导入数据,以前用exp和imp总是报字符集的错误。后来查了下,Oracle 10g新增了expdp(导出)和impdp(导入)两个工具,而它们会自动根据数据库的配置来设置导出文件的字符集,就是可以无视客户端的字符集设置了。但是有个缺点,导出文件只能放在服务器上。这个问题不大,只要设好目录及相关权限就可以了。
以下例子,假设把USER_A的数据库,复制成USER_B的数据库。
首先,看一下已定义好的目录。如果有需要就新增一个。新增前要授权用户拥有“create any directory”的权限。
--查看已定义的文件夹
select * from dba_directories;
--查看用户“USER_A”的权限
select * from dba_sys_privs where grantee='USER_A';
--授创建文件夹的权限
grant create any directory to USER_A;
--创建目录
create or replace directory NEW_DIR as '/tmp';
进行导入导出之前,要授权相关用于拥有读写文件夹的权限。USER_A要导出数据,那他应该有“写”文件夹的权限;USER_B要导入数据,他要有“读”文件夹的权限。嫌麻烦的话,可以同时赋予文件夹的读写权限。
--授权用户“USER_A”拥有文件夹“NEW_DIR”的读写权限
grant read,write on directory NEW_DIR to USER_A;
--授权用户“USER_A”只有文件夹“NEW_DIR”的写权限
grant write on directory NEW_DIR to USER_A;
--授权用户“USER_B”只有文件夹“NEW_DIR”的读权限
grant read on directory NEW_DIR to USER_B;
导出导入的相关参数,查一下就知道了,这里只是操作该用户的所有对象。其中impdp的参数中,remap_schema是把源用户转换成目标用户(格式是 源用户:目标用户),remap_tablespace是把源表空间转换为目标表空间(格式是 源表空间:目标表空间)。以下命令需要在服务器的命令窗口执行。
--导出备份文件,USER_A的数据库
expdp USER_A/PASSWORD@sid schemas=USER_A directory=NEW_DIR dumpfile=user_a_backup.dmp
--导入备份文件,把USER_A的数据库导入到USER_B的数据库
impdp USER_B/PASSWORD@sid remap_schema=USER_A:USER_B remap_tablespace=USER_A_TS:USER_B_TS directory=NEW_DIR dumpfile=user_a_backup.dmp
参考资料:
exp/imp 与 expdp/impdp 对比 及使用中的一些优化事项
http://blog.csdn.net/tianlesoftware/article/details/6093973
ORACLE expdp/impdp详解(原创)
http://czmmiao.iteye.com/blog/2041703
oracle 查看 用户,用户权限,用户表空间,用户默认表空间
http://it4j.iteye.com/blog/2002433