1. シノニムとは
シノニム(Synonym)は、Oracleデータベースでオブジェクトに付ける「別名」を意味します。テーブルやビュー、シーケンスなどのオブジェクトに対して付けることで、長い名前やスキーマを簡素化し、SQLの可読性を向上させます。特に大規模システムや他スキーマへのアクセスが頻繁にある場合に有効です。
シノニムの特徴
- SQL文の簡素化:オブジェクトへのアクセスを簡単にする。
- 移植性:異なる環境でのオブジェクトの参照が柔軟になる。
- アクセス制御:データベースオブジェクトへのアクセスをシノニムで制限できる。
SCOTTスキーマは以下を実行することでインストールが可能です。
SQL> @?/rdbms/admin/utlsampl.sql
2. シノニムの種類
シノニムには次の2種類があります:
- パブリックシノニム:データベース内の全ユーザーが使用可能。
CREATE PUBLIC SYNONYM
文で作成。- アプリケーション全体で共通のリソースが必要な場合に便利です。
- プライベートシノニム:シノニムを作成したユーザーだけが利用可能。
CREATE SYNONYM
文で作成。- 他のユーザーに影響を与えず、限定的な利用ができます。
3. シノニムの作成方法
シノニムは CREATE SYNONYM
または CREATE PUBLIC SYNONYM
文を使用して作成します。CREATE [PUBLIC] SYNONYM シノニム名 FOR スキーマ名.オブジェクト名;
例
プライベートシノニム
emp_syn
という名前のシノニムを scott
スキーマ内の emp
テーブルに対して作成します。CREATE SYNONYM emp_syn FOR scott.emp;
SQL> show user
ユーザーは"USER1"です。
SQL> CREATE SYNONYM emp_syn FOR scott.emp; ★シノニムを作成
シノニムが作成されました。
SQL> select empno,ename from emp; ★スキーマ名を指定していないのでselectできない。
select empno,ename from emp
*
行1でエラーが発生しました。:
ORA-00942: 表またはビューが存在しません。
SQL> select empno,ename from scott.emp; ★スキーマ名を指定しているのでselectできる
EMPNO ENAME
---------- --------------------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7839 KING
7844 TURNER
7900 JAMES
7902 FORD
7934 MILLER
12行が選択されました。
SQL> select empno,ename from emp_syn; ★シノニムを指定してselectできる
EMPNO ENAME
---------- --------------------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7839 KING
7844 TURNER
7900 JAMES
7902 FORD
7934 MILLER
12行が選択されました。
パブリックシノニム
全ユーザーからアクセス可能な dept_syn
シノニムを作成します。CREATE PUBLIC SYNONYM dept_syn FOR scott.dept;
4. シノニムとDBリンク(Database Link)
シノニムは、他のデータベースにあるオブジェクトへのアクセスを簡略化する DBリンク(Database Link) と組み合わせることができます。DBリンクはリモートデータベースへの接続を確立し、他のデータベース上のオブジェクトにアクセスするための手段です。シノニムを使うと、DBリンクを含む長い参照を短縮し、簡単な名前でアクセス可能になります。
DBリンクとシノニムの作成例
DBリンクの作成
以下のように、リモートデータベースへのリンクを作成します。CREATE DATABASE LINK remote_db_link
CONNECT TO user IDENTIFIED BY password
USING 'tns_entry';
このDBリンクにより、リモートデータベース上のテーブルにアクセスできるようになります。
DBリンクを含むシノニムの作成
DBリンクを含むオブジェクトをシノニムで定義すると、リモートデータベースのオブジェクトへのアクセスがさらに簡単になります。CREATE SYNONYM emp_remote_syn FOR scott.emp@remote_db_link;
このシノニム emp_remote_syn
により、scott.emp
テーブルが他のデータベースにあっても、シンプルな名前で直接アクセスできます。
シノニムとDBリンクを使ったクエリ例
作成したシノニムを利用してリモートデータベースのテーブルからデータを取得します。SELECT * FROM emp_remote_syn WHERE job = 'MANAGER';
このように、シノニムを通じてDBリンクを使ったリモートデータベースへのクエリも簡単に記述できます。
5. シノニムの活用ケース
スキーマ間でのデータ参照の統一
たとえば、複数のアプリケーションが同一データを参照する場合、シノニムを利用することでスキーマを意識せずに共通の名前でアクセスできます。
環境ごとの設定変更の効率化
テスト環境と本番環境で異なるテーブルを参照する場合も、シノニムを使って簡単に切り替えられます。たとえば、テスト環境ではテストデータを指すシノニム、本番環境では本番データを指すシノニムを設定することで、同一のSQL文で操作が可能です。
6. シノニムの管理
削除
不要になったシノニムは DROP SYNONYM
文で削除します。DROP [PUBLIC] SYNONYM シノニム名;
7. シノニムのトラブルシューティング
ORA-00980 シノニムが無効です
原因:参照するオブジェクトが削除されている可能性。 対処:シノニムを再作成するか、対象オブジェクトが存在することを確認します。
ORA-01775 循環シノニムの定義が見つかりました
原因:シノニムが他のシノニムを参照しているため循環参照が発生。 対処:シノニムの構造を確認し、循環参照が発生しないように設計します。
8. ベストプラクティスと注意点
1. パブリックシノニムの乱用を避ける
パブリックシノニムは便利ですが、作成すると全スキーマでアクセスできるため、必要以上にパブリックシノニムを作成することは推奨されません。
2. 命名規則の統一
シノニムを多用すると、スキーマ内のオブジェクト名とシノニム名が混同される可能性が高まります。明確な命名規則を設定し、管理を簡潔に保ちましょう。
3. 依存関係の確認
シノニムが参照するオブジェクトが削除または変更された場合、シノニムは無効になります。定期的に依存関係を確認し、必要に応じてシノニムを更新するか、新たに作成し直すことが重要です。
4. シノニムのパフォーマンス
通常、シノニムによるアクセスは直接のオブジェクト参照とパフォーマンス面で大差ありませんが、依存関係が複雑になると管理負担が増すため、システム全体を考慮した設計が必要です。
まとめ
Oracleデータベースにおけるシノニムは、オブジェクトアクセスを簡略化し、アプリケーションやSQL文の移植性を向上させる非常に便利なツールです。特にDBリンクと組み合わせることで、他のデータベースにあるオブジェクトにも容易にアクセスでき、異なるデータベース間での操作がシンプルになります。シノニムの種類や利用方法を理解し、適切なベストプラクティスに従うことで、データベース管理の効率を高め、システムの柔軟性を向上させましょう。
[参考]
SQL言語リファレンス – CREATE SYNONYM
コメント