oracle 表空间转换,oracle:数据由一个表空间转换到另一个表空间

这篇博客讲述了如何将用户数据从多个表空间统一迁移到一个表空间,包括使用ALTER INDEX和ALTER TABLE命令迁移索引和表,以及处理可能的索引无效问题。提供了SQL查询来生成迁移所有索引和表的命令,并展示了修复UNUSABLE状态索引的方法。
摘要由CSDN通过智能技术生成

1.为什么出现这样的需求?

无论什么情况,现在我们一个用户的数据存在于多个表空间里,现在想把数据统一放在一个表空间里

2.如何统一数据表同一个表空间,并保证以后同一个用户的数据保存在一个表空间?

2.1索引迁移

命令:ALTER INDEX BMI_ACCOUNTS REBUILD TABLESPACE DEMO;

生成用户中对所有索引迁移的命令:

SELECT 'ALTER INDEX '||INDEX_NAME||' REBUILD TABLESPACE DEMO;' FROM USER_INDEXES WHERE TABLESPACE_NAME='EXAMPLE';

2.2表迁移 命令:ALTER TABLE ACCOUNTS MOVE TABLESPACE DEMO

生成用户中对所有表迁移的命令:

SELECT 'ALTER TABLE '||TABLE_NAME||' MOVE TABLESPACE DEMO;' FROM USER_TABLES WHERE TABLESPACE_NAME='EXAMPLE';

连同LOB字段一起迁移命令:

ALTER TABLE test MOVE TABLESPACE test LOB (DATAPOLLIOR) STORE AS (TABLESPACE test);

3.索引移动后可能出现索引无效的情况,这时需要重新建立索引 -- 请以 DBA 权限登录,并执行

-- 将所有 UNUSABLE 状态的 index 修复, rebuild 一下即可

declare

-- 指向所有 UNUSABLE 状态的 index 的游标

cursor c is

select index_name, owner

from dba_indexes

where status='UNUSABLE';

owner dba_indexes.owner%type;

index_name dba_indexes.index_name%type;

begin

open c;

loop

fetch c into index_name, owner;

exit when c%notfound;

execute immediate 'alter index ' || owner || '.' || index_name || ' rebuild';

end loop;

close c;

end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值