zoukankan      html  css  js  c++  java
  • Oracle小技巧_不同表空间不同用户导入导出数据dmp

    【博主注:数据库方面 ITPUB网站及博客内容非常丰富】
     

    转载来源 ITPUB 博客

    经常有人会问:原来的数据在USERS表空间里面,我想把它IMP进APP表空间,我已经修改了目的用户的默认表空间,为什么结果还是IMP到USERS表空间中了呢。

    关于此问题,作如下解释:
    Oracle并没有提供什么参数来指定要导入哪个表空间,数据默认将导入到原本导出时数据所在的表空间中,但是我们可以通过以下的方法来实现导入到不同的表空间。

    下面是网络上搜集的3个方法:


    1.在IMP时候使用INDEXFILE参数
    当给此参数指定了某一文件名,IMP的时候所有的index将不会直接导入到表空间中,而是在指定的文件中生成创建index的脚本。
    然后用文本编辑器打开此文件,直接编辑脚本中的storage参数,修改为想要导入的表空间名称。
    然后重新执行IMP,使用INDEXS=n参数将除Index之外的Objects导入。
    最后进入SQL*PLUS,直接运行刚才编辑的脚本,生成索引。
    该方法适用于将index以及constraints导入指定的表空间。

    2.改变目的用户的默认表空间
    这就是上面说的经常有人提问的方法。但是上述的问题之所以没有成功,是因为缺少了下面的几步。
    首先,收回目的用户的"UNLIMITED TABLESPACE"权限:
    revoke unlimited tablespace from username;
    其次,取消目的用户在原数据导出表空间中的配额,这样才能迫使IMP把数据导入到用户的默认表空间中去。
    然后,将希望导入的表空间设为目的用户的默认表空间,并添加配额。
    最后,执行IMP。
     

    3。使用TOAD
    TOAD是强大的Oracle数据库管理软件,是Quest出品的第三方软件,我们可以使用其中的Rebuild Multi Objects工具来实现将多个Object转移到指定的表空间。
    于是我们可以不管三七二十一,先IMP,然后再用TOAD作事后的修改。
    关于TOAD的使用,此处不作详细解释。
     


    楼主成功方法,基本是方法2,但略有不同。
     
    步骤1:新建表空间和临时表空间(略),新建用户。
     
    create user orange identified by 12345678;
    grant resource,connect,dba to orange;
    revoke unlimited tablespace from orange;
    alter user orange default tablespace newtablespaces temporary tablespace newtablespacestemp;   -- 设置默认表空间为新建的表空间
    alter user orange quota unlimited on newtablespaces ;    -- 设置对默认表空间/新表空间配合为无限制配额

    步骤2:导出原表空和原用户的数据表结构(不含数据)。

    // 这是CMD命令
    // rows=n 表示不导出数据
    exp apple/pwd@dblink file=E:dbtable.dmp rows=n
    
    // 导入数据表,更换表的所属用户
    // tablespaces=newtablespaces 参数一定要加
    imp orange/pwd@dblink file=E:dbtable.dmp fromuser=apple touser=orange ignore=y tablespaces=newtablespaces
    
    

     步骤3:导出原来的全部数据,导入到已经建好的表结构中。

    // 导出原表空间和原用户的数据库表及数据
    exp apple/pwd@dblink file=E:dbtabledata.dmp 
    
    // 导入数据到新用户和表空间中
    // tablespaces=newtablespaces 参数一定要加
    imp orange/pwd@dblink file=E:dbtabledata.dmp fromuser=apple touser=orange ignore=y tablespaces=newtablespaces

    注意:

    1.导入时如果不加参数 tablespace=XXX,总是报错:ORA-01950:对表空间无权限。

    2. 对临时表空间不能执行配额操作,对永久表空间可以。

  • 相关阅读:
    从零开始——PowerShell应用入门(全例子入门讲解)
    详解C# Tuple VS ValueTuple(元组类 VS 值元组)
    How To Configure VMware fencing using fence_vmware_soap in RHEL High Availability Add On——RHEL Pacemaker中配置STONITH
    DB太大?一键帮你收缩所有DB文件大小(Shrink Files for All Databases in SQL Server)
    SQL Server on Red Hat Enterprise Linux——RHEL上的SQL Server(全截图)
    SQL Server on Ubuntu——Ubuntu上的SQL Server(全截图)
    微软SQL Server认证最新信息(17年5月22日更新),感兴趣的进来看看哟
    Configure Always On Availability Group for SQL Server on RHEL——Red Hat Enterprise Linux上配置SQL Server Always On Availability Group
    3分钟带你了解PowerShell发展历程——PowerShell各版本资料整理
    由Find All References引发的思考。,
  • 原文地址:https://www.cnblogs.com/muyun/p/7593510.html
Copyright © 2011-2022 走看看