ITPUB论坛 » Oracle专题深入讨论 » 关于数据库连接问题
新一届的微软MVP评选已经开始,欢迎各位推荐!
2008-5-24 21:04 yanfenggood
关于数据库连接问题

我在机上创建两个数据库orcl和test,在doc登陆如下:

C:Documents and Settingsyanfeng>sqlplus system/root@orcl as sysdba

SQL*Plus: Release 10.1.0.2.0 - Production on 星期六 5月 24 20:49:21 2008

Copyright (c) 1982, 2004, Oracle.  All rights reserved.

Connected to an idle instance.
登陆后改换其他用户登陆
[color=Red]SQL> conn yanfeng/yanfeng[/color]
ERROR:
ORA-12560: TNS:protocol adapter error


Warning: You are no longer connected to ORACLE.
[color=Red]为什么出现以上问题????[/color]
紧接着在同一个窗口我又再改成如下用户登陆,把数据库打开
SQL> conn system/root@orcl  as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.

Total System Global Area  171966464 bytes
Fixed Size                   787988 bytes
Variable Size             145750508 bytes
Database Buffers           25165824 bytes
Redo Buffers                 262144 bytes
Database mounted.
再接着以如下身份登陆,还是同一窗口
SQL> conn yanfeng/yanfeng@orcl
Connected.
这次成功,想问下这又是为什么,还有我在上面doc已经用这句话[color=Red]“sqlplus system/root@orcl as sysdba”[/color],为什么登陆数据库后切换用户时还是得写如下格式“SQL> conn yanfeng/yanfeng@orcl”(在机上有两个数据库实例orcl和test)

2008-5-24 21:16 晶晶小妹
第一个问题,是因为在数据库没有打开时,只能以AS SYSDBA登录管理用户。这个时候普通用户是无法登录的,道理很简单。用户的密码等信息都是在数据库内存贮着的,数据库没打开,没办法读出密码进行核对。而管理用户不一样,它的密码没有记录在数据库中,而是在密码文件中的。

2008-5-24 21:18 晶晶小妹
第二个问题,你是不是不想用“SQL> conn yanfeng/yanfeng@orcl”,
而想用“SQL> conn yanfeng/yanfeng”登录。
这样的话,使用设置DOS环境变量的命令设置一下:
SET ORACLE_SID=数据库SID
然后再进入SQLPLUS,就可以不用在用户名后加@了

2008-5-24 21:27 yanfenggood
回复 #3 晶晶小妹 的帖子

但我已经用sqlplus system/root@orcl as sysdba
登陆了,为什么切换用户时还是用@orcl啊

2008-5-24 21:27 yanfenggood
回复 #3 晶晶小妹 的帖子

希望您可以解释再清楚一点谢谢你啊

2008-5-24 23:09 晶晶小妹
已经用sqlplus system/root@orcl as sysdba登录,和切换用户是没有关系的。
你切换用户,就是重新登录了。重新登录和上一次登录没有关系。
“CONN 用户/密码@服务名 ” 这是ORACLE的登录命令,不能说因为以前已经登录过谁了,就省略其中的某一部分。

如果你设置了环境变量ORACLE_SID,“@服务名”是可以省略的。

2008-5-25 00:14 yanfenggood
回复 #6 晶晶小妹 的帖子

能否留下您的联系方式qq,如果遇到问题可以问问你谢谢

2008-5-25 22:23 jason_wang2002
@后面跟着的是TNS_NAME
TNS_NAME一般来说是通过tnsnames.ora来解析的,例如以下内容
MTSDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.4.165)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = MTSDB)
    )
  )

第一行MTSDB就是TNS_NAME,通过解析TNS_NAME找到远端的IP和SERVICE_NAME
再通过远端的listener.ora文件把SERVICE_NAME解析成ORACLE_SID
最后连接到具体的数据库

如果只连接本机的ORACLE的话,只要在.bash_profile指定ORACLE_SID和你想连接的数据库SID一样就可以了
下面以Linux为例
$ echo "ORACLE_SID=mtsdb" >> .bash_profile
$ echo "export ORACLE_SID" >> .bash_profile
$ sqlplus /nolog
SQL>conn jason/jason

使用jason用户时不用指定@,oracle会自动连接到mtsdb数据库

[[i] 本帖最后由 jason_wang2002 于 2008-5-26 09:18 编辑 [/i]]

2008-5-26 11:51 yanfenggood
回复 #8 jason_wang2002 的帖子

谢谢

2008-5-27 11:11 zggyl
晶晶小妹回答的很完整了

2008-5-29 23:42 DINGNING239
很简洁,很完美

2008-7-4 11:51 owlstudio
晶晶小妹思路很清晰!赞一个!

2008-7-16 17:01 jiayuping
高手就是不同

高手

页: [1]
查看完整版本: 关于数据库连接问题


Powered by ITPUB论坛