ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Synonym とは
Oracle Database の Synonym (シノニム) は、テーブル / VIEW / プロシージャ / シーケンス等のスキーマオブジェクトに対する別名です。アプリ側コードを変更せずに参照先を切り替えたり、長いスキーマ名を省略したりできます。
-- 本来のテーブル
SELECT * FROM hr.employees;
-- Synonym を作っておけば
CREATE SYNONYM emp FOR hr.employees;
-- 短く書ける
SELECT * FROM emp;
Public Synonym と Private Synonym
| 種類 | 作成権限 | 参照可能ユーザ | 用途 |
|---|---|---|---|
| Private Synonym | CREATE SYNONYM | 作成者のスキーマだけ | 個人 / アプリ専用 |
| Public Synonym | CREATE PUBLIC SYNONYM | 全 DB ユーザ | 共通辞書 / 業務テーブル共有 |
-- Private (デフォルト)
CREATE SYNONYM emp FOR hr.employees;
-- Public (DBA 級権限必要)
CREATE PUBLIC SYNONYM emp FOR hr.employees;
-- 上書き
CREATE OR REPLACE SYNONYM emp FOR hr.employees_v2;
-- 削除
DROP SYNONYM emp;
DROP PUBLIC SYNONYM emp;
名前解決の優先順位
SELECT * FROM emp を発行したとき、Oracle は以下の順で名前を探します:
- 自スキーマのオブジェクト (自分が emp テーブルを持っている?)
- 自スキーマの Private Synonym (CREATE SYNONYM emp ...)
- Public Synonym (CREATE PUBLIC SYNONYM emp ...)
Public Synonym は最後なので、自分のスキーマに同名オブジェクトがあるとPublic Synonym は隠される点に注意。
DB Link との組み合わせ
Synonym の真価はDB Linkと組み合わせたとき。別 DB のテーブルをあたかも自 DB のテーブルのように参照できます:
-- 1. DB Link を作成 (本番 DB に接続)
CREATE DATABASE LINK prod_db
CONNECT TO app_user IDENTIFIED BY "pwd"
USING 'PROD'; -- tnsnames.ora の名前
-- 2. 別 DB のテーブルを直接参照(うっとうしい)
SELECT * FROM hr.employees@prod_db;
-- 3. Synonym を被せて透過化
CREATE SYNONYM emp FOR hr.employees@prod_db;
-- 4. 以降は普通のテーブルのように
SELECT * FROM emp;
-- アプリ側: DB 移行時にも SQL 変更不要
-- ・最初は本番 DB を直接参照
-- ・後でローカルにレプリカ作って Synonym 差し替え → アプリ無修正
用途別ユースケース
| シナリオ | Synonym の使い方 |
|---|---|
| マスタ DB を別 DB に切り出し | DB Link + Synonym で透過アクセス |
| スキーマ名を省略したい | CREATE SYNONYM emp FOR hr.employees |
| テーブル名を変更したいがアプリ非改修 | 旧名 Synonym → 新名テーブル |
| 環境別 (本番 / ステージ) で参照先切替 | 環境毎に CREATE OR REPLACE SYNONYM |
| 後方互換 (旧 API 名残し) | 旧プロシージャ名を新名にリダイレクト |
| マルチテナント | テナント毎にスキーマ + Public Synonym で共有マスタ |
確認系 SQL
-- 自分の Private Synonym 一覧
SELECT * FROM USER_SYNONYMS;
-- 全 DB のシノニム (Public 含む、DBA 権限)
SELECT * FROM ALL_SYNONYMS WHERE SYNONYM_NAME = 'EMP';
-- 参照先の確認
SELECT SYNONYM_NAME, TABLE_OWNER, TABLE_NAME, DB_LINK
FROM ALL_SYNONYMS
WHERE OWNER IN ('PUBLIC', USER);
-- 壊れた Synonym (参照先が消失)
SELECT * FROM ALL_OBJECTS
WHERE OBJECT_TYPE = 'SYNONYM' AND STATUS = 'INVALID';
権限
-- Private Synonym 作成権限
GRANT CREATE SYNONYM TO app_user;
-- Public Synonym 作成権限 (注意: 強権限)
GRANT CREATE PUBLIC SYNONYM TO admin_user;
-- 参照対象テーブルへの権限も必須
GRANT SELECT ON hr.employees TO app_user;
-- Synonym 自体に権限は付けられない (参照先のテーブル権限が効く)
Synonym の落とし穴
| 落とし穴 | 説明 |
|---|---|
| 名前衝突 | 自スキーマのテーブルが優先され Public Synonym が隠れる |
| 権限の二重管理 | Synonym + 参照先テーブルの両方の権限が必要 |
| 性能 | 名前解決のオーバーヘッドはあるが微小 (キャッシュされる) |
| DDL 影響 | 参照先テーブル変更で Synonym が INVALID 状態に → 再コンパイル |
| セキュリティ監査の難しさ | 誰がどのテーブルを参照しているか追いにくい |
他 DB での代替手段
| DB | 代替 |
|---|---|
| PostgreSQL | VIEW (CREATE VIEW emp AS SELECT * FROM hr.employees)、または search_path |
| MySQL | VIEW または CREATE TABLE emp AS SELECT * ... (実体) |
| SQL Server | SYNONYM 文法ほぼ同じ。Linked Server + Synonym で Oracle 同様 |
| DB2 | ALIAS (CREATE ALIAS emp FOR hr.employees) |
PostgreSQL での擬似実装例:
-- search_path で複数スキーマを順に探索
SET search_path TO hr, public;
SELECT * FROM employees; -- hr.employees に解決
-- VIEW で別名
CREATE VIEW emp AS SELECT * FROM hr.employees;
-- 外部 DB は dblink / postgres_fdw
CREATE EXTENSION postgres_fdw;
CREATE SERVER prod_srv ...;
CREATE FOREIGN TABLE emp (...) SERVER prod_srv OPTIONS (schema_name 'hr', table_name 'employees');
FAQ
Q: Synonym と VIEW の違いは?
A: VIEW は SELECT 文を持ち列を再定義できる。Synonym は単純なエイリアス。実 Oracle では多くの場合 Synonym + VIEW 併用。
Q: 同名で Public と Private の両方を作ったら?
A: 自スキーマからは Private が優先。他ユーザは Public が見える。混乱の元なので推奨されない。
Q: Public Synonym は誰でも作れる?
A: いいえ。CREATE PUBLIC SYNONYM 権限が必要で、通常 DBA だけ持ちます。
Q: 削除したシノニムの権限は?
A: シノニム自体に GRANT 不可。GRANT は参照先テーブルに掛けるので、Synonym DROP しても権限は残ります。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?