zoukankan      html  css  js  c++  java
  • 关于ORALCE一个表空间的数据导入到另一个表空间的方法(原创)

      用户:   whnaproject     所属表空间: whnaproject                                

     新用户   : wniec            所属新表空间: wniec

      要求:将用户whnaproject中的数据库表以及数据 ,全部复制到 新表空间wniec的  wniec用户中。

      常规过程:用exp命令把用户whnaproject的表及数据导出,然后用IMP命令把导出的表及数据导入到新用户wniec中。

      存在问题:用户whnaproject的表及数据可以导入到新用户wniec中,但wniec中的导入的表所属的表空间还是原来导出用户whnaproject的所属表空间whnaproject ,而不是我想要的新表空间wniec。

      解决方法:

                  1.  select * from user_tables 可以查询出当前用户所属表的所属表空间信息。

                    2. 修改用户表table的表空间:alter table 表名 move tablespace 新表空间名;可以采用批量更新的方式,如下:

                   select 'alter table '||table_name||' move tablespace wniec;' from user_tables where tablespace_name <>'wniec

                        这样能保证表结构及数据都能转移到新的表空间中,其它一些方式只能转移表结构,数据无法复制过来。

                    3. 如果用户表中的字段类型含有 “LONG”、“BLOB”、"CLOB",则该类表不能直接采用上述MOVE语句移动。如果表无数据,则直接重建表时,修改表空间即可。如有数据可参考4、5两种方式处理。

                    4. 字段类型为 “LONG”的表不能采用MOVE方式处理,只能采用COPY方式处理,还未验证。

                    5. “BLOB”、"CLOB"为LOB类型,可参照下面该类型的处理方式进行移动,还未验证。

          注意事项:

                     1.move操作只能在数据库空闲的时候。

                     2.move以后记得重建index。

                     3.move表空间会改变rowid,如果程序中使用其运算,可能产生奇怪的问题,且很难恢复

    ---------------------------------------参考--------------------------------------------

    批量更改ORACLE中表、索引的表空间

    ORACLE中表、索引的表空间的批量更改方法
    1、查询当前用户下的所有表
    select 'ALTER TABLE '|| table_name ||' MOVE TABLESPACE tablespacename;' from user_all_tables;
    select 'ALTER TABLE '|| table_name ||' MOVE TABLESPACE tablespacename;' from user_tables;
     

    2、查询当前用户下的所有索引
    select 'alter index '|| index_name ||' rebuild tablespace tablespacename;' from user_indexes;

    3、在当前用户下将查询结果批处理执行即可!

     简单来说,操作以下几步:

    --查找所有的表,然后复制查询出来的结果,执行sql
    select 'alter table '||table_name||' move tablespace 表空间名;' from user_all_tables 

    --查找所有的索引,然后复制查询出来的结果,执行sql
    select 'alter index '||index_name||' rebuild tablespace 表空间名;' from user_indexes

    --处理lob类型
    alter table 表名 move tablespace 表空间名 lob(字段1) store as (tablespace 表空间名)

    --修改分区表的表空间
    alter table 表名 move partition 分区名1 tablespace 表空间名;
    alter table 表名 move partition 分区名2 tablespace 表空间名;

    查看所有的unusable索引
    SELECT *
    FROM   user_indexes
    WHERE  status NOT IN ('VALID', 'N/A')
    ORDER BY index_name;


    -- Description  : Displays unusable indexes for the specified schema or all schemas.
    -- Requirements : Access to the DBA views.
    -- Call Syntax  : @unusable_indexes (schema-name or all)

    SET VERIFY OFF

    SELECT owner,
           index_name
    FROM   dba_indexes
    WHERE  owner = DECODE(UPPER('&1'), 'ALL', owner, UPPER('&1'))
    AND    status NOT IN ('VALID', 'N/A')
    ORDER BY owner, index_name;

  • 相关阅读:
    JavaScript对象编程-第3章
    JavaScript对象编程-第3章
    JavaScript基础-第2章
    JavaScript基础-第2章
    JavaScript基础-第2章
    第十八节:详解Java抽象类和接口的区别
    第十八节:详解Java抽象类和接口的区别
    第十八节:详解Java抽象类和接口的区别
    JavaScript概述-第1章
    JavaScript概述-第1章
  • 原文地址:https://www.cnblogs.com/lteal/p/3816868.html
Copyright © 2011-2022 走看看