1,登录的数据库服务器,切换到oracle用户
2,通过expdb命令导出keyrisk用户下的所有对象到指定的路径下
expdp keyrisk/keyrisk directory=DATA_PUMP_DIR dumpfile=keyrisk_20190107_poc.dmp schemas=keyrisk;
创建数据泵:
CREATE DIRECTORY DATA_PUMP_DIR AS '/opt/oracle11/admin/orcl/dpdump/';
赋权限:
GRANT READ,WRITE ON DIRECTORY DATA_PUMP_DIR TO KEYRISK;
删除数据泵:
DROP DIRECTORY DATA_PUMP_DIR;
3,创建用户,并赋权限
CREATE USER KEYRISK IDENTIFIED BY KEYRISK;
GRANT DBA TO KEYRISK;
4,登录数据库服务器将dmp文件导入到新环境的新用户下
impdp KEYRISK/KEYRISK@127.0.0.1:1521/ORCL DIRECTORY=ORACLE_DMP DUMPFILE=KEYRISK_20190105.dmp LOGFILE=KEYRISK_20190105.LOG REMAP_SCHEMA=KEYRISK:KEYRISK REMAP_TABLESPACE=KEYRISK:LOYALTY EXCLUDE=GRANT
其中:REMAP_SCHEMA=旧用户:新用户
REMAP_TABLESPACE=旧工作空间:新工作空间
EXCLUDE=GRANT 是为了解决IMPDB报出的错误如下
impdp时报错ORA-39083&ORA-01917
ORA-39083: 对象类型 OBJECT_GRANT 创建失败, 出现错误:
ORA-01917: 用户或角色 'keyrisk' 不存在
失败的 sql 为:
GRANT ALTER, SELECT ON "keyrisk"."SEQ_TBL_SALEPROMODE" TO "keyrisk"
5,导入成功后会有一些对象编译失败
可能是因为权限问题等,如果用到了一些DBMS_XX包,需要赋权:
GRANT EXECUTE ON DBMS_CRYPTO TO KEYRISK;
GRANT EXECUTE ON DBMS_LOCK TO KEYRISK;