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

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

例如:

我有一个数据库test1ORACLE_SID=test1 server1 。 所以,要连接到test1我可以使用:

 sqlplus myuser/password 

连接到默认数据库test1

我现在想要默认的sqlplus连接到服务器server2上的数据库test2

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

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

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

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

有任何想法吗?

谢谢。

为了扩大kerchingo的答案:Oracle有多种方式来识别数据库。

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

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

你应该总是使用一个明确的连接字符串的原因是,你不知道用户是否已经设置TWO_TASKORACLE_SID ,或两者; 你也不知道他们可能会设置什么。 将两者设置为不同的值是诊断的一个特别痛苦的问题,尤其是在一个不太了解Oracle如何工作的人的手机上。

假设你登录到server1,你需要连接到test2

 sqlplus myuser/password@test2 

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

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

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

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

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

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

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

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

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

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

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

希望这可以帮助。