oralce关于密码文件研究与疑问.docx
- 文档编号:10439690
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:17
- 大小:21.03KB
oralce关于密码文件研究与疑问.docx
《oralce关于密码文件研究与疑问.docx》由会员分享,可在线阅读,更多相关《oralce关于密码文件研究与疑问.docx(17页珍藏版)》请在冰豆网上搜索。
oralce关于密码文件研究与疑问
关于密码文件研究与疑问?
平台:
server端;SUSE9 + oracledb10.2.0.1。
client端:
windowsxp+oracleclient10.2.0.1。
下面的tns_connect_string是指windows端的tnsnames.ora文件中配置的连接串。
过程
1.确保suse上没有密码文件。
在suse端启动实例和listener后。
在windows端用"sqlplussys/oracle@tns_connect_stringassysdba"连接。
结果登录失败。
报“insufficientprivileges”。
说明能够连接,只是没有密码文件而无法认证。
2.在suse上的oracle创建密码文件(含sys用户)。
确认remote_login_passwordfile=EXCLUSIVE后重新启动实例(listener也启动)。
这是再在windows上用"sqlplussys/oracle@tns_connect_stringassysdba"连接。
结果登录成功吗,并且可以用sysdba的权限进行各种操作,包括shutdown。
说明在instance和listener启动时,且密码文件存在时,可以远程以sysdba身份连接到数据库(并由密码文件认证而不是数据库内部)。
3.在suse端停止instance而不停listener。
再在windows上用"sqlplussys/oracle@tns_connect_stringassysdba"连接。
结果无法连接,报“ORA-12514:
TNS:
监听程序当前无法识别连接描述符中请求的服务”。
问题出来了:
难道用密码文件方式认证需要先启动instance?
?
4.查阅资料,根据oracle副总写的那个oracle编程艺术上讲的,应该server端未启动instance时,密码文件也可以认证。
我个人从理论分析也觉得oracle副总说的是对的,因为密码文件的存在的价值就是为了解决在数据库没有open前,远程操作数据的用户登录认证问题。
假如需要在server端先启动instance,密码文件才能认证,那密码文件存在的价值就大大的打折了。
但是我从我前面的基本操作看,为什么不行呢?
?
请大家指点?
?
?
这个问题也很好重现,按照上面的做一下就可以了。
我之前也有遇到这样的问题,我的问题是出在监听的名称上,当数据库shutdown以后查看监听的status。
LSNRCTL>status
Connectingto(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUSoftheLISTENER
------------------------
Alias LISTENER
Version TNSLSNRforLinux:
Version10.2.0.1.0-Production
StartDate 13-MAY-200800:
43:
24
Uptime 0days0hr.1min.20sec
TraceLevel off
Security ON:
LocalOSAuthentication
SNMP OFF
ListenerParameterFile /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
ListenerLogFile /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
ListeningEndpointsSummary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)))
Thelistenersupportsnoservices
Thecommandcompletedsuccessfully
这里可以看到,监听不支持任何的服务Thelistenersupportsnoservices。
所以这个时候外界是连接不上server的。
如果启动了数据库,情况就有所不同
LSNRCTL>status
Connectingto(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUSoftheLISTENER
------------------------
Alias LISTENER
Version TNSLSNRforLinux:
Version10.2.0.1.0-Production
StartDate 13-MAY-200800:
43:
24
Uptime 0days0hr.3min.29sec
TraceLevel off
Security ON:
LocalOSAuthentication
SNMP OFF
ListenerParameterFile /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
ListenerLogFile /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
ListeningEndpointsSummary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)))
ServicesSummary...
Service"orcl"has1instance(s).
Instance"orcl",statusREADY,has1handler(s)forthisservice...
Service"orcl_XPT"has1instance(s).
Instance"orcl",statusREADY,has1handler(s)forthisservice...
Thecommandcompletedsuccessfully
我当时也是花了很长的时间才找到原因。
我的监听的名称LISTENER01,而我们用lsnrctlstart启动监听时它默认去找名为LISTENER的监听。
LSNRCTL>status
Connectingto(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUSoftheLISTENER
------------------------
Alias LISTENER#从这里可以看出。
所以解决的办法是更改监听名称,或者lsnrctlstart时指定监听的名称。
lsnrctlstartLISTENER01
在suse端停止instance而不停listener。
再在windows上用"sqlplussys/oracle@tns_connect_stringassysdba"连接。
结果无法连接,报“ORA-12514:
TNS:
监听程序当前无法识别连接描述符中请求的服务”。
问题出来了:
难道用密码文件方式认证需要先启动instance?
?
------------------------------------------
你的数据库是动态注册的,数据库停掉了,自然在监听器上的注册信息就没了,跟你的口令文件无关,只要配置静态注册就可以
感谢并进一步讨论
同意“ora-600”的说法,我改成了静态注册就OK了!
设置如下:
(同时发现,静态注册后,只要实例启动,它同时也会动态向监听器注册)
.........
(SID_DESC=
(GLOBAL_NAME=数据库名.域名)
(ORACLE_HOME=//opt/oracle/product/10.2.0/db_1)
(SID_NAME=实例名)
)
.........
但进一步分析:
我启动listener后,发现其service的名字为“实例名”。
(这个service名字即是tns_conn_string中需要指定的service_name参数)。
但我看文档和oracle副总说:
listener的service名字应该是由listener.ora中的GLOBAL_NAME决定(即两者相同)。
但为什么我这里的listener的service名字与SID_NAME相同?
?
?
请大家指点?
listener启动后对外提供的服务名到底由什么决定?
有显示的参数设置吗?
(并且发现似乎GLOBAL_NAME配置任意字母都可以)
附:
oracle副总关于此问题的解释,它是在9iR2上做的。
...N_ID:
35644258225012
-----------------------------------------------------------
sqlplussys/password@dbnameassysdba
showparameterservice_name
tnsname.ora里面的service_name对应上面查询出的service_name。
tns-12514这个错很经典,之前遇到过,也许此文对你有意义
ORA-12514
ByhuojiaonMay22,2008in数据库技术 andtaggedoracle
今天碰到一个错,很典型。
1.错误ORA-12514
C:
\DocumentsandSettings\Administrator>sqlplusicmadmin/fvt6eip@rmdb
SQL*Plus:
Release10.2.0.3.0-ProductiononFriMay2301:
53:
462008
Copyright(c)1982,2006,Oracle.AllRightsReserved.
ERROR:
ORA-12514:
TNS:
listenerdoesnotcurrentlyknowofservicerequestedinconnect
descriptor
Enteruser-name:
—————————————
tnsname.ora
RMDB=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=)
)
)
2.TNSPing检查
C:
\DocumentsandSettings\Administrator>tnspingrmdb
TNSPingUtilityfor32-bitWindows:
Version10.2.0.3.0-Productionon23-MAY-2
00801:
54:
45
Copyright(c)1997,2006,Oracle.Allrightsreserved.
Usedparameterfiles:
C:
\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
UsedTNSNAMESadaptertoresolvethealias
Attemptingtocontact(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=
)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=)))
OK(10msec)
3.Oracle官方解释:
ORA-12514:
TNS:
listenerdoesnotcurrentlyknowofservicerequestedinconnectdescriptor
Cause:
Thelistenerreceivedarequesttoestablishaconnectiontoadatabaseorotherservice.Theconnectdescriptorreceivedbythelistenerspecifiedaservicenameforaservice(usuallyadatabaseservice)thateitherhasnotyetdynamicallyregisteredwiththelistenerorhasnotbeenstaticallyconfiguredforthelistener.Thismaybeatemporaryconditionsuchasafterthelistenerhasstarted,butbeforethedatabaseinstancehasregisteredwiththelistener.
Action:
-Waitamomentandtrytoconnectasecondtime.
-Checkwhichservicesarecurrentlyknownbythelistenerbyexecuting:
lsnrctlservices
-CheckthattheSERVICE_NAMEparameterintheconnectdescriptorofthenetservicenameusedspecifiesaserviceknownbythelistener.
-Ifaneasyconnectnamingconnectidentifierwasused,checkthattheservicenamespecifiedisaserviceknownbythelistener.
-Checkforaneventinthelistener.logfile.
4.检查ServiceName
SQL>showparameterservice_name;
NAMETYPEVALUE
——————————————————————–
service_namesstringrmdb
果然,rmdb的servicename不是期望的
5.更改ServiceName
SQL>shutdownimmediately
SP2-0717:
illegalSHUTDOWNoption
SQL>shutdown
Databaseclosed.
Databasedismounted.
ORACLEinstanceshutdown.
SQL>startup
ORACLEinstancestarted.
TotalSystemGlobalArea364904448bytes
FixedSize1290640bytes
VariableSize306187888bytes
DatabaseBuffers54525952bytes
RedoBuffers2899968bytes
Databasemounted.
Databaseopened.
SQL>showparameterservice_name;
NAMETYPEVALUE
——————————————————————–
service_namesstring
6.连接成功!
SQL>connicmadmin/fvt6eip@rmdb
Connected.
SQL>
-EOF-
YouAsked
Inthelistener.orafile,wecandefinethevalueofGLOBAL_DBNAMEinSID_DESCsection.
forexample:
(SID_DESC=
(GLOBAL_DBNAME=orachh)
(ORACLE_HOME=D:
\oracle\ora92)
(SID_NAME=orachh)
)
IhavefoundinmanydocswhichsaidthevalueofGLOBAL_DBNAMEmustequaltothevalue
ofservice_name.
DuringmyexperimentsiconcludethatwecanassignarandomvaluetoGLOBAL_DBNAMEsuch
as"abcde"andinthissituationthelistenercanstillstartsuccessfully,itseemsthe
global_namewasonlyanidentifierandhasnotanyimportantfunction:
$lsnrctlstatus
Service"abcde"has1instance(s).
Instance"orachh",statusUNKNOWN,has1handler(s)forthisservice..
SoiwanttoknowWhat'stheuseofGlobal_dbnameandinwhichcircumstanceshouldweuse
it.
Thanksinadvance.
andwesaid...
theglobaldbnameintherewillbetheservicename:
[ora9ir2@localhostadmin]$catlistener.ora
#LISTENER.ORANetworkConfigurationFile:
/home/ora9ir2/network/admin/listener.ora
#GeneratedbyOracleconfigurationtools.
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC))
)
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521))
)
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=/home/ora9ir2)
(PROGRAM=extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=WRONG)
(ORACLE_HOME=/home/ora9ir2)
(SID_NAME=ora9ir2)
)
)
whenIaskthatlistenerwhatservicesdoyouprovide:
[ora9ir2@localhostadmin]$lsnrctlservices
LSNRCTLforLinux:
Version9.2.0.4.0-Productionon27-FEB-200509:
08:
05
Copyright(c)1991,2002,OracleCorporation.Allrightsreserved.
Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
ServicesSummary...
Service"PLSExtProc"has1instance(s).
Instance"PLSExtProc",statusUNKNOWN,has1handler(s)forthisservice...
Handler(s):
"DEDICATED"established:
0refused:
0
LOCALSERVER
Service"WRONG"has1instance(s).
Instance"ora9ir2",statusUNKNOWN,has1handler(s)forthisservice...
Handler(s):
"DEDICATED"established:
0refused:
0
LOCALSERVER
Thecommandcompletedsuccessfully
[ora9ir2@localhostadmin]$
[ora9ir2@localhostadmin]$sh-vxt.sh
sqlplus
'scott/tiger@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain
)(PORT=1521)))(CONNECT_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oralce 关于 密码 文件 研究 疑问
![提示](https://static.bdocx.com/images/bang_tan.gif)