問題タブ [ora-00054]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
1240 参照

oracle - SQL * Loaderのロード中にトリガーを再度有効にするものを追跡するにはどうすればよいですか?

ログに次のようなメッセージがたくさん表示されているようです。

これは私のローカル開発マシン上にあるので、これらのテーブルに挿入しようとしているものは他にないはずです。この原因を突き止めるにはどうすればよいですか?また、トリガーが再度有効になるのを防ぐ方法はありますか(少なくとも、スクリプトのどこかでエラーが発生するかどうかを確認するため)?

0 投票する
2 に答える
43026 参照

sql - 行が更新のためにロックされているかどうかを確認するにはどうすればよいですか?

行がOracleで更新のためにロックされているかどうかをテストできる方法はありますか?

例として、次のクエリが 1 人のユーザーによって実行されたとします。

THE_ID = 1000別のユーザーで、行がロックされているかどうかを確認したい。更新などを試みると、2 番目のユーザーがブロックされ、待機したままになります (それは望ましくありません)。

また、2 番目のユーザーで次のクエリを実行してみました。

同じ行に 2 つのロックを配置できないため、これは失敗します。そして、そうです。「ORA-00054: リソースがビジーで、NOWAIT 指定エラーで取得します」というメッセージが表示されます。ロックの存在を確認するためにこのエラーを常に当てにすることはできますか、または行がロックされているかどうかを判断するためのより簡単でクリーンな方法はありますか?

ありがとうございました!

0 投票する
1 に答える
2260 参照

oracle - 自律型トランザクションでの Oracle DDL

Oracle データベースで大量の (最大 1000000 までの) SQL ステートメントを実行する必要があります。これらのステートメントは、最後に参照整合性のある状態になる必要があり、エラーが発生した場合はすべてのステートメントをロールバックする必要があります。これらのステートメントは参照順ではありません。そのため、外部キー制約が有効になっている場合、ステートメントの 1 つが外部キー違反を引き起こす可能性がありますが、この違反は後で実行されるステートメントで修正されます。

最初に外部キーを無効にして、すべてのステートメントが実行された後に有効にしようとしました。実際に外部キー違反があったときにロールバックできると思っていました。私は間違っていましたが、Oracle のすべての DDL ステートメントはコミットで始まっていることがわかったので、この方法でステートメントをロールバックする方法はありませんでした。外部キーを無効にするスクリプトは次のとおりです。

いくつかの調査の結果、この場合のように自律型トランザクションで DDL ステートメントを実行することが推奨されていることがわかりました。そこで、自律型トランザクションで DDL ステートメントを実行しようとしました。これにより、次のエラーが発生しました。

ORA-00054: リソースがビジーで、NOWAIT を指定して取得しています

これは、メイン トランザクションがまだテーブルに対して DDL ロックを保持しているためだと推測しています。

ここで何か間違ったことをしていますか、またはこのシナリオを機能させる他の方法はありますか?

0 投票する
5 に答える
151434 参照

sql - ORA-00054:リソースがビジーで、NOWAITを指定して取得します

テーブルを更新している最中のスクリプトを強制終了しました。取得したスクリプトを再実行すると、

ORA-00054:リソースがビジーで、NOWAITを指定して取得します

テーブルがロックされていると思いますか?テーブルのロックを解除するにはどうすればよいですか。前もって感謝します。

0 投票する
2 に答える
653 参照

php - 1 つの PHP/アプリケーション セッションは 1 つの Oracle/データベース セッションに対応しますか?

予期しない動作が発生しています。PHP/OCI8 経由で開始される同期プロシージャがあります。プロセスの最初に、SELECT...FOR UPDATE NOWAIT

これはNOWAIT、ブラウザーがロックされるのを待つのではなく、プロセスが既に実行されているというエラー メッセージをユーザーにすぐに通知するためです。

2 つの別々の PHP セッションを持つ 2 つの別々のコンピューターからプロセスを実行すると、期待どおりの動作が得られますORA-00054: resource busy and acquire with NOWAIT specified

しかし、同じブラウザーで 2 つのタブを開いてプロセスを実行すると、2 番目のタブは最初のタブが終了するまで 30 秒以上待機し、2 番目のタブを実行しますNOWAIT

永続的な接続や接続プーリングは一切使用していません。別の HTTP リクエストで別の PHP=>Oracle 接続を実行すると、別の DB セッションが得られると思いました。そうではありませんか?

更新:私はこれを見つけました: http://wiki.oracle.com/page/PHP+Oracle+FAQの下 #6、OCI8 拡張機能を使用して Oracle に接続するにはどうすればよいですか? それは言います:

スクリプトまたは httpd サーバー セッションで同じユーザー資格情報が複数回使用されている場合、PHP は接続を共有/再利用します。oci_new_connect() 関数を使用して、新しいセッションが使用されるようにすることができます。oci_pconnect() 関数を呼び出して、スクリプトの最後で閉じられない永続的な接続を作成します (次のスクリプトでの再接続がはるかに高速になります)。

ただし、変更しoci_new_connectても問題は解決しません。異なるコンピューター上の異なるセッションは をスローしORA-00054ますが、同じブラウザーの 2 つのタブはアクセスを同期しますが、NOWAIT.

0 投票する
4 に答える
1829 参照

oracle - 大きなデータ ファイルのロード中に ORA-00054 が発生する

大きなデータ ファイル (~ 10 GB) の読み込み中に ORA-00054 が発生します。このエラーは、前のファイルの後に新しいファイルが読み込まれたときに発生します。これを解決する方法はありますか?

0 投票する
15 に答える
1198915 参照

oracle - ORA-00054:リソースがビジーで、NOWAITが指定されているか、タイムアウトが期限切れになっています。

テーブルを更新すると、なぜこのデータベースエラーが発生するのですか?

1行目のエラー:ORA-00054:リソースがビジーで、NOWAITが指定されているか、タイムアウトが期限切れになっています。

0 投票する
1 に答える
790 参照

oracle - OracleOLTPテーブルへの列の追加

アプリケーションの実行中およびビジー状態のときに、Oracle10OLTPデータベースで頻繁に使用されるテーブルにNULL可能列を追加しようとしています。null許容列の追加はデータディクショナリの変更にすぎないため、テーブルロックは短時間しか保持されません(システムで処理できます)。

問題は、私ALTER TABLEがこれで失敗することが多いということです:

私の現在のアプローチは、テーブルにロックがなくなるまで変更を実行して、変更をぶち壊すことです。つまり、SQL * Plusでこのようなスクリプトを完全に実行することはできませんが、各ステートメントをコピーして貼り付け、機能することを確認する必要があります。

もっと良い方法はありますか?

0 投票する
2 に答える
20429 参照

sql - ORA-00054テーブルの削除時にリソースがビジーです

誰かがこのエラーを説明できますか?

ORA-00054:リソースがビジーで、NOWAITが指定された状態で取得します

このエラーはで発生しましたDROP TABLE。そのため、プロシージャとパッケージはコンパイルされていません。

0 投票する
1 に答える
7770 参照

sql - テーブルを変更して、テーブル ロックを有効にします。およびORA-00054

alter table disable table lock 句を使用して、誤ってテーブルのロックを無効にしました。次のステートメントを使用してテーブル名を変更したいので、ロックを有効にします。

SQL> テーブル account.acctbk_payment_seq を変更すると、テーブル ロックが有効になります。alter table account.acctbk_payment_seq enable table lock * 1 行目のエラー: ORA-00054: リソースがビジーで、NOWAIT を指定して取得するか、タイムアウトが期限切れになりました

理想は?

お返事ありがとうございます。たとえば、ora 1120:

ORA-00054: リソースがビジーで、NOWAIT を指定して取得するか、タイムアウトになりました