一. 场景: 广西电信生成环境要求将CMCS,TAS,BCDL三个系统目前的各自实例上的表,索引分别存放在不同的表空间.
二. 将表和索引分开存放在不同的表空间好处:
1. 分而治之管理.
2. 减少热点,提高访问效率: 因为正常建表和索引的时候如果不指定特定的表空间,表和索引都将存储同一个表空间(用户默认的表空间中).并且某一条行记录和行记录对应的索引可能在同一个块(block)上, 在操作(包括增,删,改查)这条数据的时候,同时也要操作(包括增,删,改查)对应的索引,由于索引和记录在同一个块上, 会造成这个块称为热点. 将索引和表分别存放在不同的表空间可以减少热点.
3. 提高i/0访问速度: 不同的表空间可以建在不同的磁盘上,一个操作同时从不同的磁盘读取,操作数据比在同一个磁盘上快
三. 将现有实例某一个用户拥有的表,索引分开到不同的表空间具体操作如下:
1. 创建索引所在的表空间.
用dba用户登录营收稽核系统所有的oracle实例的sqlplus.执行下面的语句.
create tablespace tas_gx_index_ts datafile 'F:/oradata/tas_gx_index_ts.dbf' size 2048M autoextend on next 1024M maxsize unlimited;
注: 上面的语句中"F:/oradata/" 请修改成适当的路径.
2. 用tas用户登录sqlplus.创建并且执行下面的存储过程.将索引转存到表空间 tas_gx_index_ts中.
create or replace procedure RebuildIndex
as insertStr varchar2(500);
indexName varchar2(50);
cursor mycur is
select distinct d.index_name
from user_indexes d where d.table_name not like '%$%';
begin
open mycur;
loop
fetch mycur into indexName ;
exit when mycur %notfound;
insertStr := 'alter index ' || indexName || ' rebuild tablespace tas_gx_index_ts nologging ' ;
execute immediate insertStr;
end loop;
close mycur;
end;
/exec rebuildindex ;