是否可以将TNS声明重定向到另一个?
对于我当前的项目,我要求在某些情况下从服务器到服务器“翻转”。为此,我使用了3个TNS条目。
用于保存我的应用程序将连接到的TNS名称:
# application access to DB
DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SAMPLENAME)
)
)
因此,我可以自己“手动”连接到任一数据库,我再使用2个TNS条目:
# Central_Server "Manual"
Central_Server =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SAMPLENAME)
)
)
# Local "Manual"
Local =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SAMPLENAME)
)
)
不是一直调整DB的TNS条目,而是可以做一些事情吗?:
DB = Local
or
DB = Central_Server
由于部署策略,我宁愿不直接在我的应用程序中实现这个逻辑。
谢谢:)
答案 0 :(得分:1)
您可以在tnsnames.ora
文件中配置多个地址。从您的描述中不清楚您是否正在进行故障转移或负载平衡。 The Oracle documentation提供了一个很好的参考资料。
答案 1 :(得分:0)
对我来说,你必须在某处“调整”某些东西。如果您通过Windows上的sqlplus进行连接,请尝试:
set local=<Your TNS Alias Here>
sqlplus userid
在* nix上,尝试:
TWO_TASK=<your TNS Alias here>; export TWO_TASK
sqlplus userid
对于其他客户端,它可能更棘手,具体取决于他们是否遵守上述环境变量。当然,如果您提供连接字符串,则只需使用以下内容作为连接字符串:
userid@$TWO_TASK
或
userid@%local%
答案 2 :(得分:0)
在给出所有建议后,我发现最简单的方法是继续手动“完全”重写tnsnames.ora条目。
答案 3 :(得分:0)
您是否考虑过tnsnames.ora之外的解决方案?
如果您可以控制本地DNS,则可以设置别名。当需要切换时,您可以更新DNS条目...当然,需要考虑DNS的传播和任何本地DNS缓存。
第二种可能性是Oracle Connection Manager。它可以作为代理,并且具有高度可配置性。您可以将单个TNSNAMES入口指向Connection Manager实例。然后,当您想要切换时,请在Connection Manager配置中进行更改,以将传入端口指向新的传出服务器,然后将更改置于播放状态。
答案 4 :(得分:-1)
根据环境,您可以使用ORACLE_SID环境变量。
例如 SQLPLUS fred / flintstone (没有@来明确标识数据库)将连接到ORACLE_SID中指定的数据库。