时间: 2021-07-31 作者:daque
迩来看到许多人说到tns大概数据库不许登录等题目,就痛快归纳了底下的文书档案。 开始来说oracle的搜集构造,来往杂处说能加上加密、ldap之类。。这边不做计划,中心放在基础的搜集构造也即是咱们最常用的这种情景 三个摆设文献 listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$oracle_home\network\admin目次下。 中心:三个文献的效率和运用 #----------------------- sqlnet.ora-----效率一致于linux大概其余unix的nsswitch.conf文献,经过这个文献来确定如何样找一个贯穿中展示的贯穿字符串, 比方咱们存户端输出 sqlplus sys/oracle@orcl 假设我的sqlnet.ora是底下这个格式 sqlnet.authentication_services= (nts) names.directory_path= (tnsnames,hostname) 那么,存户端就会开始在tnsnames.ora文献中找orcl的记载.即使没有相映的记载则试验把orcl看成一个长机名,经过搜集的道路去领会它的ip地方而后去贯穿这个ip上global_dbname=orcl这个范例,固然我这边orcl并不是一个长机名 即使我是这个格式 names.directory_path= (tnsnames) 那么存户端就只会从tnsnames.ora搜索orcl的记载 括号中再有其余选项,如ldap等并不常用。 #------------------------ tnsnames.ora------这个文献一致于unix 的hosts文献,供给的tnsname到长机名大概ip的对应,惟有当sqlnet.ora中一致 names.directory_path= (tnsnames) 如许,也即是存户端领会贯穿字符串的程序中有tnsnames是,才会试验运用这个文献。 例子中有两个,orcl 对应的本机,sales对应的其余一个ip地方,里边还设置了运用主用效劳器仍旧共享效劳器形式举行贯穿,一句一句说 #你所要贯穿的功夫输出得tnsname orcl = (description = (address_list = #底下是这个tnsname对应的长机,端口,和议 (address = (protocol = tcp)(host = 127.0.0.1)(port = 1521)) ) (connect_data = #运用专用效劳器形式去贯穿须要跟效劳器的形式配合,即使没有就按照效劳器的形式 #机动安排 (server = dedicated) #对应service_name,sqlplus>show parameter service_name; #举行察看 (service_name = orcl) ) ) #底下这个一致 sales = (description = (address_list = (address = (protocol = tcp)(host = 192.168.188.219)(port = 1521)) ) (connect_data = (server = dedicated) (service_name = sales) ) ) #---------------------- 存户端结束咱们来看效劳器端 listener.ora------listener监听器过程的摆设文献 对于listener过程就不多说了,接收长途对数据库的接入请求并转送给oracle的效劳器过程。以是即使不是运用的长途的贯穿,listener过程就不是必定的,同样的即使封闭listener过程并不会感化仍旧生存的数据库贯穿。 listener.ora文献的例子 #listener.ora network configuration file: #e:\oracle\product\10.1.0\db_2\network\admin\listener.ora # generated by oracle configuration tools. #底下设置listener过程为哪个范例供给效劳 #这边是orcl,而且它对应的oracle_home和global_dbname #个中global_dbname不是必定的只有运用hostname做数据库贯穿 sid_list_listener = (sid_list = (sid_desc = (global_dbname = boway) (oracle_home = e:\oracle\product\10.1.0\db_2) (sid_name = orcl) ) ) #监听器的名字,一台数据库不妨有不只一个监听器 #再向底下是监听器监听的和议,ip,端口等,这边运用的tcp1521端口,而且使#用的是长机名 listener = (description = (address = (protocol = tcp)(host = boway)(port = 1521)) ) 上头的例子是一个最大略的例子,但也是最一致的。一个listener过程为一个instance(sid)供给效劳。 监听器的操纵吩咐 $oracle_home/bin/lsnrctl start,其余诸如stop,status等。简直敲完一个lsnrctl后看扶助。 上头说到的三个文献都不妨经过图形的摆设东西来实行摆设 $oracle_home/netca 引导情势的 $oracle_home/netmgr 自己比拟风气netmgr, profile 摆设的是sqlnet.ora也即是称呼领会的办法 service name 摆设的是tnsnames.ora文献 listeners摆设的是listener.ora文献,即监听器过程 简直的摆设不妨试验一下而后来看一下摆设文献。 如许一来总体构造就有了,是当你输出sqlplus sys/oracle@orcl的功夫 1. 查问sqlnet.ora看看称呼的领会办法,创造是tnsname 2. 则查问tnsnames.ora文献,从里边找orcl的记载,而且找到长机名,端口和service_name 3. 即使listener过程没有题目的话,创造与listener过程的贯穿。 4. 按照各别的效劳器形式如专用效劳器形式大概共享效劳器形式,listener采用接下来的举措。默许是专用效劳器形式,没有题目的话存户端就贯穿上了数据库的server process。 5. 这功夫搜集贯穿仍旧创造,listener过程的汗青工作也就实行了。 #--------------- 几种贯穿用到的吩咐情势 1.sqlplus / as sysdba 这是典范的操纵体例认证,不须要listener过程 2.sqlplus sys/oracle 这种贯穿办法只能贯穿本机数据库,同样不须要listener过程 3.sqlplus sys/oracle@orcl 这种办法须要listener过程居于可用状况。最一致的经过搜集贯穿。 之上贯穿办法运用sys用户大概其余经过暗号文献考证的用户都不须要数据库居于可用状况,操纵体例认证也不须要数据库可用,普遍用户由于是数据库认证,以是数据库必定居于open状况。 而后即是 #------------- 平常排错大概会用到的 1.lsnrctl status察看效劳器端listener过程的状况 lsnrctl> help the following operations are available an asterisk (*) denotes a modifier or extended command: start stop status services version reload save_config trace change_password quit exit set* show* lsnrctl> status 2.tnsping 察看存户端sqlnet.ora和tnsname.ora文献的摆设精确与否,及对应的效劳器的listener过程的状况。 c:\>tnsping orcl tns ping utility for 32-bit windows: version 10.1.0.2.0 - production on 16-8月 - 2005 09:36:08 copyright (c) 1997, 2003, oracle. all rights reserved. used parameter files: e:\oracle\product\10.1.0\db_2\network\admin\sqlnet.ora used tnsnames adapter to resolve the alias attempting to contact (description = (address_list = (address = (protocol = tcp) (host = 127.0.0.1)(port = 1521))) (connect_data = (server = dedicated) (service_ name = orcl))) ok (20 msec) 3. sql>show sga 察看instance能否仍旧启用 sql> select open_mode from v$database; 察看数据库是翻开仍旧mount状况。 open_mode ---------- read write #----------------- 运用hostname考察数据库而不是tnsname的例子 运用tnsname考察数据库是默许的办法,然而也带来点题目,那即是存户端都是须要摆设tnsnames.ora文献的。即使你的数据库效劳器地方爆发变换,就须要从新编纂存户端这个文献。经过hostname考察数据库就没有了这个烦恼。 须要窜改 效劳器端listener.ora #监听器的摆设文献listener.ora #运用host naming则不复须要tnsname.ora文献做当地领会 # listener.ora network configuration file: d:\oracle\product\10.1.0\db_1\network\admin\listener.ora # generated by oracle configuration tools. sid_list_listener = (sid_list = (sid_desc = # (sid_name = plsextproc) (sid_name = orcl) (global_dbname = boway) (oracle_home = d:\oracle\product\10.1.0\db_1) # (program = extproc) ) ) listener = (description_list = (description = (address = (protocol = ipc)(key = extproc)) ) (description = (address = (protocol = tcp)(host = boway)(port = 1521)) ) ) 存户端sqlnet.ora 即使确认不会运用tnsname考察的话,不妨去掉tnsnames # sqlnet.ora network configuration file: d:\oracle\product\10.1.0\db_1\network\admin\sqlnet.ora # generated by oracle configuration tools. sqlnet.authentication_services= (nts) names.directory_path= (hostname) tnsnames.ora文献不须要摆设,简略也无所谓。 底下即是搜集和操纵体例的摆设题目了,如何样不妨领会我的长机名的题目了 不妨经过底下的办法贯穿 sqlplus sys/oracle@boway 如许的话,会贯穿boway这台效劳器,而且listener来决定你所要贯穿的service_name。