5

OracleDBServerに基づく高負荷の24時間年中無休のシステムがあります。
クライアントアプリケーションの多くは、パッケージで動作しますpkg1
新しいバージョンのパッケージをその場でインストールする可能性(Oracleの実装またはベストプラクティス)はありますpkg1か?
「リソースビジー」エラーが発生したり、現在のセッションなどが失われたりすることはありませんか?

4

3 に答える 3

7

Oracle 11 を使用している場合は、Edition-Based Redefinition をご覧ください。

于 2012-05-10T13:14:49.380 に答える
1

いくつかのルールを覚えていれば、実稼働環境であっても、データベース パッケージの新しいバージョンをデプロイすることは問題ではありません。

  • 一部のセッションが現在使用している場合、更新されたパッケージ本体をデプロイできません。そのためには、エディションベースの再定義が必要になりますが、私の経験では、それほど頻繁に必要になることはなく、むしろアプリケーションの設計上の欠陥である可能性があります。その上、EBR でさえ、新しいセッションを開始する必要があります。
  • パッケージ ヘッダーを展開すると他の部分に影響しますが、通常、パッケージの更新の 99% は本文に含まれます。
  • セッション情報が失われないようにするには、パッケージ セッション データなしでパッケージを作成します。パッケージ本体コードも、パッケージ変数も、ヘッダーにも本体にも、定数もありません (はい、そうです。CONSTANT 定義はありません。奇妙な状態を作成します)。 reason)、テーブル関数はありません。これらの制限に対する最も簡単な回避策は、これらすべての機能を持ち、ビジネス ロジックをできるだけ少なくする別の「状態」パッケージを用意することです。

これを念頭に置いて、害を及ぼすことなく本番環境でも更新できるパッケージ本体を作成できます。パッケージが実際に使用されている場合、再コンパイルはパッケージのロックを待ちます。最悪の場合、タイムアウトになる可能性があり、再試行する必要があります。

繰り返しますが、これらすべてが役に立たない場合は、再設計が必要で役立つ可能性があります。

于 2015-04-29T10:59:25.080 に答える
0

パッケージが状態を維持せず (グローバル変数なし)、システムがパッケージを 1 ミリ秒間ロックできる限り (操作は 1500 (?) 秒後にタイムアウトします)、ライブで PL/SQL パッケージをデプロイできます。システム。

于 2014-01-03T20:14:50.250 に答える