• ベストアンサー

Oracle8iで順序の値のリセット

Oracle8.1.5上で現在稼動している順序があります。 わけあってこの値をスタート時の値1にリセットしたいのです。 どのような方法があるでしょうか? DROP SEQUENCEしてCREATE SEQUENCEは避けたいのですが どなたかご存知の方お願いします。

  • Oracle
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

DROP SEQUENCEしてCREATE SEQUENCEは避けたい →理由はNo2の方がおっしゃっているようにinvalidが付く  可能性があるからでしょうか? どちらにしろ完全に業務が停止しているときにやらないと 非常に危険ですので、あまりALTERはオススメしませんが 権限など何か他の理由などでDROP,CREATEができないのであれば 1. select TEST_SEQ.currval from dual; 100 2. ALTER SEQUENCE TEST_SEQ MAXVALUE 100 CYCLE; これでもし万が一、1個目のSQLと2個目のSQLの間に誰かが シーケンスを更新したとしても2個目のSQLはエラーになってくれるはずです。 (2のSQL実行後、現在のシーケンス値が1に戻ったのを確認したら  必要に応じてCYCLEはNOCYCLEに直して置いてくださいね。)

AnotherCuba
質問者

お礼

なるほど、そうですねえ。 サイクリックのMAX値をカレント値にすれば戻りますもんねえ。 現在すでにCYCLE指定なんですが MAXVALUEを一時的に替えて1に戻します。 ほんとうにありがとうございました。

その他の回答 (2)

回答No.2

alter sequence TEST_SEQ increment -10 nocache; select TEST_SEQ.nextval from dual; alter sequence TEST_SEQ increment 1 cache 20; のように、一時的に増分値を負の数に変更することで、カレントを戻すことが可能です。 drop and createの場合、依存オブジェクトがinvalidになりますが、alterを使った手法の場合 invalidになりません。 ただし、シーケンスのリセットを行う場合、シーケンスを誰も利用しないタイミングでないと 値をコントロールするのが難しいです。

AnotherCuba
質問者

お礼

ありがとうございます。 increment by でマイナス値とは思いもつきませんでした。 いろんな手法があるんですねえ。 はいサービス外時間に行なうことにします。

回答No.1

シーケンスを1に戻す方法はありません。 必ず、DROP,CREATEが必要です。 Oracleのサポートに加入すれば見れるオフィシャルなページでも 明文化されています。残念ですがおあきらめください。

関連するQ&A

  • sequenceの値の表示

    Oracle9iを使用しています。 create sequence ClientNum start with 101; という生成プログラムを作りました。 これの値を表示させたいのですが、どうやったらいいのでしょうか。

  • PL/SQLの文法

    oracle8,windows95を使用しています。 PL/SQLで、シーケンスを削除して再度作成するという処理を書きたいのですが、PL/SQLはまったくの素人のためアドバイスをいただけたら、と思います。 実行したいのは、以下のSQL文です。 1) SQL>DROP SEQUENCE SQC_TEST 2) SQL>CREATE SEQUENCE SQC_TEST INCREMENT BY 1 START WITH 1 MAXVALUE 9999 MINVALUE 1 CYCLE; これを、PL/SQLで実行するにはどうかけばよいでしょうか? CREATE OR REPLACE PROCEDURE HC_CREATE_SEQ BEGIN DROP SEQUENCE SEQ_車両申請 FROM DUAL; CREATE SEQUENCE SQC_TEST INCREMENT BY 1 START WITH 1 MAXVALUE 9999 MINVALUE 1 CYCLE; END; / と書いてみましたがコンパイルに失敗しましたとおこられてしまいます。 ヒントだけでもいただけたら、と思います。 よろしくお願いいたします。

  • オラクルでエラー「ORA-00052」が起こります

    現在、ユーザーを削除して、また作成するようなことをおこなっています。 drop user を行った際に、 ORA-00052:最大エンキューリソース数 484が発生しました というエラーが出てしまいます。 これを回避する方法を求めています。 現象としては、まず1回目、drop user を行って create userを行います。 このときはエラーは発生しません。 次に同じ環境で、もう一回drop user を行うと、表題のエンキューエラーが 発生してしまいます。(よって、create userは成功しません) (1)エンキューリソースというのは、一回drop user を行えば開放されるものなのでしょうか?また、その状況(ロックと開放の状況)をウォッチすることなどは可能なのでしょうか?(そもそもなぜ不足してしまうのでしょうか??) (2)ENQUEU_RESOURCESという初期化パラメータの値を増やせばいいと 「oracle8i リファレンス・マニュアル」には書いてあったのですが いったいどれぐらい増やせばいいのでしょうか?またその値が妥当であるという判断は、どうやって下せばいいのでしょうか? (3)ENQUEU_RESOURCESを増やすとすると、初期化パラメータファイル?とやらを 編集すればよいのでしょうか?? たくさん書いてしまいましたが、ぜひともご教授ねがいます。 まだまだoralceを勉強し始めたばっかりで・・・・。

  • oracleの順序のexp/impにつて

    oracleの順序のEXP/IMPについてです。 oracle 11gでlinuxなのですが、別サーバ上にあるAというスキーマ(例:hon1)の シーケンスを、別サーバ上にあるBというスキーマ(例:dev1)に、expdp/impdp コマンドで、sequenceのみを、export/importをしようとしています。 expdpコマンドでsequenceのみはexportできたのですが、impdpコマンドで、sequence をimportするとエラーがでて失敗します。 SEQUENCEの処理はできるのですが、OBJECT_GRANTの作成でエラーで失敗します。 別環境の別スキーマに入れようとしているので、権限の作成で失敗するのは当たり前 かもしれませんが。 回避する方法、grantを実行しない方法はないのでしょうか。 また、表のimportみたいに、記述したテーブルのみをimportするような、ターゲットの sequenceのみをimportするような記述はできないのでしょうか。 宜しくお願い致します。 環境:oracle 11g、Linux

  • oracleのシーケンスについて

    こんにちは。oracleのシーケンスについて教えてください。 次のようなシーケンスを作成します。 CREATE SEQUENCE SQC_TEST INCREMENT BY 1 START WITH 1 MAXVALUE 999999 MINVALUE 1 CASHE 20 CYCLE / この時、キャッシュ分の20という値は、いつどこでクリア?されるのか知りたいのです。 一番最初はシーケンスをクリエイトした時にキャッシュが20確保されると思うのですが、次にキャッシュが確保されるタイミングっていつなんでしょう? 最初の20を使い果たした時?それともシーケンスを作成してあるインスタンスをリブートした時?? というのは、設定したシーケンスが、実際発番していないのに一日ごとに20ずつカウントされていってるので原因をつきとめたいのです。 とりあえずはNOCACHEに設定してありますが、原因がわかれば、と思い質問させていただきました。 何かアドバイスいただけたらと思います。宜しくお願いいたします。

  • Oracle 8i に入っている値が、おかしい(指定した値ではない)

    お世話になります。 現在、Oracle8i を使っています。会社で、社員情報メンテナンス表を作っているんです。社員番号を主キーとして扱っています。 そのテーブルを Java を使って扱っているんですが、この社員番号を検索して、帰ってくる値が、登録(INSERT 文) の時の値と違います。全く違うんではなく、見た目は一緒ですけど、コンピュータで扱うと違うという返事が返ってきます。 具体的にいうと、1 で登録した番号を、SELECT 文で返ってきた値を Java で 1 と同じか?と聞いてみると、違うとコンピュータが返します。僕のプログラムがおかしいのか?と思い、家に返って ほかのDB を使って、試したところちゃんとできました。 Java のプログラムを使って、DB からかえってきた値をコンソール画面に表示したら、ちゃんと「 1 」と表示されます。しかし、その値が、「 1 」と等しいか? Javaで調べるプログラムを作ってみると、違うという答えが返ってきます。 誰かわかる方は、ご返事ください。よろしくお願いします。

  • IEのお気に入りの順序が・・・

    IEを使用しています。 左に表示している「お気に入り」の順序が、まれにリセットされてしまいます。 上下の順序を入れ替えようとした時によく起こるのですが、 どんな操作をしてしまったのかは毎回わかりません。 原因、対策がわかる方いましたら教えて頂けませんか?

  • Oracle8iのインストールの書籍を探しています。

    Oracleをこれから初めて触ろうとしているものです。 ある業務ソフトのデータベースがOracle8i(R8.1.7)であり、 現在はスタンドアロン環境で使用しているものを、 サーバー/クライアント環境に変えてくれという指令を受けました。 しかし、実験的に「Oracle8i Enterprise Edition」の インストールを試みたのですがうまくいきませんでした。 そこで、インストール方法が分かりやすく解説している以下の書籍をインターネットにて見つけたのですが、どの検索エンジンでも「在庫切れ」であり、入手困難のようです。 書籍名: Oracle8iデータベース入門 インストール編 著者 : 山田 精一 他 訳者 : 菅原 剛 著 出版社: アスキー どなたかこの本に匹敵するような分かりやすい書籍をご存知でしたら、教えていただけないでしょうか。 よろしくお願いいたします。

  • Oracle製品DataMartについて

    いつもお世話になっております。 カテゴリ違いでしたら、申し訳ございません。 現在稼動しているシステムでOracle製品のDataMartBuilderというツールを使用しているのですが、製品の販売が1998年で、Oracle社のHPを検索してもヒットしなかったのですが、ツールの詳細な機能をご存知な方居られましたら、宜しくご教授お願い致します。 併せてDataMartSuiteの最新バージョンを教えて頂ければ幸いです。

  • SEQUENCEのEXPORT

    当方ではORACLE8.0.5 OSはsolaria2.6を使用しています CREATE SEQUENCEで作成したものを 別のDBに移行したいのですが移行先のDBにもすでに同じ名前のSEQUENCEがあるため まずこれを削除してから移行元のDBのSEQUENCEをIMPORTしようと考えております 質問ですがUSERに作成されたSEQUENCEをEXPORTする方法を教えてください よろしくお願い致します。