現在、スケジュールされたジョブの完了後にシノニム定義を切り替えるシナリオがあります。このジョブは、偶数または奇数の時間に対応するeven
orの識別子を持つテーブルを作成します。odd
私たちが現在行っていることは次のとおりです。
odd_job:
create foo_odd ...
replace foo_syn as foo_odd
と
even_job:
create foo_even ...
replace foo_syn as foo_even
何が起こっているかというと、通常の生産中にfoo_syn
がロックされた状態になっているということです。したがって、私たちが探しているのは、シノニム定義を交換する本番対応の方法です。
問題は、Oracle 10g でユーザーの中断を最小限に抑えながら、本番レベルのシステムでシノニム定義をどのように交換できるかということです。
コメントから
foo_syn には依存オブジェクトがありますか?
Nofoo_syn
は、私が生成したテーブルへのポインタにすぎません。つまり、このスイッチのために再コンパイルする必要があるプロシージャはありません。
それは本当に奇妙なことのように聞こえます。そのスイッチの目的/使用方法を少し説明できますか?
もちろん。データベースとやり取りするアプリケーションがあり、Java から実行される SQL (ビジネス ロジック クエリ) には への参照がありfoo_syn
ます。データの動的な性質のため、1 時間ごとのスワップにより、リアルタイムに近づけようとするときに重要な新しい結果が得られることが保証されています。これより前は、1 日 1 回で満足するタイプのシナリオでした。
スワップの理由は、動的 SQL (テーブル名に関して) をアプリケーション クエリの一部にしたくないからです。したがって、データベースは、アプリケーションの一部として参照されるシノニムの名前を変更せずに、新しいデータ セットに切り替えます。