仓酷云
标题:
MYSQL编程:ORA-01502 state unusable毛病成因息争...
[打印本页]
作者:
莫相离
时间:
2015-1-16 22:43
标题:
MYSQL编程:ORA-01502 state unusable毛病成因息争...
与其他数据库相比,MySQL易学易用。毛病|办理
接到开辟职员和营业职员的关照,说一个上岸页面不克不及用了,报错:
2005-01-3113:59:02,721[com.aspire.common.dao.OamUserDAO]--214:select毛病
java.sql.SQLException:ORA-01502state
这个毛病是因为索引生效酿成的,重修索引后,成绩就办理了。
为了弄分明索引为何会生效,和怎样办理,我们做个测试:
起首我们创立一个一般的测试表(非分区表):
SQL>createtablet(anumber);
Tablecreated.
SQL>selecttablespace_namefromuser_segmentswheresegment_name=T;
TABLESPACE_NAME
------------------------------
DATA_DYNAMIC
SQL>
然后,我们创立一个一般索引
SQL>createindexidxtont(a);
Indexcreated.
SQL>insertintotvalues(10);
1rowcreated.
SQL>setlinesize200
SQL>selectindex_name,index_type,tablespace_name,table_type,statusfromuser_indexeswhereindex_name=IDXT;
INDEX_NAMEINDEX_TYPETABLESPACE_NAMETABLE_TYPESTATUS
----------------------------------------------------------------------------------------------------------
IDXTNORMALDATA_DYNAMICTABLEVALID
SQL>
摹拟索引是生效的情形:
SQL>altertabletmovetablespacetools
2/
Tablealtered.
SQL>selectindex_name,index_type,tablespace_name,table_type,statusfromuser_indexeswhereindex_name=IDXT;
INDEX_NAMEINDEX_TYPETABLESPACE_NAMETABLE_TYPESTATUS
----------------------------------------------------------------------------------------------------------
IDXTNORMALDATA_DYNAMICTABLEUNUSABLE
SQL>
我们看到,当利用相似altertablexxxxxxmovetablespacexxxxxxx命令后,索引就会生效。
固然,作为测试,也能够间接利用alterindexidxtunusable;命令使索引生效,比方:
SQL>alterindexidxtunusable;
Indexaltered.
SQL>
在这类情形下,我们向表中拔出数据看看是甚么情形:
SQL>insertintotvalues(11);
insertintotvalues(11)
*
ERRORatline1:
ORA-01502:indexMISC.IDXTorpartitionofsuchindexisinunusablestate
SQL>
我们看到,这时候就呈现了罕见的“ORA-01502:indexXXXXXXXXorpartitionofsuchindexisinunusablestate”毛病。
反省一下索引形态,我们会注重到索引已是“UNUSABLE”了。
SQL>selectindex_name,index_type,tablespace_name,table_type,statusfromuser_indexeswhereindex_name=IDXT;
INDEX_NAMEINDEX_TYPETABLESPACE_NAMETABLE_TYPESTATUS
----------------------------------------------------------------------------------------------------------
IDXTNORMALDATA_DYNAMICTABLEUNUSABLE
SQL>
关于一般表中的分歧索引(非独一索引),我们有两种办法办理这个成绩。
办法一:设置skip_unusable_indexes=true;
SQL>altersessionsetskip_unusable_indexes=true;
Sessionaltered.
SQL>insertintotvalues(11);
1rowcreated.
SQL>commit;
Commitcomplete.
SQL>select*fromt;
A
----------
1
2
3
4
5
10
11
7rowsselected.
SQL>selectindex_name,index_type,tablespace_name,table_type,statusfromuser_indexeswhereindex_name=IDXT;
INDEX_NAMEINDEX_TYPETABLESPACE_NAMETABLE_TYPESTATUS
----------------------------------------------------------------------------------------------------------
IDXTNORMALDATA_DYNAMICTABLEUNUSABLE
SQL>
如今我们看到,这个索引的形态固然仍是“UNUSABLE”可是,经由过程设置“altersessionsetskip_unusable_indexes=true;”,
我们已能够会见这个表了,可是请注重,这类情形下,这个索引是不成用的,也就是说优化器在思索是不是要利用索引时是不思索这个以是的。
办法2:经由过程罕见以是完全办理这个成绩
起首,先设置“skip_unusable_indexes=false”,也就是不跳不对效索引
SQL>altersessionsetskip_unusable_indexes=false;
Sessionaltered.
SQL>
然后重修这个生效的索引
SQL>alterindexidxtrebuild;
Indexaltered.
SQL>selectindex_name,index_type,tablespace_name,table_type,statusfromuser_indexeswhereindex_name=IDXT;
INDEX_NAMEINDEX_TYPETABLESPACE_NAMETABLE_TYPESTATUS
----------------------------------------------------------------------------------------------------------
IDXTNORMALDATA_DYNAMICTABLEVALID
SQL>
我们看到重修索引后,索引的形态就一般了。
如今拔出数据,看看是一般:
SQL>insertintotvalues(12);
1rowcreated.
SQL>commit;
Commitcomplete.
SQL>
看来,重修索引才是办理这类成绩的完全的办法。
人力成本上的节省,MySQL的用户Spacemonkey实验室的首席执行官MitchPirtle如此表示:“维护MySQL使得你不需要一个年薪15万美元的DBA。
作者:
山那边是海
时间:
2015-1-19 21:47
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
作者:
第二个灵魂
时间:
2015-1-26 20:14
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
作者:
简单生活
时间:
2015-2-4 20:28
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
作者:
因胸联盟
时间:
2015-2-4 20:30
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
作者:
不帅
时间:
2015-2-10 07:11
不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?
作者:
飘灵儿
时间:
2015-3-1 01:35
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
作者:
admin
时间:
2015-3-10 11:40
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
作者:
飘飘悠悠
时间:
2015-3-17 06:35
比如日志传送、比如集群。。。
作者:
小女巫
时间:
2015-3-24 00:10
原来公司用过MYSQL自己也只是建个表写个SQL
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2