シノニムの理解
シノニムは、データベース・オブジェクトの別名です。シノニムは、オブジェクトの名前や所有者を隠すために使用できるため、セキュリティや利便性を目的として頻繁に使用されます。
また、シノニムで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文の無効化や再コンパイルの動作を次に示します。
-
パブリック・シノニムに依存するすべてのSQL問合せは、次のいずれかのオブジェクトと同じ名前のプライベート・シノニムが作成されると無効化されます。
-
プライベート・シノニム
-
表
-
ビュー
-
順序
-
マテリアライズド・ビュー
-
キャッシュ・グループ
-
プロシージャ、関数およびパッケージを含むPL/SQLオブジェクト
-
-
プライベート・オブジェクトまたはスキーマ・オブジェクトに依存するすべてのSQL問合せは、プライベート・オブジェクトまたはスキーマ・オブジェクトが削除されると無効化されます。