--------------重要-------------------------
select count(*) from user_tables;
select * from user_lobs;
select 'alter table ' ||t.table_name||' move lob('||t.column_name|| ') store as (tablespace ilearn);' from user_lobs t;
--下面这个是形式的写法??、
select 'ALTER TABLE ' ||t.table_name|| ' MOVE TABLESPACE ilearn LOB ('||t.column_name||') store as (tablespace ilearn);' from user_lobs t;
select 'alter index '||index_name ||' rebuild;'from user_indexes t where t.status ='UNUSABLE';
select index_name from user_indexes t where t.status ='UNUSABLE';
--alter index index_name rebuild;
Select 'alter table '|| table_name || ' move tablespace ilearn;' from user_tables;
select 'alter index '|| index_name ||' rebuild tablespace ilearn;' from user_indexes;
select table_name,tablespace_name from user_tables;
select segment_name,bytes/(1024*1024),t.segment_type
from user_segments t
where tablespace_name='USERS';
select segment_name,bytes/(1024*1024),t.segment_type
from user_segments t
where tablespace_name='ILEARN'
and t.segment_name='SYS_IL0000030462C00010$$'
;
select count(*) from user_all_tables;
select * from PORTAL_PREFERENCE;
select * from PLAN_TABLE;
drop table PORTAL_PREFERENCE;
drop table PLAN_TABLE;
select * from user_indexes t where t.index_name='SYS_IL0000030402C00010$$'
--------------重要-------------------------
select SEGMENT_NAME ,t.bytes/(1024*1024),t.segment_type from user_segments t where tablespace_name='ILEARN'
and t.segment_name='CLASSROOM'
order by t.bytes desc;
select * from user_indexes t where t.index_name='CLASSROOM_CAL_EVENT_ID_INDEX';
select * from classroom;
select t.sample_size from user_all_tables t where t.table_name='CLASSROOM';
SELECT *
FROM (SELECT BYTES/(1024*1024), segment_name, segment_type, owner
FROM dba_segments
WHERE tablespace_name = 'ILEARN'
ORDER BY BYTES DESC)
WHERE ROWNUM < 18
and owner='ILEARN';
select CAL_EVENT_ID from classroom
给某个用户解除某个表空间和授权某个表空间
revoke unlimited tablespace on users from ilearn;
alter user ilearn quota 0 on users;
alter user ilearn quota unlimited on ilearn;
alter user ilearn default tablespace ilearn;
索引的move,我们通过rebuild来实现
SQL> select * from v$version;
Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit Production
PL/SQL Release 9.2.0.6.0 - Production
CORE 9.2.0.6.0 Production
TNS for Solaris: Version 9.2.0.6.0 - Production
NLSRTL Version 9.2.0.6.0 - Production
一:move普通表、索引基本语法:
alter table tab_name move tablespace tbs_name;
我们需要重新创建主键或索引,基本语法为:
alter index index_name rebuild;
alter index pk_name rebuild;
如果我们需要move索引,则使用rebuild语法:
alter index index_name rebuild tablespace tbs_name;
alter index pk_name rebuild tablespace tbs_name;
提示:查询表所具有的索引,可以使用user_indexes视图(索引和主键都在这个视图里可找到)。
二:move分区表及索引和普通表一样,索引会失效,区别的仅仅是语法而已。
分区基本语法:特别提醒注意,如果是单级分区,则使用关键字PARTITION,如果是多级分区,则使用SUBPARTITION替代PARTITION。
如果分区或分区索引比较大,可以使用并行move或rebuild,PARALLEL (DEGREE 2);如:
ALTER TABLE PART_ALARMTEXTDATA move SUBPARTITION ALARMTEXTDATA_050910_ATD01 TABLESPACE users PARALLEL (DEGREE 2);
ALTER INDEX GLOBAL_ALARMTEXTDATA REBUILD tablespace users PARALLEL (DEGREE 2);
ALTER INDEX LOCAL_ALARMTEXTDATA REBUILD SUBPARTITION ALARMTEXTDATA_050910_ATD01 TABLESPACE users PARALLEL (DEGREE 2);
移动表的某个分区:
================
ALTER TABLE tab_name move PARTITION partition_name TABLESPACE tbs_name;
重建全局索引:
================
ALTER INDEX global_index REBUILD;或
ALTER INDEX global_index REBUILD tablespace tbs_name;
[xsb注: 分区操作时可以带上with update global indexes选项更新全局索引。]
重建局部索引:
================
ALTER TABLE tab_name MODIFY PARTITION partition_name REBUILD UNUSABLE LOCAL INDEXES;或
ALTER INDEX local_index_name REBUILD PARTITION partition_name TABLESPACE tbs_name;
I:LONG类型
long类型不能通过MOVE来传输特别提示,尽量不要用LONG类型,特难管理。参考:http://www.anysql.net/2005/12/long_vs_lob.html
1,LONG不能使用insert into ... select ...等带select的模式。如
create table t123 (id int,en long);则
insert into t123(id,en) select * from t123;报告错误,可以用pl/sql来帮助解决,如:
declare
cursor cur_t123 is select * from t123;
use_t123 cur_t123%rowtype;
begin
open cur_t123;
loop
fetch cur_t123 into use_t123;
exit when cur_t123%notfound;
insert into t123(id,en) values (use_t123.id,use_t123.en);
end loop;
close cur_t123;
end;
/
II: LOB类型在建立含有lob字段的表时,oracle会自动为lob字段建立两个单独的segment,一个用来存放数据(segment_type= LOBSEGMENT),另一个用来存放索引(segment_type=LOBINDEX)。默认它们会存储在和表一起的表空间。我们对表MOVE时, LOG类型字段和该字段的索引不会跟着MOVE,必须要单独来进行MOVE,语法如下如:
alter table t321 move tablespace users;
alter table t321 move lob(en) store as (tablespace users);
2 执行REVOKE UNLIMITED TABLESPACE ON TABLESPACE_A FROM USER_A;以收回任何授予用户帐户的无限制表空间权限。
3 执行ALTER USER USER_A QUOTA 0 ON TABLESPACE_A;以使USER_A帐户不能在TABLESPACE_A上创建任何对象。
4 删除TABLESPACE_A中USER_A拥有的所有对象。
5 执行ALTER USER USER_A DEFAULT TABLESPACE TABLESPACE_B;以使TABLESPACE_B成为USER_A用户帐户的缺省表空间。Oracle试图将对象导入TABLESPACE_A,因为这些对象是从TABLESPACE_A导出的。注意用户不具有TABLESPACE_A上的配额。然后将查看用户的缺省表空间。在Oracle可以将数据导入TABLESPACE_B之前,必须给予USER_A用户该表空间上足够大的配额,如下步骤所示。
6 执行ALTER USER USER_A QUOTA UNLIMITED ON TABLESPACE_B;
7 导入被导出的数据库对象。缺省情况下,导入工具试图将它们导入到TABLESPACE_A中,然而,因为用户不具有这个表空间的配额,所以所有的对象将被创建在USER_A的缺省表空间TABLESPACE_B中。
Top
REVOKE UNLIMITED TABLESPACE ON itmpspace FROM itmp ;
ALTER USER itmp QUOTA 0 ON itmpspace ;
ALTER USER itmp DEFAULT TABLESPACE idmp;
ALTER USER itmp DEFAULT TABLESPACE idmp;
ALTER USER itmp QUOTA UNLIMITED ON idmp;
alter table t move lob(c2) store as (tablespace users);
alter table test move tablespace users lob(c2) store as (tablespace users);
ref: Move表、索引、LOB/Long
(导出、导入时同分区表一样,必须预创建此表空间)
alter table t move lob(c2) store as (tablespace users);
alter table test move tablespace users lob(c2) store as (tablespace users);
如果原表使用了long类型字段,则必须先转成clob或blob类型。Long类型不单独使用segments,而lob类型单独使用segments.