5

我真的应该知道这一点,但是有人会告诉我如何更改 Linux 上的默认数据库吗?

例如:

我有一个数据库test1。因此,要连接到我可以使用:server1ORACLE_SID=test1test1

sqlplus myuser/password

连接到默认数据库,test1

我现在希望默认的 sqlplus 连接转到test2server上的数据库server2

所以,我更新了 tnsnames 以便旧test1条目现在指向test2@server2. 我还添加了一个单独的条目test2,指向同一个地方。但是,默认连接似乎仍然转到test1@server1.

test2以下两者都可以正常工作并转到数据库server2

sqlplus myuser/password@test1
sqlplus myuser/password@test2

但默认连接,sqlplus myuser/password,去test1@server1

有任何想法吗?

谢谢。

4

5 回答 5

4

扩展kerchingo的答案:Oracle 有多种方法来识别数据库。

最好的方法 - 您应该始终使用的方法 - 是USER/PASSWORD@SERVER. 这将使用 Oracle 命名查找 (tnsnames.ora) 来查找实际服务器,每次连接到它时,它可能位于不同的物理主机上。您还可以将 Oracle 连接字符串指定为SERVER,但假装您不能。

还有两种方法可以通过环境变量指定默认服务器。第一个是TWO_TASK,它使用命名查找,第二个是ORACLE_SID,它假定服务器正在当前机器上运行。ORACLE_SID优先于TWO_TASK.

您应该始终使用显式连接字符串的原因是您不知道用户是否设置了TWO_TASK, ORACLE_SID, both 或两者都没有;你也不知道他们可能会被设置成什么。将两者设置为不同的值是一个特别痛苦的诊断问题,尤其是通过电话与一个并不真正了解 Oracle 工作原理的人(去过那里,做过那个)。

于 2009-10-14T12:22:58.143 回答
3

假设您已登录到 server1,您需要使用以下命令连接到 test2

sqlplus myuser/password@test2

因为您必须通过侦听器才能到达 server2。字符串 test2 标识 tnsnames.ora 文件中的一个条目,该条目指定如何连接到 test2。您将无法使用 sqlplus 命令的第一种形式连接到不同的服务器。

如果两个实例(test1、test2)都在 server1 上,那么您可以如 @kerchingo 所述,将 ORACLE_SID 环境变量设置为指向另一个实例。

于 2009-10-14T01:56:49.993 回答
2

LOCAL使用数据库的 tns 别名定义环境变量。

> set LOCAL=test1
> sqlplus myuser/password
> ... connected to test1
> set LOCAL=test2
> sqlplus myuser/password
> ... connected to test2

这适用于 Windows 客户端,而不适用于其他操作系统。

于 2009-10-14T06:58:45.113 回答
2

正确的问题是“如何更改默认服务”?Oracle DBMS 提供两种类型的连接请求:显式和隐式。在显式请求中,您提供三个操作数,例如 sqlplus 用户名/密码@服务。在隐式请求中,您忽略第三个操作数。

隐式连接仅适用于客户端主机和服务器主机相同的情况。因此,侦听器位于同一主机上。

侦听器是最初响应连接请求的侦听器。在处理来自同一主机的隐式连接请求时,它检查是否已设置实例名称。它检查 shell 变量 ORACLE_SID 的值。

如果设置,那么它可以处理隐式连接请求。否则,它不能,您必须执行显式连接请求,提供第三个操作数。

listener-config 文件名 listener.ora 将实例与服务相关联。要更改您连接的默认服务,请更改实例的默认值。因此,更改 shell 变量 ORACLE_SID 的默认值。您可以在 OS 用户配置文件(例如 .profile 或类似配置文件)中执行此操作。

希望这可以帮助。

于 2014-11-19T19:51:59.107 回答
1

我认为它是在您的环境中设置的,您可以回显 $ORACLE_SID 吗?

于 2009-10-13T23:53:23.287 回答