0

免責事項:並べ替えられたデータが必要な場合、SQLで「ORDERBY」を使用しないのは悪いことです。

私は現在、奇妙な問題を抱えているPro*Cプログラムをサポートしています。奇妙な問題の考えられる原因の1つは、元の開発者(昔から)が、プログラムロジックがそれに依存しているにもかかわらず、SQLでORDERBYを使用していないことである可能性があります。このプログラムはここ数年正常に機能しており、ごく最近問題が発生し始めました。

奇妙な問題をORDERBYの間違いに固定しようとしています(SolarisからLinuxへの最近の移植のような他の原因の候補がありました)。

古いソート順を変更した可能性のある、データベース側のどの​​ような影のようなものを見る必要がありますか?データファイルなどのようなものですか?Solaris上のPro*Cで結果セットを魔法のように並べ替えた経験がある人はいますか?

ありがとう!

4

2 に答える 2

2

プログラムが結果が返される順序を気にし、送信されたクエリにORDER BY句がないことを知っているので、理解しようとするのではなく、問題を修正するだけではない理由があります結果の実際の順序が変更された可能性があるかどうか。既知の問題を修正し、ORDER BYあなたが持っていた「奇妙な問題」が消えた場合、それは「奇妙な問題」が実際には欠落していることによって引き起こされているというかなり良い証拠を提供しますORDER BY

残念ながら、結果の順序が変わる原因となった可能性のあるものがたくさんあり、その多くを追跡することは不可能かもしれません。最も明白な原因は、実行計画の変更です。これは、統計が変更されたか、統計が十分に変更されなかったか、パッチが原因か、初期化パラメータが変更されたか、クライアント構成が変更されたことが原因である可能性があります。PLAN_HASH_VALUEAWR(自動ワークロードリポジトリ)の使用が許可されている場合は、に複数の値があるかどうかを確認することで、計画が変更されたという証拠を見つけることができる場合がありますSQL_IDDBA_HIST_SQLSTATさまざまな日に。ある場合でも、異なる計画によって実際に結果が異なる順序で返されるかどうかを把握する必要があります。ただし、クエリプランの変更以外にも、考えられる原因は多数あります。ディスク上のデータの物理的な順序は、誰かがテーブルを再編成したため、誰かがディスク上のデータファイルを移動したため、またはSANがデータを移動することによって何かを自動的に再調整したために変更された可能性があります。一部のデータは、過去に一般的にキャッシュされていた(またはキャッシュされていない)可能性があり、現在はキャッシュされています。Oracleパッチが適用されている可能性があります。

于 2013-03-13T08:27:24.743 に答える
0

ビューを使用して物理テーブルを変更し、そのビューで必要な順序を設定することをお勧めします。

TABLE_NOT_SORTED->名前を->PHYS_TABLE_NOT_SORTEDに変更

CREATE VIEW TABLE_NOT_SORTED 
AS
SELECT * FROM PHYS_TABLE_NOT_SORTED
ORDER BY DESIRED_COLUMNS

コメントへの回答:

この質問とAskTom'sAnswerによると、「ORDER BY」を使用しない場合、Oracleはデフォルトの並べ替えを保証しないため、自由に変更できるようです。もちろん、彼らは絶対に正しいです。並べ替えが必要な場合は、[並べ替え]を使用します。

それ以外は、コードやデフォルトの順序については何も言えません。

于 2013-03-13T08:11:46.393 に答える