我的具体情况是这样的:
   以前用的是10g,现在想用11g做dataguard,于是要把10g的数据导出来,放到11g里面去
我的具体想法是这样的:
   把10g的数据导入11g里面,然后用这个11g的数据库做主库,这样其它的备库通过日志应用就会用10g里面的数据了。那个10g的库就不要了,从新装上11g的做备库
我的问题是这样的:
   我最近才开始接触oracle,以前都是做java前端的,oracle基本都不懂,看了点网上的资料
   做法如下:
     我两台虚拟机,一个装上10g的oracle,一个装上11g
     在10g的安装目录/u01/app/oracle/下创建一个文件夹backup01,以system用户登录10g
     create directory dpdata1 as '/u01/app/oracle/backup01';
     grant read,write on directory dpdata1 to scott;//不懂这个scott用户在这干嘛的?  可以随便换么?
     expdp system/Oracle123 DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;
     这个过程后,在我的backup01下面却是多了个数据文件和日志文件,导出的整个过程没有报错。然后我用u盘把导出来的文件拷贝到另一个虚拟机11g的相同目录下(我的两个oracle目录一模一样),然后同样以system用户登录
     create directory dpdata1 as '/u01/app/oracle/backup01';
     impdp system/Oracle123 DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;
     问题就出在导入的这一步,出了两千多个错,
     满屏幕都是ORA-31684: Object type ... already exists这样的错
求高手帮忙 我做的是全库导出导入。不知道我这个过程是不是有误 或者有更好的办法 
我不是很懂 恳请指教    

解决方案 »

  1.   

     grant read,write on directory dpdata1 to scott;//不懂这个scott用户在这干嘛的?  可以随便换么?--这个要换成你需要导出数据的那个用户。scott只是一个示例,在你的例子里面应该是换成system你的过程应该没问题,只是导入的错误需要再详细一些才能看出是哪里有问题。有可能是你把ORACLE自带的那些TYPE、函数、过程全部都导出了,所以导入的时候才会报已经存在的错误。你可以直接impdp system/Oracle123 DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y ignore=y,先忽略这些错误,然后导入完成之后再看看你的数据是否已经到11G的数据库中去了。
      

  2.   

    我按照你说的方法试了 在导出的时候grant read,write on directory dpdata1 to system时候报错,说不能给自己赋权限,因为我使用system登陆的;然后我就没赋权限直接expdp system/Oracle123 DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;导出没有出错;
    然后用system登录11g,create directory dpdata1 as '/u01/app/oracle/backup01';然后按照你说的导入后面加上ignore=y以后,还是报了2090个错误,但是在system用户下确实导入了我要的表。非常感谢你的帮助;
    还有点问题就是:
       “有可能是你把ORACLE自带的那些TYPE、函数、过程全部都导出了,所以导入的时候才会报已经存在的错误”,我怎么能在全库导出的时候不导出oracle自带的这些东西?
        用system用户导出的是数据库所有的数据么?还是我要用sys用户导出,用sys用户导入?
        我的目的就是想把所有的数据从10g导出来 ,然后放到11g里面去
    恳请指点!
      

  3.   

    我的dataguard是用的同版本的库 都是11R2
    我们以前的数据库是10g,所以想把10g的数据导出来放到11g里面去,现在就是不懂怎么导出来放进去
      

  4.   

    我按照你说的方法试了 在导出的时候grant read,write on directory dpdata1 to system时候报错,说不能给自己赋权限,因为我使用system登陆的;然后我就没赋权限直接expdp system/Oracle123 DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;导出没有出错;--system权限很大了,所以你不赋权也行,赋权一般要用高级用户给低级用户赋权,最高级用户是SYS
    然后用system登录11g,create directory dpdata1 as '/u01/app/oracle/backup01';然后按照你说的导入后面加上ignore=y以后,还是报了2090个错误,但是在system用户下确实导入了我要的表。非常感谢你的帮助;
    还有点问题就是:
       “有可能是你把ORACLE自带的那些TYPE、函数、过程全部都导出了,所以导入的时候才会报已经存在的错误”,我怎么能在全库导出的时候不导出oracle自带的这些东西?
        用system用户导出的是数据库所有的数据么?还是我要用sys用户导出,用sys用户导入?
        我的目的就是想把所有的数据从10g导出来 ,然后放到11g里面去
    恳请指点!
    “有可能是你把ORACLE自带的那些TYPE、函数、过程全部都导出了,所以导入的时候才会报已经存在的错误”,我怎么能在全库导出的时候不导出oracle自带的这些东西?--这个可以在EXPDP的时候加入一个参数 schemas=(value1,value2,...,valueN)--包含数据的那些用户,不包括SYS,SYSTEM,SYSAUX,SYSMAN之类的就可以了。用system用户导出的是数据库所有的数据么?还是我要用sys用户导出,用sys用户导入?
    --是全部数据,只要你有FULL=Y这个参数用什么用户导出导入都无所谓,关键是你要有权限。但是对于全库导入导出一般建议都用高权限用户如SYSTEM,SYS之类的
      

  5.   

    我按照你说的方法试了 在导出的时候grant read,write on directory dpdata1 to system时候报错,说不能给自己赋权限,因为我使用system登陆的;然后我就没赋权限直接expdp system/Oracle123 DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;导出没有出错;--system权限很大了,所以你不赋权也行,赋权一般要用高级用户给低级用户赋权,最高级用户是SYS
    然后用system登录11g,create directory dpdata1 as '/u01/app/oracle/backup01';然后按照你说的导入后面加上ignore=y以后,还是报了2090个错误,但是在system用户下确实导入了我要的表。非常感谢你的帮助;
    还有点问题就是:
       “有可能是你把ORACLE自带的那些TYPE、函数、过程全部都导出了,所以导入的时候才会报已经存在的错误”,我怎么能在全库导出的时候不导出oracle自带的这些东西?
        用system用户导出的是数据库所有的数据么?还是我要用sys用户导出,用sys用户导入?
        我的目的就是想把所有的数据从10g导出来 ,然后放到11g里面去
    恳请指点!
    “有可能是你把ORACLE自带的那些TYPE、函数、过程全部都导出了,所以导入的时候才会报已经存在的错误”,我怎么能在全库导出的时候不导出oracle自带的这些东西?--这个可以在EXPDP的时候加入一个参数 schemas=(value1,value2,...,valueN)--包含数据的那些用户,不包括SYS,SYSTEM,SYSAUX,SYSMAN之类的就可以了。用system用户导出的是数据库所有的数据么?还是我要用sys用户导出,用sys用户导入?
    --是全部数据,只要你有FULL=Y这个参数用什么用户导出导入都无所谓,关键是你要有权限。但是对于全库导入导出一般建议都用高权限用户如SYSTEM,SYS之类的
    "这个可以在EXPDP的时候加入一个参数 schemas=(value1,value2,...,valueN)--包含数据的那些用户"  请问如何知道'包含数据的那些用户'是哪些用户,这些value1-N是怎么查出来的。见笑了 我确实很菜 刚接触。
      

  6.   

    select * from all_users
      

  7.   

    select * from dba_users--这个里面的信息会更多一些一般系统用户的default_tablespace=SYSTEM
      

  8.   

    我按照你说的方法试了 在导出的时候grant read,write on directory dpdata1 to system时候报错,说不能给自己赋权限,因为我使用system登陆的;然后我就没赋权限直接expdp system/Oracle123 DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;导出没有出错;--system权限很大了,所以你不赋权也行,赋权一般要用高级用户给低级用户赋权,最高级用户是SYS
    然后用system登录11g,create directory dpdata1 as '/u01/app/oracle/backup01';然后按照你说的导入后面加上ignore=y以后,还是报了2090个错误,但是在system用户下确实导入了我要的表。非常感谢你的帮助;
    还有点问题就是:
       “有可能是你把ORACLE自带的那些TYPE、函数、过程全部都导出了,所以导入的时候才会报已经存在的错误”,我怎么能在全库导出的时候不导出oracle自带的这些东西?
        用system用户导出的是数据库所有的数据么?还是我要用sys用户导出,用sys用户导入?
        我的目的就是想把所有的数据从10g导出来 ,然后放到11g里面去
    恳请指点!
    “有可能是你把ORACLE自带的那些TYPE、函数、过程全部都导出了,所以导入的时候才会报已经存在的错误”,我怎么能在全库导出的时候不导出oracle自带的这些东西?--这个可以在EXPDP的时候加入一个参数 schemas=(value1,value2,...,valueN)--包含数据的那些用户,不包括SYS,SYSTEM,SYSAUX,SYSMAN之类的就可以了。用system用户导出的是数据库所有的数据么?还是我要用sys用户导出,用sys用户导入?
    --是全部数据,只要你有FULL=Y这个参数用什么用户导出导入都无所谓,关键是你要有权限。但是对于全库导入导出一般建议都用高权限用户如SYSTEM,SYS之类的
    "这个可以在EXPDP的时候加入一个参数 schemas=(value1,value2,...,valueN)--包含数据的那些用户"  请问如何知道'包含数据的那些用户'是哪些用户,这些value1-N是怎么查出来的。见笑了 我确实很菜 刚接触。
    全库导出时 加上schemas=(value1,value2,...,valueN)这个参数会报错,说full=y和schemas参数不能同时使用
      

  9.   

    做出来了 谢谢你的回答 加了schemas 不用full 目标数据库建立相应的表空间 但是不建立用户 就可以了  导入的时候会自动导入用户