有没有办法连接到 Oracle 服务器的特定实例?
Is there a way to connect to a specific instance of Oracle server?
我不确定我是否使用了正确的术语,但我在登录 OEM 时注意到我的 Oracle 数据库服务器设置了三个实例,并且它似乎在我登录时随机选择了一个。是否有更新 tnsnames 以连接到特定实例或在 Toad 的新连接 window 中进行更新的方法?我希望我能以这种方式终止特定会话。
通常情况下,可以。如果您知道实例位于哪个服务器上,则可以指定该主机的 oracle 服务名称为 运行。
使用 select instance_name, host_name, logins, status from v$instance;
您可以找出当前会话位于哪个机器上的哪个实例。
您可以通过查询 gv$instance 找到其他实例。
如果您对 [g]v$ 实例没有权限,您可能想尝试 select sys_context('USERENV','INSTANCE_NAME') from dual;
但这仅适用于当前实例。
很大程度上取决于 运行 的配置。
回答我自己的问题 - 在 TNSNames 文件中,您可以像这样添加一个 INSTANCE_NAME 部分。如果没有 TNSNames 文件,我不知道该怎么做。
database =
(DESCRIPTION =
(SDU=32767)
(ADDRESS = (PROTOCOL = TCP)(HOST = server.name)(PORT = 1521)(SEND_BUF_SIZE = 98304)(RECV_BUF_SIZE = 98304))
(CONNECT_DATA =
(SERVER = DEDICATED)
(INSTANCE_NAME = instance_name)
(SERVICE_NAME = service_name)
)
)
正如@ik_zelf 发布的那样,您可以查询您正在使用的是哪个实例:
select sys_context('USERENV','INSTANCE_NAME') from dual;
我不确定我是否使用了正确的术语,但我在登录 OEM 时注意到我的 Oracle 数据库服务器设置了三个实例,并且它似乎在我登录时随机选择了一个。是否有更新 tnsnames 以连接到特定实例或在 Toad 的新连接 window 中进行更新的方法?我希望我能以这种方式终止特定会话。
通常情况下,可以。如果您知道实例位于哪个服务器上,则可以指定该主机的 oracle 服务名称为 运行。
使用 select instance_name, host_name, logins, status from v$instance;
您可以找出当前会话位于哪个机器上的哪个实例。
您可以通过查询 gv$instance 找到其他实例。
如果您对 [g]v$ 实例没有权限,您可能想尝试 select sys_context('USERENV','INSTANCE_NAME') from dual;
但这仅适用于当前实例。
很大程度上取决于 运行 的配置。
回答我自己的问题 - 在 TNSNames 文件中,您可以像这样添加一个 INSTANCE_NAME 部分。如果没有 TNSNames 文件,我不知道该怎么做。
database =
(DESCRIPTION =
(SDU=32767)
(ADDRESS = (PROTOCOL = TCP)(HOST = server.name)(PORT = 1521)(SEND_BUF_SIZE = 98304)(RECV_BUF_SIZE = 98304))
(CONNECT_DATA =
(SERVER = DEDICATED)
(INSTANCE_NAME = instance_name)
(SERVICE_NAME = service_name)
)
)
正如@ik_zelf 发布的那样,您可以查询您正在使用的是哪个实例:
select sys_context('USERENV','INSTANCE_NAME') from dual;