美文网首页
oracle数据库恢复的数据有问题

oracle数据库恢复的数据有问题

作者: 桩i | 来源:发表于2018-05-02 10:50 被阅读0次

    正式环境的数据库数据备份后恢复到测试环境,然后报错system Error,找外包公司的技术看了以后给出一个impdp参数,transform=oid:N

    之前的备份计划一直是这样的

    每天凌晨一点备份数据库。

     ~]$ crontab -l
    0 1 * * *  /home/oracle/oracle_back.sh
    30 2 * * * /home/oracle/clear_archivelog.sh
    
    /home/oracle/app/11.2.0/db_1/bin/expdp XXX/XXX@XXX directory=BAKUP_DIR dumpfile=$BAKUPTIME.dmp logfile=$BAKUPTIME.log
    

    后来在Web服务器上加了一个计划任务

     ~]# crontab -l
    59 0 * * * /usr/weaver/Resin/bin/stopresin.sh >/dev/null 2>&1
    59 1 * * * /usr/weaver/Resin/bin/startresin.sh >/dev/null 2>&1
    

    重启resin服务的计划,为什么呢?因为之前都是不停服务备份,然后将备份数据恢复到测试数据库后会有问题,售后支持说是因为备份时服务在线导致插入数据前后不一致,对数据库不熟,只知道备份时会自动锁表或者设置表为只读状态,应该不会出现不一致啊,但是他一口咬定确实会不一致,所以就在备份数据时停止运行服务,此服务是公司内部人员使用,所以没有多大问题。

    今天开发又需要同步测试的数据库了,所以就恢复了一份最新备份数据,结果...

    • 修改前的导入命令
    impdp XXX/XXX directory=OA dumpfile=2018-04-28.dmp logfile=import${Time}.log TABLE_EXISTS_ACTION=REPLACE REMAP_SCHEMA=XXX:XXX2
    

    然后找到了外包技术支持,给了文章开头这个参数

    • 修改后的导入命令
    impdpXXX/XXX directory=OA dumpfile=2018-04-28.dmp logfile=import${Time}.log TABLE_EXISTS_ACTION=REPLACE REMAP_SCHEMA=XXX:XXX2 transform=oid:N
    

    回归正题

    网上查了下这个参数的用法
    原文链接

    • 出错原因
      一用户所有对象导出后导入到同一数据库的不同用户,因为该用户创建了type和定时任务,在同一数据库中,OID和job id是唯一的,所以在导入的时候报如下错误,创建type失败和创建job失败了 importing LHF 's objects into LHF2IMP-00017……(我之前在测试创建过和正式环境一样的用户,现在这个是另一个)

    • 参数说明:
      大意就是说如果TRANSFORM参数设置成OID=N,表示在imp的时候,新创建的表或这个类型会赋予新的OID,而不是dmp文件中包含的OID的值。但是这个参数的默认值是OID=Y,因此在进行Imp的时候,新创建的表或者type会赋予同样的OID,如果是位于同一个数据库上的不同schema,那就会造成OID冲突的问题,因此解决这个问题也很简单,只需要在impdp的时候,显示设置transform 参数为OID=N既可以了。如下所示,

    cmd> impdp test/test directory=dump_dir dumpfile=dump.dmp logfile=dump.log remap_schema=frank:test  transform=OID:N
    

    相关文章

      网友评论

          本文标题:oracle数据库恢复的数据有问题

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