关于ORALCE一个表空间的数据导入到另一个表空间的方法(原创)
2014-06-30 16:48
330 查看
用户: 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,如果程序中使用其运算,可能产生奇怪的问题,且很难恢复
---------------------------------------参考--------------------------------------------
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;
新用户 : 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;
相关文章推荐
- 把一个数据库中的数据导入到另一个数据库中的方法
- 把一个数据库表中的数据导入到另一个数据库中解决方法
- 将一个数据库中的表结构及其数据导入到另一个数据库的方法
- 一是关于怎样找出和去除重复数据,这在另一个帖子利已有详细介绍。二是关于找出某一列里最大或最小的前几个,或是大于或小于某一个值(最大值或平均值)的数据
- Thin的DateChooser代码学习(关于js的函数参数为一个完整的函数以及“对象不支持此属性或方法”错误的解决)(原创,转载请声明)
- SQL远程数据同步与数据导入的常用方法[原创]
- 判断一个表的数据不在另一个表中最优秀方法
- 同一个数据库的一个表的数据怎么导入到另一个表
- 【Vegas原创】RMAN还原一个损坏的user表空间的数据文件
- 判断一个表的数据不在另一个表中最优秀方法
- 关于大批量导入数据的一个解决方案
- direct=true 错误处理方法 (关于 Oracle 的数据导入导出及 Sql Loader (sqlldr) 的用法
- (原创)关于如何处理EXCEL( CSV)文件 导入数据库的解决方法!!
- 同一个数据库的一个表的数据怎么导入到另一个表?
- 回滚段表空间中的一个数据文件丢失或者损坏的恢复方法的总结
- Oracle利用传输表空间方法导出导入数据的步骤
- 关于读取COM口数据的一个方法
- 关于在一个类(窗体)中调用另一个类(窗体)中的控件的三种方法
- 将一个用户全的数据全部导入到另一个用户
- 关于导入导出oracle数据的方法