Oracle11gR2在Windows7下出现的"TNS-01190: 用户无权执行所请求的监听程序命令"问题解决

http://blog.sina.com.cn/s/blog_6f62182d0100n0ts.html原址

Oracle11gR2在Windows7下出现的"TNS-01190: 用户无权执行所请求的监听程序命令"问题解决 (2010-11-21 12:01:28)转载▼

标签: windows7 oracle11g tns-01190 it 分类: Oracle
在笔记本上装了一套Windows7和Oracle11gR2,今天执行了一个关闭监听的命令:
 
C:\lsnrctl stop
 
发现无法关闭,出现了下面的错误提示:
---------------------------------------------------------------------------------
LSNRCTL for 32-bit Windows: Version 11.2.0.1.0 - Production on 21-11月-2010 10:4
7:41
Copyright (c) 1991, 2010, Oracle.  All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-01190: 用户无权执行所请求的监听程序命令
---------------------------------------------------------------------------------
 
开始怀疑是Oracle11g对关闭监听有了特别的要求,查了下Error Messages文档对TNS-01190的说明
 
TNS-01190: The user is not authorized to execute the requested listener command Cause: Most of the listener administrative commands are only intended to be issued by privileged users, for example DBAs or system administrators. If the listener password is not set, then the listener only accepts administrative requests from LSNRCTL running with the same OS credentials, or running as a local administrator (also referred to as super user).
Action: If an authorized user is attempting the command, then make sure that LSNRCTL is executed with the same OS user credentials as the running listener, or as a local administrator.
 
找了11g的文档Net Services Administrator's Guide的What's New in Oracle Net Services部分,没有关于监听的新特性说明。
看来是操作系统的用户权限问题,而不是11g的问题。为了验证这个想法,我在Windows2003上安装了11g,并成功地关闭了监听。
 
到metalink搜索关键字TNS-01190看看有没有解决方案,找到文档
Getting TNS-01190 When Running LSNRCTL Stop/Start/Reload After Revoking The Administrator Privileges from The OS User [ID 603490.1]
这是10.2.0.3在Windows Server 2003下出现问题的解决方法,与我的错误提示相同,但是出现问题的原因不同,这个文档介绍了从Oracle用户回收了Administrator权限后出现了这个问题,其解决方法是改操作系统验证为口令验证,设置监听的口令:
 
1. LSNRCTL> set current_listener
 
2. LSNRCTL> change_password
Old password:
New password: (text is not echoed)
Reenter new password: (text is not echoed)
 
3. LSNRCTL> save_config
 
4. LSNRCTL> exit
 
 
执行了上面的操作后,发现没有任何作用。用服务能够启动或打开监听OracleOraDb11g_home1TNSListener,但是这也不是个办法。
最后我找到文件LSNRCTL.EXE,在目录%ORACLE_HOME%\bin下,以鼠标右键单击,选择“以管理员身份运行”,此时出现一个用户帐户控制页面,选择“是”,出现了LSNRCTL提示符。
在这里执行stop,监听成功关闭。
 
如果不想每次都去目录%ORACLE_HOME%\bin下找文件LSNRCTL.EXE,可以改变LSNRCTL.EXE文件的属性。到“兼容性”选项卡下找到“以管理员身份运行此程序”,选中,点确定。
然后以正常方式执行lsnrctl start,lsnrctl stop就可以了。但是每次运行都会出现一个用户帐户控制页面,只要选择“是”就可以了。

你可能感兴趣的:(oracle)