小弟的oracle库中有约200个表,建库文件由于没有及时更新,版本已经很旧了,将测试库的数据全部清空后,sequence 也要重置,如何做?
从网上找到几个重置sequence 的方法,都是一个一个重置的,有没有批量重置的方法?将所有的sequence一下全部重置,谢谢了

解决方案 »

  1.   

    sequence,
    这个没必要重置吧,他每次自动加1.数据足够大,应该没问题的.如果非要重置,变通的方法是:
    备份库,删除用户,重建用户,重新导入备份文件.注意:表空间不动.
      

  2.   

    删除重建,或写一个过程都行。
    网上现成的过程,你用select sequence_name from user_sequences把序列名查出来,再改下过程就解决了:
    SQL> create sequence seq_1 increment by 1 start with 1 maxvalue 999999999;序列已创建。
    SQL> create or replace procedure seq_reset(v_seqname varchar2) as
      2  n number(10);
      3  tsql varchar2(100);
      4  begin
      5  execute immediate ''''select ''''||v_seqname||''''.nextval from dual'''' into n;
      6  n:=-(n-1);
      7  tsql:=''''alter sequence ''''||v_seqname||'''' increment by ''''|| n;
      8  execute immediate tsql;
      9  execute immediate ''''select ''''||v_seqname||''''.nextval from dual'''' into n;
     10  tsql:=''''alter sequence ''''||v_seqname||'''' increment by 1'''';
     11  execute immediate tsql;
     12  end seq_reset;
     13  /过程已创建。SQL> select seq_1.nextval from dual;  NEXTVAL
    ---------
            2SQL> /  NEXTVAL
    ---------
            3SQL> /  NEXTVAL
    ---------
            4SQL> /  NEXTVAL
    ---------
            5SQL> exec seq_reset(''''seq_1'''');PL/SQL 过程已成功完成。SQL> select seq_1.currval from dual;  CURRVAL
    ---------
            1SQL>