dポイントプレゼントキャンペーン実施中!

いつもお世話になります。

oracleのシーケンスの欠番を確認したいのですが、以下のようにサービス、インスタンスの再起動を試してみたのですが欠番はおきませんでした。

・サービスの再起動
コントロールパネルから、サービスを開いて、「OracleServiceXE」、「OracleXETNSListener」の再起動。
シーケンスをselectした結果、欠番確認できず。

・インスタンスの再起動
コマンドプロンプトを起動し、sqlplusから、sysdbaでoracleに接続。
shutdown、startupコマンドを行い、インスタンスを再起動。
シーケンスをselectした結果、欠番確認できず。

インスタンスの再起動を行えば欠番がおきる、というのをサイトで見たのですが、欠番は起きませんでした。なぜ起きないのでしょうか。
何か手順に不備があるのでしょうか。

alter system文による欠番は確認しています。
しかし、意図的にこのコマンドを発行しなければよいので、確認したいのは、通常運用時、データベースが起因してシーケンスの欠番が発生してしまう、ということです。
再起動などは普通に行うと思うので、その際に欠番が発生することを確認したいのです。

宜しくお願いします。

oracle:Oracle Database 11g Express Edition Release 11.2.0.2.0
OS:Windows Vista Home Promium 64bit

A 回答 (2件)

こんにちわ。



> 元々キャッシュに関してはデフォルトのまま(20)で試してますが、欠番は確認できていません。
> 以前のoracleのバージョンだと欠番されていたが、11gだと起きないものなのでしょうか?
Sequence から採番した時に、SGA (Shared Pool) にCache されるので、
事前に「select seq1.nextval from dual;」とか行って、アクセスしておかないと
Cache されません。
11g (11.2.0.3) で最近確認しましたが、Shared Pool をFlush しただけで普通に
欠番が発生していました。

書き忘れましたが、RAC 環境だったりすると、1Node を再起動しても、もう1Node が
情報を持ってたりするらしく、欠番は発生しませんでした。
    • good
    • 0

こんにちわ。



> なぜ起きないのでしょうか。
Sequence がCache されていないのだと思います。
Default では、Cache されるので
SQL> Create sequence seq1;
SQL> select seq1.nextval from dual;

としてから、インスタンスを再起動してみて下さい。
    • good
    • 0
この回答へのお礼

返答ありがとうございます。

元々キャッシュに関してはデフォルトのまま(20)で試してますが、欠番は確認できていません。
以前のoracleのバージョンだと欠番されていたが、11gだと起きないものなのでしょうか?

お礼日時:2012/08/21 06:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!