TNS重定向?

时间:2009-12-03 10:03:23

标签: oracle oracle10g

是否可以将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

由于部署策略,我宁愿不直接在我的应用程序中实现这个逻辑。

谢谢:)

5 个答案:

答案 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中指定的数据库。