插入时没报错,我用的是存储过程入库: 存储过程:create or replace procedure Insert_Test(T_ID in varchar2,,P_Date in varchar2) as RecordNum Number; begin select count(*) into RecordNum from Test where TID = T_ID; if RecordNum=0 then insert into Test (TID,PDate) values (T_ID,P_Date); commit; end if; exception when others then null; end Insert_Test;
select count(*) from Test where TID = T_ID; insert into Test (TID,PDate) values (T_ID,P_Date); commit;拿出来执行一下,看报什么错,发上来
老大,你这句是否是要插入壹条数据试一下吧?我在pl/sql develop中插入了壹条数据,没有反应,即没报什么错,但也没有数据!用的是:insert into test(tid,pdate) values ('2004122812121215300011','2004-12-28');
我在一边用程序写表,一边执行select count(*) from Test,报以下的错: 索引'SYSTEM.SYS_C002726'或这类索引的分区处于不可用状态
应该重建索引,但是我的索引是自动生成的,我必须要查数据库才知道索引名称阿,我在程序中怎么重建呢?UPDATE GLOBAL INDEXES;怎么用啊?
ALTER TABLE tbl SPLIT PARTITON Part20041225 AT TO_DATE (‘2004-12-24’,’YYYY-MM-DD’) INTO (partition Part20041224, partition Part20041225) UPDATE GLOBAL INDEXES;最好建表时显示的指定索引名称,分区索引的名称和表分区名称是一样的。
2、split怎么用啊?
2,ALTER TABLE tbl
SPLIT PARTITON Part20041225
AT TO_DATE (‘2004-12-24’,’YYYY-MM-DD’)
INTO (partition Part20041224, partition Part20041225);
3,在对数据表做分区操作时,会产生以个表上的排它锁
1,user_extents 存的是segment的extents信息,也就是说你的partition分配了多个extents就有多少行记录,你不能从这看到PARTITION_NAME 就以为是重复的啊,你看看此表EXTENT_ID字段,它们是不同的EXTENT。你建表的时候没试过么?同一表下面建同名的partition是会报错的,绝对不可以的。3,http://tahiti.oracle.com/ 仔细看文档。分区操作不是经常性发生的,等分区操作结束再对表做其它操作。
3、我的数据库数据量比较大,希望一天一个分区,而我们又要求尽量少到现场维护,所以我必须在程序中根据数据日期自动分区。我第一次搞oracle数据库,不是很懂,大哥帮帮忙啊!
http://tahiti.oracle.com/这个网站打不开啊!
还要请教一个问题啊:对于一个大表(纪录可能有几千万或上亿条)做分区,每个分区表可能记录数不是很多,查询的时候可能快些。但插入呢?插入到这个表的时候,速度是否也很快呢?还有怎么建索引阿?我的是需要程序自动建立或删除的!谢谢!
2,你一天多少数据量?要按天切?
觉得你对分区的理解有问题,每个分区数据不多,干吗还要按天切分区。如果你的一个查询跨多个分区,速度会比单查一个分区速度慢。如果你要小范围内的搜索,可以用索引啊。
建议你一次多建立几年的分区,每个分区内最好要有一定的数据,老的数据可以到时候把分区drop掉,再合理接力索引。分区本身对数据的插入影响不大,到是一些分区索引在大数据量插入时会有效率的影响。至于怎么建立索引,这和你具体的表结构,和具体应用查询有关。
http://tahiti.oracle.com/这是ORACLE官方文档,在这你可以的到你学要所有基础知识,而且具有权威性。
如果建立了local分区索引会有一些影响,但大部分时候还是可以接受的。
3,按你的应用,可以用日期作为分区键做range分区,按天先建立几个月的分区。过期的分区可以直接直接DORP,
不会影响你的插入的(你可看到你分区的时候用的都是LESS THAN,数据大不了就是分在第一个分区上而已么)
4,添加、删除分区表后全局索引需要重建,local索引可以自动管理。还可以把分区键做一个分区索引
,另外如果还有经常出现在WHERE条件中且选择性强的字段也可以考虑建立适当的索引,随需应变吧:)
把你create,drop和insert语句发出来看看
存储过程:create or replace procedure Insert_Test(T_ID in varchar2,,P_Date in varchar2)
as RecordNum Number;
begin
select count(*) into RecordNum from Test where TID = T_ID;
if RecordNum=0 then
insert into Test (TID,PDate) values (T_ID,P_Date);
commit;
end if;
exception when others then null;
end Insert_Test;
insert into Test (TID,PDate) values (T_ID,P_Date);
commit;拿出来执行一下,看报什么错,发上来
索引'SYSTEM.SYS_C002726'或这类索引的分区处于不可用状态
你的表上有一个主键相关的全局非分区索引,
做过分区的操作后需要重建此索引的。你用的ORACLE是什么版本的?
SPLIT PARTITON Part20041225
AT TO_DATE (‘2004-12-24’,’YYYY-MM-DD’)
INTO (partition Part20041224, partition Part20041225)
UPDATE GLOBAL INDEXES;最好建表时显示的指定索引名称,分区索引的名称和表分区名称是一样的。
太精彩了
收藏hippie1024(痞子)牛人也。佩服佩服学习ing