2012-04-06 48 views
1

私のアプリケーションでは、500を超えるユーザーが多数存在します.1つのスキーマオブジェクトのみを処理します。私は必要な特権を与えました。私が言うとき:パブリック同義語対schema.objectパターン

SELECT * FROM EMP; 

私はそれを意味して、エラーを「表またはビューが存在しません」を取得:

  1. 私はどちらかのオブジェクトの前に所有者名を指定する必要があります。 SCOTT.EMPまたは
  2. 私が参照しているすべてのオブジェクトの公開同義語を作成できます。

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

+1

あなたは 'alter session set current_schema = SCOTT;'を使って考えましたか? –

+0

これはいいアイデアです –

答えて

4

パブリック・シノニムは非常に特殊な目的を果たします。それらはオブジェクトが毎にユーザによって参照されることを可能にします - 彼らは適切な特権を持っていると仮定します。将来的に特定のユーザーがオブジェクトをどのように表示するかを変更したい場合は、パブリック・シノニムが移動する方法ではありません。

また、データベース全体に特定のオブジェクト名を使用します。しかし、パブリック・シノニムが存在していても、同じ名前のオブジェクトを作成できないわけではありません。これは信じられないほど混乱することがあります。

例えば、手順testとスキーマempがあるとします。 emp.testを実行しようとすると、テーブルにパブリック同義語empが既に存在するため、機能しません。

Tom Kyte、彼らはプライベート・シノニムを超えるパブリック・シノニムがslight decrease in performanceにつながることを示唆しているように見えるパフォーマンスの面ではseems to have written anumber of articles about this.

。ただし、シノニムの代わりにシノニムを使用すると、パフォーマンスがわずかに低下します。これは、すべての最後のcomputronが貴重な場合は、同義語をまったく使用すべきではないことを示唆しています。

私は、これは可能な場合は公の同義語を避けるべきだと思います。もしあなたがを必要としているのであれば、それは理由のために存在しますが、もしあなたがしなければ、それでは何があるでしょうか? scott.emp構造は明確で、自分や他の誰かがデータベースやコードに新たに加わることによって誤って解釈することなく、参照しているスキーマとオブジェクトを正確に示しています。

クイックポイント。あなたは明示的にそれを言っていませんが、あなたの質問の文言は、あなたがすべてのユーザのためにスキーマを作成していることを示唆しているようです。これは大規模な混乱のように思われる...

+0

ありがとうございました。私は質問を変更しました。 –