1、-查看 oracle数据库字符集: select userenv(language) from dual;查询结果:SIMPLIFIED CHINESE_CHINA.AL32UTF8-修改 oracle数据库字符集:(在 SQL Plus中)sql conn / as sysdba;sql shutdown immediate;database closed.database dismounted.oracle instance shut down.sql startup mount;oracle instance started.total system global area 135337
2、420 bytesfixed size 452044 bytesvariable size 109051904 bytesdatabase buffers 25165824 bytesredo buffers 667648 bytesdatabase mounted.sql alter system enable restricted session;system altered.sql alter system set job_queue_processes=0;system altered.sql alter system set aq_tm_processes=0;system alte
3、red.sql alter database open;database altered.sql alter database character set internal_use JA16SJIS;sql shutdown immediate;sql startup;安装 oracle 遇到“ 未初始化服务句柄错误“解决方法:修改 sqlnet.ora 中的 SQLNET.AUTHENTICATION_SERVICES= NONE 解释: 三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora ,都是放在$ORACLE_HOMEnetworkadmin 目录下
4、。 重点:三个文件的作用和使用 #- sqlnet.ora-作用类似于 linux 或者其他 unix 的 nsswitch.conf 文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串, 例如我们客户端输入 sqlplus sys/oracleorcl 假如我的 sqlnet.ora 是下面这个样子 SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME) 那么,客户端就会首先在 tnsnames.ora 文件中找 orcl 的记录.如果没有相应的记录则尝试把orcl 当作一个主机名
5、,通过网络的途径去解析它的 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) 这样,也就是客
6、户端解析连接字符串的顺序中有 TNSNAMES 是,才会尝试使用这个文件。 例子中有两个,ORCL 对应的本机,SALES 对应的另外一个 IP 地址,里边还定义了使用主用服务器还是共享服务器模式进行连接,一句一句说 #你所要连接的时候输入得 TNSNAME ORCL = (DESCRIPTION = (ADDRESS_LIST = #下面是这个 TNSNAME 对应的主机,端口,协议 (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521) ) (CONNECT_DATA = #使用专用服务器模式去连接需要跟服务器的模式匹配,如果没
7、有就根据服务器的模式 #自动调节 (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) )
8、) #- 客户端完了我们来看服务器端 listener.ora-listener 监听器进程的配置文件 关于 listener 进程就不多说了,接受远程对数据库的接入申请并转交给 oracle 的服务器进程。所以如果不是使用的远程的连接,listener 进程就不是必需的,同样的如果关闭 listener 进程并不会影响已经存在的数据库连接。 Listener.ora 文件的例子 #listener.ora Network Configuration File: #E:oracleproduct10.1.0Db_2NETWORKADMINlistener.ora # Generated by
9、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:oracleproduct10.1.0Db_2) (SID_NAME = ORCL) ) ) #监听器的名字,一台数据库可以有不止一个监听器 #再
10、向下面是监听器监听的协议,端口等,这里使用的端口,并且使用的是主机名 LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521) ) 上面的例子是一个最简单的例子,但也是最普遍的。一个 listener 进程为一个 instance(SID)提供服务。 监听器的操作命令 $ORACLE_HOME/bin/lsnrctl start,其他诸如 stop,status 等。具体敲完一个 lsnrctl 后看帮助。 上面说到的三个文件都可以通过图形的配置工具来完成配置 $ORACLE_HOME/ne
11、tca 向导形式的 $ORACLE_HOME/netmgr 本人比较习惯 netmgr, profile 配置的是 sqlnet.ora 也就是名称解析的方式 service name 配置的是 tnsnames.ora 文件 listeners 配置的是 listener.ora 文件,即监听器进程 具体的配置可以尝试一下然后来看一下配置文件。 这样一来总体结构就有了,是 当你输入 sqlplus sys/oracleorcl 的时候 1 查询 sqlnet.ora 看看名称的解析方式,发现是 TNSNAME 2 则查询 tnsnames.ora 文件,从里边找 orcl 的记录,并且找到主
12、机名,端口和service_name 3 如果 listener 进程没有问题的话,建立与 listener 进程的连接。 4 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener 采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的 server process。 5 这时候网络连接已经建立,listener 进程的历史使命也就完成了。 #- 几种连接用到的命令形式 1.sqlplus / as sysdba 这是典型的操作系统认证,不需要 listener 进程 2.sqlplus sys/oracle 这种连接方式只能连接本机数据库,同样不需要
13、 listener 进程 3.sqlplus sys/oracleorcl 这种方式需要 listener 进程处于可用状态。最普遍的通过网络连接。 以上连接方式使用 sys 用户或者其他通过密码文件验证的用户都不需要数据库处于可用状态,操作系统认证也不需要数据库可用,普通用户因为是数据库认证,所以数据库必需处于 open状态。 然后就是 #- 平时排错可能会用到的 1lsnrctl status 查看服务器端 listener 进程的状态 LSNRCTL; help The following operations are available An asterisk (*) denotes
14、a modifier or extended command: start stop status services version reload save_config trace change_password quit exit set* show* LSNRCTL; status :em11: 2tnsping 查看客户端 sqlnet.ora 和 tnsname.ora 文件的配置正确与否,及对应的服务器的 listener 进程的状态。 C:;tnsping orcl TNS Ping Utility for 32-bit Windows: Version 10.1.0.2.0 -
15、 Production on 16-8 月 - 2005 09:36:08 Copyright (c) 1997, 2003, Oracle. All rights reserved. Used parameter files: E:oracleproduct10.1.0Db_2networkadminsqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = 127.0
16、.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.or
17、a 文件的。如果你的数据库服务器地址发生改变,就需要重新编辑客户端这个文件。通过 hostname 访问数据库就没有了这个麻烦。 需要修改 服务器端 listener.ora #监听器的配置文件 listener.ora #使用 host naming 则不再需要 tnsname.ora 文件做本地解析 # listener.ora Network Configuration File: d:oracleproduct10.1.0db_1NETWORKADMINlistener.ora # Generated by Oracle configuration tools. SID_LIST_LI
18、STENER = (SID_LIST = (SID_DESC = # (SID_NAME = PLSExtProc) (SID_NAME = orcl) (GLOBAL_DBNAME = boway) (ORACLE_HOME = d:oracleproduct10.1.0db_1) # (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = TC
19、P)(HOST = boway)(PORT = 1521) ) ) 客户端 sqlnet.ora 如果确认不会使用 TNSNAME 访问的话,可以去掉 TNSNAMES # sqlnet.ora Network Configuration File: d:oracleproduct10.1.0db_1NETWORKADMINsqlnet.ora # Generated by Oracle configuration tools. SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (HOSTNAME) Tnsnames.ora
20、 文件不需要配置,删除也无所谓。 下面就是网络和操作系统的配置问题了,怎么样能够解析我的主机名的问题了 可以通过下面的方式连接 sqlplus sys/oracleboway 这样的话,会连接 boway 这台服务器,并且 listener 来确定你所要连接的 service_name。 其中,SERVICE_NAME 未 SID 的名称 非数据库名称ORA-12518: TNS: 监听程序无法分发客户机连接ORACLE 2008-07-12 13:25:55 阅读 395 评论 0 字号:大中小 今天在自己的 T61 上装了 ORACLE10G,成功装好后,连数据库报如下错误:SQL con
21、n sys/sysmy10g as sysdbaERROR:ORA-12518: TNS: 监听程序无法分发客户机连接SQL conn sjh/sjhmy10gERROR:ORA-12518: TNS: 监听程序无法分发客户机连接C:Documents and Settingsis_sjhtnsping my10gTNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 12-3 月 -2008 19:59:46Copyright (c) 1997, 2005, Oracle. All rights rese
22、rved.已使用的参数文件:c:oracleproduct10.2.0db_1networkadminsqlnet.ora已使用 TNSNAMES 适配器来解析别名Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521) (CONNECT_DATA = (SERVICE_NAME = oracsjh)OK (20 毫秒)TNSNAMES.ORA 的内容如下:MY10G =(DESCRIPTION =(ADDRESS_LIST =(
23、ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)(CONNECT_DATA =(SERVICE_NAME = oracsjh)listner.ora 的内容如下:# listener.ora Network Configuration File: c:oracleproduct10.2.0db_1NETWORKADMINlistener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME =
24、 PLSExtProc)(ORACLE_HOME = c:oracleproduct10.2.0db_1)(PROGRAM = extproc)(SID_DESC =(GLOBAL_DBNAME = oracsjh)(ORACLE_HOME = c:oracleproduct10.2.0db_1)(SID_NAME = oracsjh)LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = WWW-D413A159A8B)(PORT = 1521)(DESCRIPTION =(ADDRESS =
25、 (PROTOCOL = IPC)(KEY = EXTPROC0)一再检查没发现什么问题啊,后来用 OS 认证的方式连到 DB 上一看才知道自己犯了一个很低级的错误。INSTANCE NAME 跟两个配置文件的配置不一样。将 oracsjh 改为跟数据库 INSTANCE 名一样:sjhorac问题解决。为了证实自己的想法,我又让问题重现:TNSNAMES.ORA 的内容如下:MY10G =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)(CONNECT_DATA =(
26、SERVICE_NAME = ABC)listner.ora 的内容如下:# listener.ora Network Configuration File: c:oracleproduct10.2.0db_1NETWORKADMINlistener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = PLSExtProc)(ORACLE_HOME = c:oracleproduct10.2.0db_1)(PROGRAM = extproc)(SID_
27、DESC =(GLOBAL_DBNAME = ABC)(ORACLE_HOME = c:oracleproduct10.2.0db_1)(SID_NAME = ABC)LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = WWW-D413A159A8B)(PORT = 1521)(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)将 SERVICE_NAME ,GLOBAL_DBNAME ,SID_NAME 改为 ABC。重起 LI
28、STENER。TNSPING 依然是可以的。C:Documents and Settingsis_sjhtnsping my10gTNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 12-3 月 -2008 20:47:52Copyright (c) 1997, 2005, Oracle. All rights reserved.已使用的参数文件:c:oracleproduct10.2.0db_1networkadminsqlnet.ora已使用 TNSNAMES 适配器来解析别名Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521) (CONNECT_DATA = (SERVICE_NAME = ORAC)OK (10 毫秒)-问题重现:SQL conn sjh/sjhmy10gERROR:ORA-12518: TNS: 监听程序无法分发客户机连接总结:ORACLE 网络配置这块要特别小心,大多数错误都是由这些配置文件没有配置好而引起的。当然也有些比较特殊的情况。在解决问题的过程中看了一些资料很值的参考:http:/