2011-02-09 51 views
2

私はSQL Serverで広範に作業しましたが、Oracleの経験はほとんどありません。私は、Oracleデータベース内のシーケンスを「クリーンアップ」する作業を与えられており、これを安全に行う方法がわかりません。Oracleシーケンスのクリーンアップ

実際にテーブルの最大値(ID = 105など)を決定する必要があります。それから見て、そのIDの次のシーケンスが何であるかを見てください。それが106なら、すべてが良いでしょう。もし110だったら、それを106に戻してリセットする必要があります。

安全にシーケンスを削除してから再作成することはできますか?それとも既存のプライマリキーを掘り起こすことはできますか?私はこれが問題ではないだろうと推測していますが、私が他の誰かのシステムを取り上げる前に、私は尋ねたいと思っていました。

これは私が一般的にOracleのシーケンスを「クリーンアップ」する必要性について警戒すると思います

Drop Sequence blah.foo_seq 
Create Sequence blah.foo_seq Start WIth 106 Min 1 Max 2147483647 yada yada 
+3

シーケンス値を低下させるために、パラメータBY INCREMENTを変更することであろう失われた権限に対処する必要性を回避し、代替的なアプローチ、使用する。 – cagcowboy

答えて

11

を使用するつもりですコマンドです。 Oracleシーケンスを使用してギャップのない値を生成することはできないため、110がアプリケーションに問題を引き起こす場合は、対処する必要がある大きな問題があります。

シーケンスを削除しても、主キーには影響しません。しかし、シーケンスを参照するオブジェクトを無効にして、権限付与をすべて削除します。シーケンスを再作成した後にコードを再コンパイルすることができます。これは潜在的に問題のある特権を削除することです。あなたが本当に連続した数字が必要な場合は、シーケンスは適切なツールではありませんつまり

ALTER SEQUENCE foo_seq 
    INCREMENT BY -4; 

SELECT foo_seq.nextval 
    FROM dual; 

ALTER SEQUENCE foo_seq 
    INCREMENT BY 1; 
関連する問題