最近需求涉及到乙個儲存實時資料的功能,使用oracle資料庫。
儲存的資料量不大,但是覆蓋會比較頻繁。
造成了乙個就幾萬資料的表,序列可能都達到千萬了。
這個在oracle環境下其實還好,但是需要相容pgsql環境,使用了serial自增序列,最大21億,因此了解了下關於重置序列的方式。
方案一:
先drop再create
優點:簡單
缺點:在服務執行過程中執行存在風險
方案二:
利用負數步長將序列值減小,再恢復步長為1
此次使用方案二在程式中定期重置序列
儲存過程樣例如下:
create or replace procedure seq_reset
as num number(10);
sql varchar2(100);
begin
execute immediate 'select seq_test.nextval from dual' into num;
if num > 10000000
then
num:=-(num - 1);
sql:='alter sequence seq_test increment by '|| num;
execute immediate sql;
execute immediate 'select seq_test.nextval from dual';
execute immediate 'alter sequence seq_test increment by 1';
end if ;
end seq_reset;
/
重建ORACLE資料庫索引
declare str varchar2 400 begin 重建oracle索引 for tmp idx in select tablespace name,owner,table name,index name from all indexes where owner hnacms and te...
重建索引的乙個小技巧
摘自丁奇mysql實戰45講 create table t id int primary key,k int notnull name varchar 16 index k engine innodb 對於該錶t,如果要重建索引k,sql語句可以這麼寫 alter table t drop inde...
重建資料庫表所有索引
重建資料庫表所有索引 2006 06 12 先選擇要修復的資料庫 declare name varchar 100 所有使用者表游標 declare authors cursor cursor for select name from sysobjects where xtype u order b...