我真的应该知道这一点,但有人会告诉我如何更改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
。
有什么想法吗?
感谢。
答案 0 :(得分:4)
扩展 kerchingo 的答案:Oracle有多种方法来识别数据库。
最佳方式 - 您应该经常使用的方式 - 是USER/PASSWORD@SERVER
。这将使用Oracle命名查找(tnsnames.ora)来查找实际的服务器,每次连接到它时,它可能位于不同的物理主机上。您还可以将Oracle连接字符串指定为SERVER
,但假装您不能。
还有两种方法可以通过环境变量指定默认服务器。第一个是TWO_TASK
,它使用命名查找,第二个是ORACLE_SID
,它假设服务器在当前机器上运行。 ORACLE_SID
优先于TWO_TASK
。
您应该始终使用显式连接字符串的原因是您不知道用户是设置了TWO_TASK
,ORACLE_SID
,还是两者都设置了; {你也不知道他们可能会做什么。将两者设置为不同的值对于诊断来说是一个特别痛苦的问题,特别是通过电话与一个不太了解Oracle如何工作的人(去过那里,做过那些)。
答案 1 :(得分:3)
假设您已登录到server1,则需要使用
连接到test2sqlplus 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或类似的配置文件。
希望这有帮助。