(1)测试表
-- Create table
create table RECALL.RECALL_TIMELY_FOX
(
ID NUMBER(16) not null,
LOGIN_TIME DATE,
CN VARCHAR2(50),
CN_MASTER VARCHAR2(100),
GAME_TYPE NUMBER(2) default 1,
LOGIN_IP VARCHAR2(20),
INSERT_TIME DATE default sysdate
)
(2)修改字段大小测试(变大)
--执行10046事件
alter session set events '10046 trace name context forever,level 12';
--修改表字段信息
alter table RECALL.RECALL_TIMELY_FOX modify CN VARCHAR2(100);
--获得当前trace文件生成路径
select tracefile from v$process where addr in (select paddr from v$session where sid in (select distinct sid from v$mystat));
--使用oracle server自带的tkprof工具解析trace文件
tkprof /U01/app/oracle/diag/rdbms/s3megdb/megdb/trace/megdb_ora_9236.trc /home/oracle/alter_test.log
--查看解析后的日志内容如下:
可以看到表上加了一个EXCLUSIVE MODE NOWAIT的锁,但其主要操作的是数据字典表,锁占用时间几乎可以忽略不计,所以几乎不会影响业务。
(3)修改字段大小测试(变小)
alter table RECALL.RECALL_TIMELY_FOX modify CN_MASTER VARCHAR2(90);
可以看到缩短长度的操作,还会以EXCLUSIVE模式锁表,但需要以FIRST_ROWS优化器模式,执行全表扫描,判断已存数据是否有超长的记录,因此相比扩大的操作执行时间会略久,但基本可控。