• 另类获取ORACLE导入导出(imp/exp)数据的进度信息


    昨天和同事聊起ORACLE的数据备份,imp/exp命令没有提供进度信息,只显示当前处理的对象名(表、视图等),似乎有点儿缺憾。于是想到几年前自己写的一个备份恢复小程序,提供的备份进度显示功能,它的实现思路一直让我觉得搞笑。

    功能实现很简单,就是启动一个Process来调用cmd执行imp/exp命令,并隐藏cmd界面。

    但是客户一直要求有个进度条来显示进度,因为等待过程得几分钟。当时研究了imp/exp命令的各个参数,查找了网上的一些资料,都没有找到解决方法。后来实在被逼无奈,只好想到了一个思路:日志文件。哈哈,没想到吧?

    即每次备份之前,先读取目标文件夹下的日志文件的大小,并记录下来,然后在imp/exp语句中加入log参数,覆盖掉现有的日志。在执行备份的过程中,程序适时监听新日志文件的大小,并与原来的日志文件大小做比较,从而计算出进度信息。这里的假设前提是数据量变动不大,每次备份生成的日志文件大小接近。

    imp语句写成类似这样:imp user1/pass@realty file=user1.dat log=user1.log

    问题

    如果用户选择的备份文件夹是新的,或者第一次执行备份操作还不存在日志怎么办?这时可以在程序中设定一个预估的日志大小,比如4K,具体数值视备份数据大小而定。

    致命弱点:

    如果数据变量量较大,日志大小也有差距,怎么办?这个问题确实难以解决,虽然不影响功能使用,但信息提示与真实进度不相符。所幸当时的项目数据相当于是个“死库”,变动不大,所以此功能也得到了用户的认可。但一直觉得这个解决方法很荒唐,如果你有好的思路请告诉我。

    结论:

    1.ORACLE不提供进度显示,个人估计是为了提高数据处理速度,不愿意预估数据量和实时计算进度。

    2.以上方法的解决通常只适用于数据变量较小的情况,否则只怕会让用户有上当受骗之感。哈哈

  • 相关阅读:
    linux shell 小技能
    Jenkins 2.60.x 2种发送邮件方式
    Linux wget 批量下载
    日语阅读-2-如何看“何々的”的用法
    日语阅读-1-如何看ほう的用法
    [日本语]初级语法
    Python基础
    Python基础(10)
    Python基础(8)
    Python基础(7)
  • 原文地址:https://www.cnblogs.com/qingteng1983/p/1784630.html
Copyright © 2020-2023  润新知