在Oracle中,如何更改“默认”数据库?

时间:2009-10-13 23:48:47

标签: linux oracle sqlplus

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

例如:

我在test1上有一个数据库server1 ORACLE_SID=test1。因此,要连接到test1我可以使用:

sqlplus myuser/password

连接到默认数据库test1

我现在希望默认的sqlplus连接转到服务器test2上的数据库server2

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

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

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

但默认连接sqlplus myuser/password转到test1@server1

有什么想法吗?

感谢。

5 个答案:

答案 0 :(得分:4)

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

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

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

您应该始终使用显式连接字符串的原因是您不知道用户是设置了TWO_TASKORACLE_SID,还是两者都设置了; {你也不知道他们可能会做什么。将两者设置为不同的值对于诊断来说是一个特别痛苦的问题,特别是通过电话与一个不太了解Oracle如何工作的人(去过那里,做过那些)。

答案 1 :(得分:3)

假设您已登录到server1,则需要使用

连接到test2
sqlplus myuser/password@test2

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

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

我认为它是在你的环境中设置的,你能回复$ ORACLE_SID吗?

答案 4 :(得分:0)

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

隐式连接仅在客户端主机和服务器主机相同时适用。因此,监听器位于同一主机上。

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

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

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

希望这有帮助。