Oracle 大表创建索引
祖仙教小凡仙 海鲨数据库架构师
有个2亿记录的表,发现需要添加一个联合索引,结果就采用普通的create index index_name on tablename (entp_id,sell_date),结果悲剧了,把所有的DML语句都阻塞了,导致系统不能正常使用,还好是晚上10点,用户不是非常多,1个小时候,索引结束,阻塞解决;上网查了一下,如果加上 online参数后,就可以在线做索引,而不需要阻塞所有的DML语句,血的教训,拿出来与各位共勉,
创建测试表
* create table t_test
* (
* col1 number,
* col2 number
* );
造测试数据(根据自己机器具体情况估计需要的数据量,使创建索引的时间大概在20-30秒)
insert into t_test
select rownum col1, rownum col2 from dual
connect by rownum<10000000;
commit;
create index
会话1:
SQL> set time on
10:22:01 SQL> set timing on
10:22:02 SQL>
--获取 会话1 sid
10:22:04 SQL> select sid from v$mystat where rownum=1;
SID
144
Elapsed: 00