| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
不准确分析及规避方法 中国网管联盟bitsCN.com
1 案例回访 网管u家u.bitsCN.com
硬件环境:IBM XSERIES 3650 网管论坛bbs_bitsCN_com
操作系统:Windows2003标准版+Sp02
网管联盟bitsCN_com
数据库版本:Oracle9.2.0.1
PL/SQL Developer版本:7.0.2.1076 网管u家u.bitscn@com
由于业务需要,需先drop一张分区表T_SMS,再重建此表,要求表结构、索引等完全一致。但当时开局版本一时无法找到,故决定利用PL/SQL Developer工具“View SQL”获取到的SQL语句来重建分区表。(此分区表按天进行分区,且由于每天数据量庞大,故每天凌晨都会truncate上个月的数据,保证表中最多只保留30天数据。) 网管网www.bitscn.com
重建表后第二天发现此表索引失效,导致无法进行insert等操作。经过分析,truncate分区操作最可能造成索引失效。但此表建立的是本地分区索引,按天truncate操作后,Oracle会自动重建本地分区索引,不应该需要手工干预,且以前此表没有出现过索引失效的问题。故初步判断可能是新旧表结构不同造成,立即查看此表索引类型,发现索引并不是本地索引,且从PL/SQL Developer工具中导出的建索引语句中也并不是本地索引。 网管下载dl.bitscn.com
那为何原表索引为本地分区索引,利用PL/SQL Developer工具导出脚本后索引类型就改变了呢?是不是PL/SQL Developer工具在导出索引脚本方面存在bug? 网管朋友网www_bitscn_net
2 案例分析 网管联盟bitsCN@com
刚才已经通过查看当时建表语句即可定位为PL/SQL Developer工具导出的脚本问题,我们可以再通过以下几个试验来验证一下。
2.1 建索引时加local关键字
网管联盟bitsCN@com
(1)建索引语句如下:
create index T_SMS_IDMONTHDAY on T_SMS (MONTHDAY) 网管论坛bbs_bitsCN_com
local tablespace SMS_DAT; 网管朋友网www_bitscn_net
(2)利用PL/SQL Developer工具“View SQL”获取的建索引脚本如下:
create index T_SMS_IDMONTHDAY on T_SMS (MONTHDAY);
网管联盟bitsCN_com
(3)分析: 网管u家u.bitsCN.com
可见,建本地分区索引后再利用PL/SQL Developer工具导出脚本即变为了全局索引,索引类型发生了变化。 网管有家www.bitscn.net
2.2 建索引时不加local关键字或加global关键字 网管网www_bitscn_com
(1)建索引语句如下:
网管朋友网www_bitscn_net
create index T_SMS_IDMONTHDAY on T_SMS (MONTHDAY)
[global] tablespace SMS_DAT;
(2)利用PL/SQL Developer工具“View SQL”获取的建索引脚本如下: 网管下载dl.bitscn.com
网管有家bitscn.net
|
0
|
评论加载中…