导入导出总结备忘录

导出

1,创建导出用户并赋予权限

create user username identified by password;

 //resource和connect权限,就能导出本用户下的数据,如果有exp_full_database权限,能导出整个数据库的数据;

grant resource,connect,exp_full_database to username;

2,创建oracle文件夹并赋予权限

create or replace directory directoryname as '/usr/ora_expdp_file';

  查看可用文件夹

select * from all_directories;

   //查看创建的目录须要的操作系统权限。

  赋予某用户对某文件夹的读写权限

grant read, write on directory directoryname to username;

3,导出  

 用用户expdp_id以6并发并压缩(compression=all)的方式将tables、日志名称为emr_wh_2017.10.17.log,导出文件名称为emr_wh_2017.10.17_%U.dmp 的方式导出到文件夹DUMP_HIS

expdp \"\/ AS SYSDBA\" directory=DATA dumpfile=JKHIS_CHHIS_%U_${DATE_SUF}.dmp logfile=fullusers_${DATE_SUF}.log schemas=JKHIS,CHHIS parallel=4 cluster=N compression=all

 

impdp 

总结:为防止bug或者Oracle的产品变更。原库与最终库版本最好保持一直,排除'SYS','SYSMAN','WMSYS','OUTLN','APEX','SH'用户(SH用户用于演示,可选),windows系统注意转义符。

误区1:

impdp需要手动创建表空间,创建用户,导入用户数据。

impdp可选项(expdp同理)

USERID=test/test                  --导出所使用的用户,本地用户
DIRECTORY=dmpfile            --导出的逻辑目录,一定要在oracle中创建完成的,并且给用户授权读写权限
DUMPFILE=xx.dmp               --导出的数据文件的名称,如果想在指定的位置的话可以写成dumpfile=/home/oracle/userxx.dmp
                      -- 使用并行时候需要使用变量命名,如%U
LOGFILE=xx.log                --日志文件,如果不写这个参数的话默认名称就是export.log,可以在本地的文件夹中找到
SCHEMAS=userxx            --使用dblink导出的用户不是本地的用户,需要加上schema来确定导出的用户,类似于exp中的owner,但还有一定的区别
EXCLUDE=TABLE:"IN('T1','T2','T3')"         --exclude 可以指定不导出的东西,table,index等,后面加上不想导出的表名
                      --也可以过滤角色、视图、序列
                                                                 --EXCLUDE=SEQUENCE,VIEW,TABLE:"IN ('EMP','DEPT')" 过滤所有的SEQUENCE,VIEW以及表对象EMP,DEPT
INCLUDE=TABLE:"IN('T1','T2','T3')"         --与EXCLUDE同理,
NETWORK_LINK=db_local        --这个参数是使用的dblink来远程导出,需要指定dblink的名称

常见过滤选项

EXCLUDE=SEQUENCE,VIEW                          --过滤所有的SEQUENCE,VIEW
EXCLUDE=TABLE:"IN ('EMP','DEPT')"               --过滤表对象EMP,DEPT
EXCLUDE=SEQUENCE,VIEW,TABLE:"IN ('EMP','DEPT')" --过滤所有的SEQUENCE,VIEW以及表对象EMP,DEPT
EXCLUDE=INDEX:"= 'INDX_NAME'"                   --过滤指定的索引对象INDX_NAME
INCLUDE=PROCEDURE:"LIKE 'PROC_U%'"              --包含以PROC_U开头的所有存储过程(_ 符号代表任意单个字符)
INCLUDE=TABLE:"> 'E' "                          --包含大于字符E的所有表对象

其它常用操作符 NOT IN, NOT LIKE, <, != 等等
 

impdp impdpuser/******** DIRECTORY=dump DUMPFILE='fulldb_01_20191106_0100.dmp','fulldb_02_20191106_0100.dmp' logfile=impdp_data_2019_11_10_02.log parallel=2 exclude=schema:"in \('SYS','SYSMAN','WMSYS','OUTLN'\)" 
 


报错1:

ORA-39083: 对象类型 TABLESPACE 创建失败, 出现错误:
ORA-02236: 文件名无效
失败的 sql 为:
CREATE UNDO TABLESPACE "UNDOTBS1" DATAFILE SIZE 26214400 AUTOEXTEND ON NEXT 5242880 MAXSIZE 32767M BLOCKSIZE 8192 EXTENT MANAGEMENT LOCAL AUTOALLOCATE
ORA-39083: 对象类型 TABLESPACE 创建失败, 出现错误:
ORA-02236: 文件名无效
错误原因:
 由于导入之前我查看了原库,手动创建了数据文件。此错误可以忽视。
 原库为RAC,使用ASM管理文件系统。创建数据文件并不需要指定文件位置,如果不手动创建,自动创建有可能失败。
 


错误2:

impdpuser/******** DIRECTORY=dump DUMPFILE='fulldb_01_20191106_0100.dmp','fulldb_02_20191106_0100.dmp' logfile=impdp_data_2019_11_10_02.log parallel=2 exclude=schema:"in ('SYS','SYSMAN','WMSYS','OUTLN')"

LRM-00116: syntax error at ')"
错误原因:
 导入库为windows系统,需要添加转义符
 
修改
impdpuser/******** DIRECTORY=dump DUMPFILE='fulldb_01_20191106_0100.dmp','fulldb_02_20191106_0100.dmp' logfile=impdp_data_2019_11_10_02.log parallel=2 exclude=schema:\"in ('SYS','SYSMAN','WMSYS','OUTLN')\"
 


错误3

处理对象类型 DATABASE_EXPORT/SCHEMA/JOB
ORA-39083: 对象类型 JOB 创建失败, 出现错误:
ORA-12718: 操作要求以 SYS 身份连接
失败的 sql 为:
 BEGIN SYS.DBMS_IJOB.SUBMIT( JOB=> 4001, LUSER=> 'SYS', PUSER=> 'APEX_030200', CUSER=> 'APEX_030200', NEXT_DATE=> TO_DATE('2019-11-06 05:44:38', 'YYYY-MM-DD:HH24:MI:SS'), INTERVAL=> 'sysdate + 8/24', BROKEN=>  FALSE, WHAT=> 'wwv_flow_cache.purge_sessions(p_purge_sess_older_then_hrs => 24);', NLSENV=> 'NLS_LANGUAGE=''AMERICAN'' NLS_TERRITORY=''AMERICA'' NLS_CURRENCY=''$'' NLS_ISO_CURRENCY=''AMERICA'' NLS_NUMERIC_C
ORA-39083: 对象类型 JOB 创建失败, 出现错误:
ORA-12718: 操作要求以 SYS 身份连接
失败的 sql 为:
 BEGIN SYS.DBMS_IJOB.SUBMIT( JOB=> 4002, LUSER=> 'SYS', PUSER=> 'APEX_030200', CUSER=> 'APEX_030200', NEXT_DATE=> TO_DATE('2019-11-06 01:15:39', 'YYYY-MM-DD:HH24:MI:SS'), INTERVAL=> 'sysdate + 10/1440', BROKEN=>  FALSE, WHAT=> 'wwv_flow_mail.push_queue(wwv_flow_platform.get_preference(''SMTP_HOST_ADDRESS''),wwv_flow_platform.get_preference(''SMTP_HOST_PORT''));', NLSENV=> 'NLS_LANGUAGE=''AMERICAN'' NLS_TERRITORY=


失败为系统库,建议导入时候也排除’APEX角色/SH用户(oracle自带模板)’ exclude=schema:"in ('SYS','SYSMAN','WMSYS','OUTLN')"


本次导入命令为
impdp impdpuser/******** DIRECTORY=dump DUMPFILE='fulldb_01_20191106_0100.dmp','fulldb_02_20191106_0100.dmp' logfile=impdp_data_2019_11_10_02.log parallel=2 exclude=schema:"in \('SYS','SYSMAN','WMSYS','OUTLN','APEX','SH'\)"




 

posted @ 2019-11-14 13:11  暴走的馒头  阅读(740)  评论(0编辑  收藏  举报