シノニムの理解

シノニムは、データベース・オブジェクトの別名です。シノニムは、オブジェクトの名前や所有者を隠すために使用できるため、セキュリティや利便性を目的として頻繁に使用されます。

また、シノニムでSQL文を簡略化できます。シノニムによって独立性が実現するため、シノニムがどのオブジェクトを参照するかにかかわらず、変更なしでアプリケーションの動作が可能になります。シノニムはDML文の他、一部のDDLやTimesTen Cache文で使用できます。

シノニムは、次の2つのクラスに分類されます。

  • プライベート・シノニム: プライベート・シノニムは、特定のユーザーが所有し、特定のユーザーのスキーマ内に存在します。プライベート・シノニムは、表名、ビュー名、順序名など他のオブジェクト名と同じネームスペースを共有します。したがって、プライベート・シノニムの名前は、同じスキーマ内の表名やビュー名と同じにすることはできません。

  • パブリック・シノニム: パブリック・シノニムは、すべてのユーザーが所有され、データベースの各ユーザーからアクセスできます。パブリック・シノニムには、すべてのユーザーがアクセスでき、どのユーザー・スキーマにも属しません。したがって、パブリック・シノニムの名前は、プライベート・シノニム名や表名と同じにすることができます。

ユーザーは、シノニムを作成および使用するには適切な権限が必要です。それらの権限については、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』シノニムのオブジェクト権限を参照してください。

シノニムを作成した後は、次のビューを使用して表示できます。

  • SYS.ALL_SYNONYMS: 現行のユーザーがアクセスできるシノニムを表示します。『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』SYS.ALL_SYNONYMSを参照してください。

  • SYS.DBA_SYNONYMS: データベース内のすべてのシノニムを表示します。『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』SYS.DBA_SYNONYMSを参照してください。

  • SYS.USER_SYNONYMS: 現行のユーザーが所有しているシノニムを表示します。『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』SYS.USER_SYNONYMSを参照してください。

次の項では、TimesTenのシノニムの使用について説明します。

シノニムの作成

シノニムは、CREATE SYNONYM文を使用して作成します。

既存のシノニム廃棄せずに定義を変更するには、CREATE OR REPLACE SYNONYM文を使用します。CREATE SYNONYM文およびCREATE OR REPLACE SYNONYM文では、シノニム名およびシノニムが作成されるスキーマ名を指定します。スキーマを省略すると、シノニムはユーザーのスキーマに作成されます。ただし、パブリック・シノニムを作成する場合、スキーマ名はPUBLICネームスペースで定義されるため、指定しません。

ユーザーは、CREATE SYNONYM文またはCREATE OR REPLACE SYNONYM文を発行するには適切な権限が必要です。それらの権限については、『Oracle TimesTen In-Memory Databaseセキュリティ・ガイド』シノニムのオブジェクト権限を参照してください。

  • シノニムのオブジェクト・タイプ: CREATE SYNONYM文およびCREATE OR REPLACE SYNONYM文では、特定のオブジェクトの別名を定義します。オブジェクト・タイプは、表、ビュー、シノニム、順序、PL/SQLストアド・プロシージャ、PL/SQL関数、PL/SQLパッケージ、マテリアライズド・ビューまたはキャッシュ・グループのいずれかです。

    ノート:

    サポートされていないオブジェクト・タイプのシノニムを作成しても、そのシノニムは使用できない可能性があります。

  • ネーミングについての考慮事項: プライベート・シノニムは、表名など他のすべてのオブジェクト名と同じネームスペースを共有します。したがって、プライベート・シノニムの名前は、同じスキーマ内の表名や他のオブジェクト名と同じにすることはできません。

    パブリック・シノニムには、すべてのユーザーがアクセスでき、特定のスキーマには属しません。したがって、パブリック・シノニムの名前は、プライベート・シノニム名や他のオブジェクト名と同じにすることができます。ただし、SYSスキーマのオブジェクトと同じ名前を持つパブリック・シノニムは作成できません。

次の例では、jobs表に対するプライベート・シノニムsynjobsを作成します。jobs表とsynjobsシノニムの両方にSELECT文を発行して、synjobsからの選択と、jobs表からの選択が同じ結果になることを示します。最後に、作成したプライベート・シノニムを表示するため、例ではSYS.USER_SYNONYMS表に対してSELECT文を実行しています。

Command> CREATE SYNONYM synjobs FOR jobs;
Synonym created.

Command> SELECT FIRST 2 * FROM jobs;
< AC_ACCOUNT, Public Accountant, 4200, 9000 >
< AC_MGR, Accounting Manager, 8200, 16000 >
2 rows found.
Command> SELECT FIRST 2 * FROM synjobs;
< AC_ACCOUNT, Public Accountant, 4200, 9000 >
< AC_MGR, Accounting Manager, 8200, 16000 >
2 rows found.

Command> SELECT * FROM sys.user_synonyms;
< SYNJOBS, TTUSER, JOBS, <NULL> >
1 row found.

『Oracle TimesTen In-Memory Database SQLリファレンス』CREATE SYNONYMを参照してください。

シノニムの削除

DROP SYNONYM文を使用して、データベースから既存のシノニムを削除します。ユーザーが所有するすべてのオブジェクト(シノニムを含む)を削除しないかぎり、そのユーザーを削除することはできません。

たとえば、次のようにパブリック・シノニムpubempを削除します:

DROP PUBLIC SYNONYM pubemp;
Synonym dropped.

パブリック・シノニム、または他のユーザー・スキーマ内のプライベート・シノニムを削除するには、適切な権限が必要です。『Oracle TimesTen In-Memory Database SQLリファレンス』DROP SYNONYMを参照してください。

シノニムが原因のSQL問合せの無効化または再コンパイル

シノニムまたはオブジェクトが新規作成または削除されると、一部のSQL問合せやDDL文の中が無効化されたり、再コンパイルされる場合があります。

SQL問合せおよびDDL文の無効化や再コンパイルの動作を次に示します。

  1. パブリック・シノニムに依存するすべてのSQL問合せは、次のいずれかのオブジェクトと同じ名前のプライベート・シノニムが作成されると無効化されます。

    • プライベート・シノニム

    • ビュー

    • 順序

    • マテリアライズド・ビュー

    • キャッシュ・グループ

    • プロシージャ、関数およびパッケージを含むPL/SQLオブジェクト

  2. プライベート・オブジェクトまたはスキーマ・オブジェクトに依存するすべてのSQL問合せは、プライベート・オブジェクトまたはスキーマ・オブジェクトが削除されると無効化されます。