• ORA-39095: Dump file space has been exhausted


    ORA-39095: Dump file space has been exhausted

    1 简述

    一个朋友在导数据的时候,突然遇到ORA-39095错误。随即查看磁盘空间,发现才使用了60%多。而导出的数据只有几个G.

    明明有空间,为什么会报空间耗尽呢?百爪搔心的问我~

    下面是分析和解决过程。

    2 错误信息

    $ oerr ora 39095
    39095, 00000, "Dump file space has been exhausted: Unable to allocate %s bytes"
    // *Cause:  The Export job ran out of dump file space before the job was
    //          completed.
    // *Action: Reattach to the job and add additional dump files to the job
    //          restarting the job.
    [oracle@bossdb1 ~]$
    

    从错误信息来看,这个错误的本意是: 导出的数据量超出了dmp文件的最大容量。
    官方的建议是: 给导出任务添加额外的dmp文件。 那么按这个思路处理的操作应该是:

      expdp username/password@tnsnames attache=job_name
    add_file xxxx
    

    但是我没这样做。有兴趣的童鞋,可以按这个思路去处理一下,看是不是可以解决这个错误。

    从官方的解释来看,是文件大小不能容纳所有数据引起的。可是据说并没有配置filesize参数,也就是没有限制单个文件大小。所以这个原因也排除。

    3 分析

    • 参数

      directory=exp_dir
      dumpfile=for_union_query.dmp
      logfile=for_union_query.log
      CLUSTER=N
      include=table:"in(select table_name from tables_tobe_exported where owner='es')"
      parallel=10
      schemas=ES
      compression=all
      
    • 分析 看参数文件中,突然反应过来:

      • parallel 并行写入

      为了防止数据错乱,Oracle不允许多个进程对同一个dmp文件进行同时写入,而某个进程如果长时间无法获取dmp文件的写权限,就会报ORA-39095错误。

    4 解决

    将参数文件中的 parallel=10 这一行删除。再导出时报错消失。

    其实不删除,重新试几次也可以导出成功。但是这里对导出的parallel 进行一次浅析。

    5 扩展

    很多人,在导出数据的时候为了加快导出速度,节省时间,都会加上parallel参数。但是对于Oracle的并行机制并不了解。 并不能真正的开启并行导出或者导入。

    比如本次示例中,只设置并行参数,这样是不能真正打开并行导出的。最多只是 并行 读取,但是不能实现并行写入文件。

    要加快导出速度,需要几方面来配合:

    • 数据库写进程
    • 并行数
    • 导出文件个数

    只有这三者配合才可以真正的实现并行导出。

    那么能开启多少个并发, 首先要查看oracle instance里当前开启了多少个数据库写进程

    show parameter db_writer_processes
    

    parallel参数的值,不要超过这个参数的值 。不然对数据库有影响。

    设置dumpfile 参数值时,加上%U参数。加上这个参数后,可以由Oracle 数据泵自行决定创建多少个数据文件。 当然还可以指定filesize,不过不是必要的.

    更多关于Oracle数据泵的用法参见Oracle 数据泵.

    Author: halberd.lee

    Created: 2019-06-19 Wed 16:57

    Validate

  • 相关阅读:
    Leetcode#145 Binary Tree Postorder Traversal
    Leetcode#146 LRU Cache
    单引号和双引号的区别
    $* $@ $#
    pthread_detach
    pthread_join
    intent 启动activity、service的方法
    multicast based on udp
    ARM指令系统
    ARM寄存器
  • 原文地址:https://www.cnblogs.com/halberd-lee/p/11052422.html
Copyright © 2020-2023  润新知