全部博文(101)
分类: Oracle
2011-04-19 18:20:48
Oracle10g数据库windows环境下有多个实例时,在没有监听的情况下,如何在本机登录研究测试。
1.运行环境:
操作系统:windows xp sp3
Oracle数据库版本:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
硬件:笔记本电脑
2.在电脑中,我已经安装了2个实例,snapall和jacky。
其中实例snapall下有建了用户snapall,密码snapall;其它用户的密码都是snapall
实例jacky下建了用户jacky,密码jacky;其它用户的密码都是you12323
3.下面有三种连接用到的命令形式
1.sqlplus / as sysdba 这是典型的操作系统认证,不需要listener进程
2.sqlplus sys/oracle 这种连接方式只能连接本机数据库,同样不需要listener进程
3.sqlplus 这种方式需要listener进程处于可用状态。最普遍的通过网络连接
4.首先两个实例都是运行着的。有如下截图。
然后我进行了如下操作:
4.1我用第3种连接方法来测试一下,看是否属实。
我会先用命令来想网友验证一下监听的状态。
C:/Documents and Settings/jacky>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 18-3月 -2011 13:
2:37
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听程序
32-bit Windows Error: 61: Unknown error
C:/Documents and Settings/jacky>sqlplus/nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 3月 18 13:22:45 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn sys/you12323@jacky as sysdba;
ERROR:
ORA-12541: TNS: 无监听程序
SQL> conn sys/snapall@snapall as sysdba;
ERROR:
ORA-12541: TNS: 无监听程序
结果测试下来真的无法连接。因为没有监听。
4.2接下来我用第1种方法来测试一下,但是我们有个疑问,如果用这种方法,到底是连接到哪个实例了?我们来实际测试一下:
C:/Documents and Settings/jacky>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 18-3月 -2011 13:2
6:44
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听程序
32-bit Windows Error: 61: Unknown error
C:/Documents and Settings/jacky>sqlplus/nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 3月 18 13:26:49 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba;
已连接。
SQL> show user;
USER 为 "SYS"
SQL> select name from v$database;
NAME
---------
JACKY
SQL>
现在我们发现,用这个方式可以登录到数据库,但是产生一个新的问题,为什么连接的是jacky,而不是snapall,在这里我补充个情况,因为我是先安装的实例snapall,然后安装的实例jacky,当然这个到底是什么原因就需要去推敲了。
4.3接下来我们用第2种连接方法来测试一下:
C:/Documents and Settings/jacky>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 18-3月 -2011 13:
4:20
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在连接到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS: 无监听程序
TNS-12560: TNS: 协议适配器错误
TNS-00511: 无监听程序
32-bit Windows Error: 61: Unknown error
C:/Documents and Settings/jacky>sqlplus/nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 3月 18 13:34:24 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn system/snapall;
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> conn system/you12323;
已连接。
SQL> show user;
USER 为 "SYSTEM"
SQL> select name from v$database;
NAME
---------
JACKY
SQL> conn jacky/jacky;
已连接。
SQL> show user;
USER 为 "JACKY"
SQL> select name from v$database;
NAME
---------
JACKY
SQL> conn snapall/snapall;
ERROR:
ORA-01017: invalid username/password; logon denied
警告: 您不再连接到 ORACLE。
SQL>
通过以上命令,发现此时我们用这些命令连接的还是默认的jacky实例。至于为什么无法连接到snapall实例需要来查原因了。
5.也许你们看了上面的会怀疑我是否做了什么其它操作,或者说怀疑数据库实例根本没有运行。所以我下面要启动并配置监听看是否可以连接到数据库实例。
5.1现在我先贴出listenter.ora的内容
# listener.ora Network Configuration File: E:/oracle/product/10.2.0/db_1/NETWORK/ADMIN/listener.ora
# Generated by Oracle configuration tools.
LISTENER1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = bk-fda996f2e2e9)(PORT = 1522))
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = snapall)
(ORACLE_HOME = E:/oracle/product/10.2.0/db_1)
(SID_NAME = snapall)
)
)
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = jacky)
(ORACLE_HOME = E:/oracle/product/10.2.0/db_1)
(SID_NAME = jacky)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = bk-fda996f2e2e9)(PORT = 1521))
)
5.2以下是tnsnames.ora的内容
# tnsnames.ora Network Configuration File: E:/oracle/product/10.2.0/db_1/NETWORK/ADMIN/tnsnames.ora
# Generated by Oracle configuration tools.
SNAPALL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = bk-fda996f2e2e9)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = snapall)
)
)
JACKY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = bk-fda996f2e2e9)(PORT = 1522))
)
(CONNECT_DATA =
(SERVICE_NAME = jacky)
)
)
5.3现在我用命令来开始两个监听服务,一个是对数据库实例snapall的监听,另外一个是对实例jacky的监听。端口号也不一样。
C:/Documents and Settings/jacky>lsnrctl start listener
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 18-3月 -2011 13:5
5:53
Copyright (c) 1991, 2005, Oracle. All rights reserved.
启动tnslsnr: 请稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
系统参数文件为E:/oracle/product/10.2.0/db_1/network/admin/listener.ora
写入E:/oracle/product/10.2.0/db_1/network/log/listener.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bk-fda996f2e2e9)(PORT=1521)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=bk-fda996f2e2e9)(PORT=1521)
))
LISTENER 的 STATUS
------------------------
别名 listener
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 18-3月 -2011 13:55:54
正常运行时间 0 天 0 小时 0 分 1 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 E:/oracle/product/10.2.0/db_1/network/admin/listener.o
ra
监听程序日志文件 E:/oracle/product/10.2.0/db_1/network/log/listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bk-fda996f2e2e9)(PORT=1521)))
服务摘要..
服务 "snapall" 包含 1 个例程。
例程 "snapall", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
C:/Documents and Settings/jacky>lsnrctl start listener1
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 18-3月 -2011 13:5
5:59
Copyright (c) 1991, 2005, Oracle. All rights reserved.
启动tnslsnr: 请稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
系统参数文件为E:/oracle/product/10.2.0/db_1/network/admin/listener.ora
写入E:/oracle/product/10.2.0/db_1/network/log/listener1.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bk-fda996f2e2e9)(PORT=1522)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=bk-fda996f2e2e9)(PORT=1522)
))
LISTENER 的 STATUS
------------------------
别名 listener1
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
启动日期 18-3月 -2011 13:56:00
正常运行时间 0 天 0 小时 0 分 1 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 E:/oracle/product/10.2.0/db_1/network/admin/listener.o
ra
监听程序日志文件 E:/oracle/product/10.2.0/db_1/network/log/listener1.lo
g
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=bk-fda996f2e2e9)(PORT=1522)))
服务摘要..
服务 "jacky" 包含 1 个例程。
例程 "jacky", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
C:/Documents and Settings/jacky>
5.4现在我再用命令来登录到数据库,看是否可以登录,特别是数据库实例snapall。
C:/Documents and Settings/jacky>sqlplus/nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 3月 18 13:58:54 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn sys/snapall@snapall as sysdba;
已连接。
SQL> select name from v$database;
NAME
---------
SNAPALL
SQL> conn system/snapall@snapall;
已连接。
SQL> select name from v$database;
NAME
---------
SNAPALL
SQL> conn snapall/snapall@snapall as sysdba;
已连接。
SQL> select name from v$database;
NAME
---------
SNAPALL
SQL> conn sys/you12323@jacky as sysdba;
已连接。
SQL> select name from v$database;
NAME
---------
JACKY
SQL> conn system/you12323@jacky;
已连接。
SQL> select name from v$database;
NAME
---------
JACKY
SQL> conn jacky/jacky@jacky;
已连接。
SQL> select name from v$database;
NAME
---------
JACKY
SQL>
6.总结
从上面的情况来看,其实数据库实例snapall和jacky都是运行的,而且可以连接的。但是如果都要可以从数据库服务器本机连接,应该要通过设置监听才可以。否则只能连接到系统默认的一个实例中去。当然还有一种办法,就是关闭掉其它实例,只剩下一个实例,当然如果只是剩下一个实例,就没有必要去讨论目前的这个问题了。呵呵
如果有高手知道怎么在windows系统数据库服务器中不设置监听,又可以连接多个实例。可以将知识与大家共享,谢谢!
--首先跟大家说句对不起,小弟由于知识有限,这篇文章有限误导大家。刚刚发现在windows环境下,如果安装多个实例的话
如果没有监听,可以设置oracle_sid环境变量,这样就可以连接各个实例了,但是同时只能连接一个。
在命令行下面输入:set oracle_sid
如果环境变量没有设置,可以set oracle_sid=实例名,
这样你那个实例就可以连接了。呵呵,大家去试试吧!