あるアプリでOracleのテーブルを参照しており、その参照元テーブルを洗い替えで更新したい場合、
シノニムを使用することによりアプリに影響がないように更新が可能です。
例えば、下記の図のような構成の場合を想定。
現在のシノニム確認
SELECT * FROM ALL_SYNONYMS
WHERE SYNONYM_NAME = 'HOGE_TABLE';
+----------------+---------------+----------------+---------------+-----------+
| OWNER | SYNONYM_NAME | TABLE_OWNER | TABLE_NAME | DB_LINK |
+----------------+---------------+----------------+---------------+-----------+
| SAMPLE_SCHEMA | HOGE_TABLE | SAMPLE_SCHEMA | HOGE_TABLE_1 | (null) |
+----------------+---------------+----------------+---------------+-----------+
シノニムで参照されていないスタンバイ側のテーブルを洗い替え
TRUNCATE TABLE SAMPLE_SCHEMA.HOGE_TABLE_2;
INSERT INTO SAMPLE_SCHEMA.HOGE_TABLE_2
SELECT * FROM SAMPLE_SCHEMA.SOURCE_TABLE;
シノニム切り替え
CREATE OR REPLACE SYNONYM SAMPLE_SCHEMA.HOGE_TABLE
FOR SAMPLE_SCHEMA.HOGE_TABLE_2;
切り替え後のシノニム確認
SELECT * FROM ALL_SYNONYMS
WHERE SYNONYM_NAME = 'HOGE_TABLE';
+----------------+---------------+----------------+---------------+-----------+
| OWNER | SYNONYM_NAME | TABLE_OWNER | TABLE_NAME | DB_LINK |
+----------------+---------------+----------------+---------------+-----------+
| SAMPLE_SCHEMA | HOGE_TABLE | SAMPLE_SCHEMA | HOGE_TABLE_2 | (null) |
+----------------+---------------+----------------+---------------+-----------+