1

私のアプリケーションでは、500 を超える多数のユーザーが存在する予定です。ユーザーは 1 つのスキーマ オブジェクトのみを扱います。必要な権限を付与しました。私が言ったら:

SELECT * FROM EMP;

「テーブルまたはビューが存在しません」というエラーが表示されるので、次のことを意味します。

  1. オブジェクトの前に所有者名を指定する必要があります。のようSCOTT.EMPに、または
  2. 参照するすべてのオブジェクトのパブリック シノニムを作成できます。

私の懸念は、パブリック シノニムが、約 300 の同時接続を持つ多数のユーザーのパフォーマンスに影響を与える可能性があるかどうかです。最初の方法と 2 番目の方法のどちらを選択する必要がありますか?

4

1 に答える 1

4

パブリックシノニムは非常に特定の目的を果たします。適切な権限を持っていると仮定して、すべてのユーザーがオブジェクトを参照できるようにします。将来、特定のユーザーがオブジェクトを表示する方法を変更したい場合は、パブリックシノニムを使用することはできません。

また、データベース全体の特定のオブジェクト名を使い果たします。ただし、パブリックシノニムが存在するという事実は、同じ名前のオブジェクトを作成することを妨げるものではありません。これは信じられないほど混乱する可能性があります。

たとえば、プロシージャtestとスキーマがあるとしますempテーブルにすでにパブリックシノニムがあるため、実行しようemp.testとしても機能しません。emp

トム・カイトは、これについて多くの記事を書いたようです。

パフォーマンスの面では、プライベートシノニムよりもパブリックシノニムの方がパフォーマンスがわずかに低下することを示唆しているようです。ただし、同義語を使用しない代わりに同義語を使用すると、パフォーマンスがわずかに低下します。これは、最後のすべてのコンピュータが貴重である場合は、同義語をまったく使用しないことを示唆しています。

まとめると、これは、可能であれば公的な同義語を避けるべきであることを意味すると思います。必要な場合はもちろん使用しますが、結局のところ存在しますが、必要ない場合はどうすればよいのでしょうか。構成は明確であり、scott.emp自分自身またはデータベースとコードを初めて使用する誰かによって誤解される可能性なしに、参照しているスキーマとオブジェクトを正確に示します。

クイックポイント。明示的には言いませんが、質問の文言は、すべてのユーザーのスキーマを作成していることを示唆しているようです。これは非常に混乱するようです...

于 2012-04-06T10:15:57.540 に答える