Oracleのシーケンスとは
- Oracle Sequenceは、ユーザーが作成したオブジェクトであり、複数のユーザーが共有して一意の整数を生成できます。
- シーケンスの最も一般的な使用法は、テーブルに主キー列を生成することです。
- シーケンスはoracle内部ルーチンによって生成されるため、心配する必要はありません。開発者はシーケンス生成ルーチンを生成する必要がないため、tim3を節約できます
- 連番ジェネレーターは、増減するように構成できます
- データディクショナリにのみ存在し、制限または繰り返し可能(サイクル)にすることができます。
- シーケンスを作成するには、シーケンス作成権限が必要です
シーケンスの作成は
を使用して行われます CREATE SEQUENCE
[開始] [増分] [NO / MINVALUE] [NO / MAXVALUE] [NO / CYCLE] [NO / CACHE];
|
各値の説明
シーケンスの初期値を定義します(デフォルト1 )、 |
増加または減少レベルを定義します(デフォルト1 )、 |
メモリに保持されるシーケンス番号のブロックを定義します(デフォルト20 )、NOCACHEは、シーケンスによって生成された番号ごとにデータディクショナリを強制的に更新します |
例
シーケンスtest_techを1から開始 1ずつインクリメント 最大値10000 サイクル キャッシュ20;
シーケンスtest_tech1を作成
1から始めます |
シーケンスの使用方法
シーケンスを使用するには、CURRVALおよびNEXTVAL疑似列を使用するだけです
NEXTVAL疑似列
指定されたシーケンスの連続シーケンス番号を生成するために使用されます
CURRVAL疑似列
ユーザーが生成したばかりのシーケンスを保持します
SELECT TEST_TECH.NEXTVAL FROM DUAL;
SELECT TEST_TECH.CURRVAL FROM DUAL; SELECT TEST_TECH.NEXTVAL FROM DUAL; |
シーケンスを変更する方法
シーケンスの変更を使用してシーケンスを変更できます。
SQL> ALTER SEQUENCE tech_test1 INCREMENT BY 50; |
変更は、シーケンスの将来の使用にのみ影響します。
あなたは所有者であるか、そのシーケンスの変更特権を持っている必要があります
オプションで開始を変更することはできません。このシーケンスでは、削除して再作成する必要があります
シーケンスの変更も検証されます
シーケンスを削除する方法
ビューの削除は、DROPシーケンスコマンドを使用して実行されます。
シーケンスデータを表示するための辞書ビュー
シーケンスの詳細は、USER_SEQUENCES、ALL_ SEQUENCES、またはDBA_SEQUENCESのいずれかを照会することでディクショナリから照会できます。ビューには3つのカテゴリがあります
USER_% | このビューには、ユーザーが所有するオブジェクトの情報のみが含まれます
例 USER_TABLES、USER_TAB_COLS |
ALL-% | このビューには、ユーザーがデータベース内でアクセスできるオブジェクトの情報が含まれています。
例 ALL_TABLES、ALL_TAB_COLS |
DBA_% | このビューには、システム内のすべてのオブジェクトの情報が含まれています。これらは、DBAの役割を持つユーザーがアクセスできる制限付きのビューです。
例 DBA_TABLES、DBA_TAB_COLS |
シーケンス情報に関するDBA_%ビュー | シーケンス情報に関するALL_%ビュー | シーケンス情報に関するUSER_%ビュー | |
dba_sequences |
現在使用されているすべてのシーケンスを一覧表示するには
user_sequencesからsequence_nameを選択します;
データベース内のすべてのシーケンスを一覧表示するには:
dba_sequencesから所有者のsequence_nameを選択します;
現在のユーザーがアクセスできるシーケンスを一覧表示するには:
all_sequencesからsequence_nameを選択します
シーケンスに関するすべての情報を確認するにはどうすればよいですか?
sequence_name、min_value、max_value、increment_by、last_numberを選択します
FROM DBA_SEQUENCES
ここで、OWNER =‘
and sequence_NAME =‘
Oracleシーケンスの現在の値をインクリメントせずに取得する方法
キャッシュが指定されていない場合、last_number列には次に使用可能なシーケンス番号が表示されます
SELECT last_number
FROM user_sequences
WHERE sequence_name =‘ |
ディクショナリビューのスタックを経由せずに、Oracleデータベースからシーケンス定義(DDLステートメント)を抽出する方法
構文:
SQL> set long 1000 SQL> set pagesize 0select DBMS_METADATA.GET_DDL(‘SEQUENCE’、'
|
OracleシーケンスでLASTVALUE値を設定する方法
ALTER SEQUENCE tech_seq_name INCREMENT BY 250;
SELECT tech_seq_name.nextval FROM dual; ALTER SEQUENCE tech_seq_name INCREMENT BY 1; |
Oracleでシーケンスをリセットする方法
多くの方法があります。
a)シーケンスを削除して再作成できます。ただし、これにより、すべての依存オブジェクト(トリガー/ストアドプロシージャなど)が無効になります
b)これらの簡単な手順でリセットできます
ステップ1:シーケンスの最新の値を見つける
tech_seq_name.nextval FROM dual; を選択しますステップ2:最新の値の負の値の増分でシーケンスを変更します ALTER SEQUENCE tech_seq_nameINCREMENTBY-<最新の値>minvalue0; ステップ3nextvalを実行して、ゼロに戻します SELECT tech_seq_name.nextval FROM dual; ステップ4:増分を1に戻します ALTER SEQUENCE tech_seq_name INCREMENT BY 1; 例 SELECT tech_seq_name.nextval FROM dual; ————————————— 250 ALTER SEQUENCE tech_seq_name INCREMENT BY -250; SELECT tech_seq_name.nextval FROM dual; ALTER SEQUENCE tech_seq_name INCREMENT BY 1; |
このリンクで詳細を見つけることができます
シーケンスをリセットする方法
シーケンスのキャッシュの影響
シーケンスは、フェッチパフォーマンスを向上させる目的でキャッシュされます。 RACでは、各インスタンスがキャッシュ値を保存します
次の理由により、キャッシュを使用するときに順番にギャップが生じる可能性があります
- ロールバックが発生します
- システムクラッシュまたはインスタンスクラッシュ
- シーケンスは別のテーブルで使用されています
Oracle12cにはシーケンス用の新機能があります
セッションシーケンス
Oracle Database 12Cでは、シーケンスの作成中に指定できる新しいキーワードSESSION、GLOBALを使用できます。CREATE SEQUENCE test_session_seq START WITH 1 INCREMENT BY 1 SESSION;
CREATE SEQUENCE test_global_seq START WITH 1 INCREMENT BY 1 GLOBAL;
グローバル | セッション |
以前のリリースでよく知られている、標準のシーケンスを作成します。これがデフォルトです。 | 新しいタイプのセッションシーケンスを作成します。これは、セッションの可視性を持つグローバル一時テーブルで使用するように特別に設計された特別なタイプのシーケンスです。セッションシーケンスは、セッション内でのみ一意の範囲のシーケンス番号を返しますが、セッション間では返しません。もう1つの違いは、セッションシーケンスが永続的ではないことです。セッションが終了すると、セッション中にアクセスされたセッションシーケンスの状態も終了します。 |