Oracle同义词与Database Link差异及后续处理方案咨询
数据库操作疑问解答
我执行了以下操作:先创建Database Link,再为所需表创建Synonym,随后从生产数据库将表同步至开发数据库,具体代码如下:
CREATE DATABASE LINK my_db_link CONNECT TO user IDENTIFIED BY passwd USING 'database_name'; CREATE SYNONYM my_table FOR my_table@my_db_link; SELECT * FROM my_table; create table my_table as (select * from my_table@my_db_link);
技术疑问解答
1. Synonym与Database Link的区别是什么?
- Database Link(数据库链接):是跨数据库的连接通道,定义了当前库到远程库的连接路径、认证账号密码和目标库标识,是访问远程数据库对象的基础,没有它就无法直接连接并访问远程库的内容。
- Synonym(同义词):是远程对象(如
my_table@my_db_link)的本地别名,作用是简化SQL书写,不用每次都带@my_db_link后缀。它本身没有连接能力,必须依赖对应的Database Link才能访问到远程对象。
2. 因每30天需重置密码,我常遗忘二者存在,导致数据库被锁定,需联系DBA解锁。请问应同时删除二者、仅删除Synonym还是仅删除Database Link?
优先删除Database Link,理由如下:
- 账号锁定的根源是Database Link中保存的过期密码,当有操作(比如误执行的SQL、后台定时任务)调用这个链接时,会用旧密码尝试登录远程库,多次失败后触发账号锁定。
- 仅删除Synonym的话,Database Link依然存在,还是会被其他操作触发密码验证错误,导致锁定问题。
- 如果短期内不需要再同步数据,也可以同时删除二者,彻底消除风险;之后需要用的时候再重新创建即可。
3. 创建表后是否仍需保留它们?我每年仅重建一次该表,创建后已有足够数据可用。
不需要保留,原因:
- 你已经通过
create table as select将远程表的数据完整同步到本地库,本地表是独立的,后续使用完全不依赖远程库的连接。 - 保留这两个对象不仅会有密码过期导致账号锁定的风险,还会留下无用的数据库对象,增加不必要的维护成本。
- 明年需要重建表时,再重新创建Database Link和同义词即可,操作简单,没必要长期留存。
内容的提问来源于stack exchange,提问作者noobprogrammer1987
相关产品推荐
相关产品推荐

