我真的应该知道这一点,但有人会告诉我如何更改Linux上的默认数据库?
例如:
我有一个数据库test1
与ORACLE_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_TASK
, ORACLE_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或类似的配置文件)中执行此操作。
希望这可以帮助。