辅导:PL/SQLDeveloper导出分区索引脚本
来源:优易学  2011-9-30 13:24:03   【优易学:中国教育考试门户网】   资料下载   IT书店

  不准确分析及规避方法
  1 案例回访
  硬件环境:IBM XSERIES 3650
  操作系统:Windows2003标准版+Sp02
  数据库版本:Oracle9.2.0.1
  PL/SQL Developer版本:7.0.2.1076
  由于业务需要,需先drop一张分区表T_SMS,再重建此表,要求表结构、索引等完全一致。但当时开局版本一时无法找到,故决定利用PL/SQL Developer工具“View SQL”获取到的SQL语句来重建分区表。(此分区表按天进行分区,且由于每天数据量庞大,故每天凌晨都会truncate上个月的数据,保证表中最多只保留30天数据。)
  重建表后第二天发现此表索引失效,导致无法进行insert等操作。经过分析,truncate分区操作最可能造成索引失效。但此表建立的是本地分区索引,按天truncate操作后,Oracle会自动重建本地分区索引,不应该需要手工干预,且以前此表没有出现过索引失效的问题。故初步判断可能是新旧表结构不同造成,立即查看此表索引类型,发现索引并不是本地索引,且从PL/SQL Developer工具中导出的建索引语句中也并不是本地索引。
  那为何原表索引为本地分区索引,利用PL/SQL Developer工具导出脚本后索引类型就改变了呢?是不是PL/SQL Developer工具在导出索引脚本方面存在bug?
  2 案例分析
  刚才已经通过查看当时建表语句即可定位为PL/SQL Developer工具导出的脚本问题,我们可以再通过以下几个试验来验证一下。
  2.1 建索引时加local关键字
  (1)建索引语句如下:
  create index T_SMS_IDMONTHDAY on T_SMS (MONTHDAY)
  local tablespace SMS_DAT;
  (2)利用PL/SQL Developer工具“View SQL”获取的建索引脚本如下:
  create index T_SMS_IDMONTHDAY on T_SMS (MONTHDAY);
  (3)分析:
  可见,建本地分区索引后再利用PL/SQL Developer工具导出脚本即变为了全局索引,索引类型发生了变化。
  2.2 建索引时不加local关键字或加global关键字
  (1)建索引语句如下:
  create index T_SMS_IDMONTHDAY on T_SMS (MONTHDAY)
  [global] tablespace SMS_DAT;
  (2)利用PL/SQL Developer工具“View SQL”获取的建索引脚本如下:
  create index T_SMS_IDMONTHDAY on T_SMS (MONTHDAY)
  tablespace SMS_DAT
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
  initial 64K
  minextents 1
  maxextents unlimited
  );
  (3)分析:
  可见,建索引时无论不加local关键字还是加global关键字再利用PL/SQL Developer工具导出的脚本都变为了全局索引,同时多了些存储相关的选项。
  2.3 分别利用PL/SQL Developer 工具的“Oracle Export”、“SQL Insert”、“PL/SQL Developer”三种方式导出
  通过导出后再导入的方式来验证,只有“Oracle Export”方式导出再导入后,表结构和索引结构没有发生变化,另两种方式都改变了索引类型。

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训