oracle怎么move Oracle怎么读

oracle怎么加快move table删除表oracle怎么move?
1 truncate table
2. drop table
如何设置oracle row movemove一个表到另外一个表空间时,索引不会跟着一起move,而且会失效 。(LOB类型例外)表move,我们分为:
*普通表move
*分区表move
*LONG,LOB大字段类型move来进行测试和说明 。
索引的move,我们通过rebuild来实现
一:move普通表、索引基本语法:
alter table tab_name move tablespace tbs_name;move过的普通表,在不用到失效的索引的操作语句中,语句执行正常,但如果操作的语句用到了索引(主键当做唯一索引) , 则此时报告用到的索引失效,语句执行失败,其他如外键 , 非空约束,缺省值等不会失效 。
我们需要重新创建主键或索引,基本语法为:
1
2
alter index index_name rebuild;
alter index pk_name rebuild;
如果我们需要move索引,则使用rebuild语法:
1
2
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);如:
1
2
3
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);移动表的某个分区:
1
ALTER TABLE tab_name move PARTITION partition_name TABLESPACE tbs_name;重建全局索引:
1
2
ALTER INDEX global_index REBUILD;或
ALTER INDEX global_index REBUILD tablespace tbs_name;注: 分区操作时可以带上with update global indexes选项更新全局索引重建局部索引:
1
ALTER TABLE tab_name MODIFY PARTITION partition_name REBUILD UNUSABLE LOCAL INDEXES;1

1
ALTER INDEX local_index_name REBUILD PARTITION partition_name TABLESPACE tbs_name;提示:
USER_PART_TABLES
USER_IND_PARTITIONS
USER_IND_SUBPARTITIONS
USER_LOB_PARTITIONS
USER_LOB_SUBPARTITIONS
USER_PART_INDEXES
USER_PART_LOBS可查询分区相关内容,同时,分区对象,也是segment , 所以也可在dba_segments里查的到 。
三:move LONG,LOB类型(据说DBMS_REDEFINITION包可以提供一些方便,没用过 。)I:LONG类型
LONG类型不能通过MOVE来传输特别提示,尽量不要用LONG类型,特难管理 。参考:http//不能使用insert into … select …等带select的模式 。如1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
对有LONG类型字段的表的转移 , 可以使用:
create新表的方法 。
* create一个新的表,存储在需要转移的表空间 。
* 创建新的索引(使用tablespace 子句指定新的表空间) 。
* 把数据转移过来
方法一:用COPY的方法:
1
copy from bigboar/bigboar@bigboar_sid insert t123(id,en) using select id,en from t123;方法二:PL/SQL(如上)
方法三:直接就把LONG转换成CLOB类型
1
2
create table t321(id int,en clob) tablespace users;insert into t321(id,en) select id,to_lob(en) from t123;方法四:exp/imp
1
2
exp bigboar/bigboar file=a.dat tables=t123imp bigboar/bigboar file=a.dat full=y IGNORE =y* drop掉旧表 。
* rename 新表为旧表表名 。
II:LOB类型在建立含有lob字段的表时,oracle会自动为lob字段建立两个单独的segment,一个用来存放数据(segment_type=LOBSEGMENT),另一个用来存放索引(segment_type=LOBINDEX) 。默认它们会存储在和表一起的表空间 。我们对表MOVE时 , LOG类型字段和该字段的索引不会跟着MOVE,必须要单独来进行MOVE,语法如下如:
1
2
alter table t321 move tablespace users;
alter table t321 move lob(en) store as (tablespace users);
Oracle:MOVE与SHRINK命令相比较 MITe命令压缩Oracle块中oracle怎么move的记录 解决行链接问题 并重置表oracle怎么move的高水平线
move和shrink命令都会重置表的高水平线 那么哪个命令更有效呢?这篇文章讨论使用move和shrink命令重新组织一个表 然后比较Oracle块的记录被压缩得怎么样以及行链接解决得怎么样
注意 关于表高水平线和重置表高水平线的不同方法的详细讨论不在这篇文章的讨论范围内
下面的步骤简要描述了使用move和shrink命令对TEMP_JP表进行重组时对该表的各种操作 在这一系列步骤中出现的一些异常被清晰地标注出来(Move相关的命令是以蓝色表示 Shrink相关的命令是以绿色表示)

创建表temp_jp并插入 条记录到这个表中
显示在表的Oracle块中的记录分配
奇怪的是 插入到每个Oracle块中的记录数不是相同的
索引表temp_jp
检验表和索引的磁盘空间利用情况 默认情况下 Oracle为一个表分配一个区间 为一个索引分配两个区间
对temp_jp表添加一个第三列来模拟行链接
分析Temp_jp表
从temp_jp表选择行数和链接行数 temp_jp表中几乎所有的记录都是链接的
在模拟行链接之后检查表和索引的磁盘空间利用情况 表temp_jp的磁盘空间使用增加了 番
删除这个表的所有记录 使这个表中每个Oracle块只留一条记录
在删除记录之后 展开显示temp_jp表的记录 记录的数目显示了每个Oracle块是一致的 因为oracle怎么move我们删除了这个表的所有记录 这个表中每个Oracle块只留一条记录
分析Temp_jp表
从temp_jp表选择行数和链接行数
检查temp_jp表的索引状态 它是VALID
A 对表执行move操作 BA BB对temp_jp表执行shrink操作
A 在对表执行了move操作之后 索引的状态是不可用的 B在对temp_jp表执行了操作之后 索引的状态是无效的
显示temp_jp表和它的索引的磁盘空间使用情况 A 在进行move操作之后 对表分配了一个区间 对索引分配了两个区间 B 在进行shrink操作之后 表和索引被分配了每个具有 个Oracle块的区间 最初分配给索引的两个区间下降为一个
展开显示temp_jp表Oracle块中的记录 A 在temp_jp表中的所有 条记录被压缩到一个Oracle块中 B 在temp_jp表中的所有 条记录被扩展到 个Oracle块中
AA 表分析操作失败 错误为ORA AB 在表上重新建立索引来使其生效 在索引重建操作之后 一个Oracle区间被分配给了这个索引 AC 在索引重建之后 分析这个表 B 分析这个表
选择temp_jp表的行数和行链接数 A 在对temp_jp表进行move操作之后 行链接被解决了 链接行数为 B 在对temp_jp表进行shrink操作之后 行链接没有解决 链接行数为
检验temp_jp表的索引状态是有效的
测试A
move操作怎样影响一个表的Oracle块中行链接和数据的分配
A
drop table temp_jp;
A
create table temp_jp(col number( ) col varchar ( )) tablespace users;
A
declarebeginfor i in loopinsert into temp_jp values(i RAMA );end loop;mit;end;/
A
select dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid)count(*)from temp_jpgroup by dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid)order by dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid);DBMS_ROWID ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID)COUNT(*)rows selected
A
create index temp_jp_idx on temp_jp(col ) tablespace users;
A
select segment_name segment_type bytes/ / mg blocks extentsfrom user_segments where segment_name like TEMP% ;SEGMENT_NAMESEGMENT_TYPEMGBLOCKSEXTENTSTEMP_JPTABLETEMP_JP_IDXINDEX
A
alter table temp_jp add(col varchar ( ) default THIS IS TO TEST THE ROW CHAINING ISSUE WITHMOVE MAND AND HOW THE DATA IS SPREAD BEFORE AND AFTER THE MOVE MAND IN EACH BLOCK OF THE TABLE );
A
*** yze table temp_jp pute statistics;
A
select table_name num_rows chain_cnt from user_tables where table_name= TEMP_JP ;TABLE_NAMENUM_ROWSCHAIN_CNTTEMP_JP
A
select segment_name segment_type bytes/ / mg blocks extentsfrom user_segments where segment_name like TEMP% ;SEGMENT_NAMESEGMENT_TYPEMGBLOCKSEXTENTSTEMP_JPTABLETEMP_JP_IDXINDEX
A
declarebeginfor c in (select DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID) blockmax(rowid) max_rowidfrom temp_jp group by DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID)) loopfor c in (select rowid DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID) blockfrom temp_jpwhere DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID)=c block) loopif ((c block = c block)and (c rowidc max_rowid)) then delete from temp_jp where rowid = c rowid; end if; end loop; end loop;mit; end;/
A
select dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid)count(*)from temp_jpgroup by dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid)order by dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid);DBMS_ROWID ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID)COUNT(*)
A
*** yze table temp_jp pute statistics;
B
select table_name num_rows chain_cnt from user_tables where table_name= TEMP_JP ;TABLE_NAMENUM_ROWSCHAIN_CNT TEMP_JP
A
select index_name status from user_indexes where table_name= TEMP_JP ;INDEX_NAMESTATUS TEMP_JP_IDXVALID
A
alter table temp_jp move tablespace users;
A
select index_name status from user_indexes where table_name= TEMP_JP ;INDEX_NAMESTATUS TEMP_JP_IDXUNUSABLE
A
select segment_name segment_type bytes/ / mg blocks extentsfrom user_segments where segment_name like TEMP% ;SEGMENT_NAMESEGMENT_TYPEMGBLOCKSEXTENTS TEMP_JPTABLETEMP_JP_IDXINDEX
A
select dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid)count(*)from temp_jpgroup by dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid)order by dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid);DBMS_ROWID ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID)COUNT(*)
AA
*** yze table temp_jp pute statistics; *** yze table temp_jp pute statistics*ERROR at line :ORA : index GZBGQT TEMP_JP_IDX or partition of such index is in unusable state
AB
alter index TEMP_JP_IDX rebuild online;
AC
*** yze table temp_jp pute statistics;
A
select table_name num_rows chain_cnt from user_tables where table_name= TEMP_JP ;TABLE_NAMENUM_ROWSCHAIN_CNT TEMP_JP
A
select index_name status from user_indexes where table_name= TEMP_JP ;INDEX_NAMESTATUS TEMP_JP_IDXVALID
测试B
shrink操作怎样影响一个表的Oracle块中行链接和数据分配
B
drop table temp_jp;
B
create table temp_jp(col number( ) col varchar ( )) tablespace users;
B
declare begin for i inloop insert into temp_jp values(i RAMA ); end loop; mit; end; /
B
select dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid)count(*)from temp_jpgroup by dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid)order by dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid);DBMS_ROWID ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID)COUNT(*)rows selected
B
create index temp_jp_idx on temp_jp(col ) tablespace users;
B
select segment_name segment_type bytes/ / mg blocks extentsfrom user_segments where segment_name like TEMP% ;SEGMENT_NAMESEGMENT_TYPEMGBLOCKSEXTENTSTEMP_JPTABLETEMP_JP_IDXINDEX
B
alter table temp_jp add(col varchar ( ) default THIS IS TO TEST THE ROW CHAINING ISSUE WITHMOVEMAND AND HOW THE DATA IS SPREAD BEFORE AND AFTER THE MOVE MAND IN EACHBLOCK OF THE TABLE );
B
*** yze table temp_jp pute statistics;
B
select table_name num_rows chain_cnt from user_tables where table_name= TEMP_JP ;TABLE_NAMENUM_ROWSCHAIN_CNTTEMP_JP
B
select segment_name segment_type bytes/ / mg blocks extentsfrom user_segments where segment_name like TEMP% ;SEGMENT_NAMESEGMENT_TYPEMGBLOCKSEXTENTSTEMP_JPTABLETEMP_JP_IDXINDEX
B
declarebeginfor c in (select DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID) blockmax(rowid) max_rowidfrom temp_jp group by DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID)) loopfor c in (select rowid DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID) blockfrom temp_jpwhere DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID)=c block) loopif ((c block = c block) and (c rowidc max_rowid)) thendelete from temp_jp where rowid = c rowid;end if;end loop;end loop;mit;end;/
B
select dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid)count(*)from temp_jpgroup by dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid)order by dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid);DBMS_ROWID ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID)COUNT(*)rows selected
B
*** yze table temp_jp pute statistics;
A
select table_name num_rows chain_cnt from user_tables where table_name= TEMP_JP ;TABLE_NAMENUM_ROWSCHAIN_CNTTEMP_JP
B
select index_name status from user_indexes where table_name= TEMP_JP ;INDEX_NAMESTATUSTEMP_JP_IDXVALID
BA
alter table temp_jp enable row movement;
BB
alter table temp_jp shrink space cascade;
B
select index_name status from user_indexes where table_name= TEMP_JP ;INDEX_NAMESTATUSTEMP_JP_IDXVALID
【oracle怎么move Oracle怎么读】B
select segment_name segment_type bytes/ / mg blocks extentsfrom user_segments where segment_name like TEMP% ;SEGMENT_NAMESEGMENT_TYPEMGBLOCKSEXTENTSTEMP_JPTABLETEMP_JP_IDXINDEX
B
select dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid)count(*)from temp_jpgroup by dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid)order by dbms_rowid rowid_relative_fno(rowid)dbms_rowid rowid_block_number(rowid);DBMS_ROWID ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID ROWID_BLOCK_NUMBER(ROWID)COUNT(*)
B
*** yze table temp_jp pute statistics;
B
select table_name num_rows chain_cnt from user_tables where table_name= TEMP_JP ;TABLE_NAMENUM_ROWSCHAIN_CNTTEMP_JP
B
select index_name status from user_indexes where table_name= TEMP_JP ;INDEX_NAMESTATUSTEMP_JP_IDXVALID
在对temp_jp表进行move操作之后 所有的记录被压缩进一个oracle块中 在temp_jp表中的行链接问题被完全解决了
shrink不能完全解决表中行链接问题 表中留下的 条记录被扩展到这个表的 个oracle块中
lishixinzhi/Article/program/Oracle/201311/17804
关于oracle怎么move和Oracle怎么读的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读