当前位置: 代码迷 >> 综合 >> expdp/impdp实现不同用户之间的导出导入
  详细解决方案

expdp/impdp实现不同用户之间的导出导入

热度:89   发布时间:2024-02-28 04:43:13.0

问题:本人在做一个项目,测试环境和生产环境不同用户指向同一表空间,传统的exp/imp导出导入,会出现导入数据后一用户没有表,网上找了很多方法,总结如下:

1、新建逻辑目录

最好以system等管理员创建逻辑目录,Oracle不会自动创建实际的物理目录“E:\dir”(务必手动创建此目录),仅仅是进行定义逻辑路径dump_dir;

create directory mydata as '逻辑目录路径'; 
例如: 
create directory mydata as 'E:/dir';

2、查看逻辑目录是否创建成功

select * from dba_directories

在这里插入图片描述

3、用sys管理员赋予指定用户在该目录的操作权限

grant read,write on directory data_dir to user;

4、创建表空间和用户,为用户指定表空间

①查询表空间

 select name from v$tablespace;

②创建表空间

create tablespace date	--表空间名字
datafile 'E:\app\Administrator\oradata\fpmv\data.dbf' --存储路径
size 200M autoextend on next 50M maxsize unlimited;	--表空间大小设置200M,每次50M自动扩展,最大不限制

③创建用户

create user test--创建用户名
identified by test--设置密码
default tablespace date --指定默认表空间
temporary tablespace TEMP; --临时表空间默认 temp

④用户授权

grant connect,dba,resource to test with admin option; 

⑤修改用户密码(忘记用户密码时,可登录sys进行密码修改)

alter user portal identified by portal;

4、用expdp导出数据

用法及解释:

userid=test/test            --导出的用户,本地用户
directory=dmpfile          --导出的逻辑目录,一定要在oracle中创建完成的,并且给用户授权读写权限
dumpfile=xx.dmp      --导出的数据文件的名称,如果想在指定的位置的话可以写成dumpfile=/home/oracle/userxx.dmp
logfile=xx.log          --日志文件,如果不写这个参数的话默认名称就是export.log,可以在本地的文件夹中找到
schemas=userxx       --使用dblink导出的用户不是本地的用户,需要加上schema来确定导出的用户,类似于exp中的owner,但还有一定的区别
EXCLUDE=TABLE:"IN('T1','T2','T3')"     --exclude 可以指定不导出的东西,table,index等,后面加上不想导出的表名
network_link=db_local          --这个参数是使用的dblink来远程导出,需要指定dblink的名称

1、如果想导入的用户已经存在:

①. 导出用户

expdp test/test@orcl directory=mydata dumpfile=test.dmp

②. 导入用户

 impdp test2020 /test2020@orcl directory=mydata dumpfile=test.dmp REMAP_SCHEMA=test:test2020 EXCLUDE=USER

2、如果想导入的用户不存在:

①. 导出用户

 expdp test/test@orcl directory=mydata dumpfile=test.dmp

②. 导入用户

 impdp system/system@orcl directory=mydata dumpfile=test.dmp REMAP_SCHEMA=test:test2020

注意:
test2020会自动建立,其权限和使用的表空间与test相同,但此时用test2020无法登录,必须修改test2020的密码