美文网首页数据库
Oracle数据泵专题

Oracle数据泵专题

作者: 这货不是王马勺 | 来源:发表于2021-11-19 16:59 被阅读0次

    使用参数文件进行expdp导出

    使用参数文件字符无需转义,执行语句较为方便

    创建导出目录

    create directory data_dump_dir as '/data/backup/data_dump_dir/';
    

    注意,这个OS层的路径需要oracle有权限

    为用户授权此directory的读写权限

    grant read,write on directory data_dump_dir to srm;
    

    如果是pdb则需要在pdb层进行用户授权

    检查directory

    select * from dba_directories;
    

    编辑参数文件exp.par

    schemas=srm,itf
    directory=data_dump_dir
    dumpfile=srm_all_20211014_%U.dmp
    logfile=expdp_srm_20211014.log
    parallel=4
    compression=all
    job_name=srm_export
    

    expdp导出

    nohup expdp srm/HxxdSxx#HR@10.xx.xx.xxx/srmhixxin parfile=/data/backup/data_dump_dir/exp.par &
    

    我们通过检查导出目录下的log文件tail判断当前导出进度

    使用参数文件进行impdp导入

    创建目录并授权
    这一步和expdp是相同的

    create directory data_dump_dir as '/data1/data_dump_dir/';
    GRANT READ,WRITE ON DIRECTORY data_dump_dir TO srm;
    

    编辑导入参数文件imp.par

    Schemas=srm,itf
    Directory=data_dump_dir
    Dumpfile=srm_all_20211014_%U.dmp
    Logfile=impdp_srm_20211014.log
    Remap_schema=srm:srm,itf:itf
    Remap_tablespace=srm_data:srm_data,itf_data:itf_data
    Table_exists_action=replace
    Cluster=n
    Parallel=4
    Exclude=user,sequence
    Job_name=srm_import
    

    (此处exclude排除掉user, sequence 不导入,sequence需要重新导)

    impdp导入到新建的pdb中

    nohup impdp srm/HxxdSxx#HR@hirain_test02 parfile=/data1/data_dump_dir/imp.par &
    

    导入过程报错汇总

    1.导入进程处于defining状态

    查看导入进程当前状态情况

    impdp srm/HxxdSxx#HR@hirain_test02  attach= srm_import
    

    进入sqlplus查看异常等待事件

    Sqlplus / as sysdba
    col event format a50
    set linesize 200
    set pagesize 999
    select event,count(*) from v$session group by event;
    

    发现有1000多个异常latch 等待

    latch等待
    确认sql
    col USERNAME format a10
    col MACHINE format a20
    col CLIENT_INFO format a20
    col TERMINAL format a10
    col SQL_ID format a15
    select SID,SERIAL#,USERNAME,STATUS,MACHINE,SQL_ID,LOGON_TIME,BLOCKING_SESSION from v$session where event=’latch:enqueue hash chains’;
    

    查询结果都是同一个SQL_ID,以及会话登录事件LOGON_TIME都是很早之前的。
    查询sql_id 对应的具体sql 内容

    Select sql_text from v$sqlarea where sql_id=’&sql_id’;
    

    输入刚才的sql_id
    怀疑是大量的Inert 操作执行成功后 没有提交或者根本没有执行成功,一直卡着。
    批量Kill
    批量Kill 掉这个event=’latch: enqueue hash chains’ 对应的session:

    SELECT 'alter system disconnect session '''||SID || ',' || SERIAL#||''' immediate;'   FROM V$SESSION where event=’latch: enqueue hash chains’;
    

    将查询出来的拼接的sql,直接复制执行即可。
    返回第2步多查几次event 情况,看是否还有其它异常,没有异常后正常导入

    相关文章

      网友评论

        本文标题:Oracle数据泵专题

        本文链接:https://www.haomeiwen.com/subject/tkostrtx.html