ORACLE的三个配置文件介绍
概述
在oracle安装目录$HOME/network/admin下,,经常看到sqlnet.ora tnsnames.ora listener.ora这三个文件,除了tnsnames.ora,其他两个文件详细的用途很多人都不太了解。
sqlnet.ora 用在oracle client端,用于配置连接服务端oracle的相关参数.
tnsnames.ora 用在oracle client端,用户配置连接数据库的别名参数,就像系统中的hosts文件一样。
listener.ora 用在oracle server端,配置oracle服务端程序的监听办法,比如限制某些ip等参数。
在安装目录$HOME/network/admin/samples下,会看到如上上个文件的示例文件,里面会有相关参数的说明和用法,如果遇到什么问题,大家可以对照这些示例文件中相关参数的说明进行解决。
如果连接数据库出了什么问题,在保证网络出正常,没有防火墙干扰的情况下,查找问题的步骤是:
1)在客户端顺序检查sqlnet.ora,tnsnames.ora是有问题。
2)在服务器端检查listener.ora配置,并且保证监听程序启动,数据库服务加载。
认识sqlnet.ora
下面只讲述几个常用参数配置,详细的资料,大家可以查看示例sqlnet.ora得到。
sqlnet.ora可以删除,这样在oracle客户端连接数据库的时候,默认采用tnsnames.ora中的配置。
1).NAMES.DEFAULT_DOMAIN
域名domain定义,在你用sqlplus访问数据库的时候,会在tns别名后面加上".domain"
示例:
sqlnet.ora中:
NAMES.DEFAULT_DOMAIN=com
tnsnames.ora中的tns定义如下:
local_dev =
(DEION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = linuxdb)
)
)
在客户端执行命令:sqlplus username/password@local_dev的时候,会出现如下错误信息:
"ORA-12154: TNS: 无法处理服务名"或者"ORA-12154: TNS:could not resolve service name"这样的错误信息。
因为sqlplus username/password@local_dev的时候,将tns别名“local_dev”转换成了“local_dev.com”,所以local_dev.com在tnsnames.ora中找不到,就报错了。
修改tnsnames.ora中的定义如下:
local_dev.com =
(DEION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = linuxdb)
)
)
再执行sqlplus username/password@local_dev,连接成功。
2)NAMES.DIRECTORY_PATH
定义了在客户端连接数据库时,采用什么样的匹配方式。
示例
sqlnet.ora内容如下:
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
那么在客户端执行sqlplus username/password@local_dev连接数据库的时
首先采用tnsnames.ora的别名配置连接数据库;如果连接上;
再采用ONAMES进行解析,最后采用主机名进行解析;
ONAMES表示Oracle使用自己的名称服务器(Oracle Name Server)来解析,目前Oracle建议使用轻量目录访问协议LDAP来取代ONAMES;
HOSTNAME表示使用host文件,DNS,NIS等来解析;
3)SQLNET.AUTHENTICATION_SERVICES
定义登录数据库的认证方式。
NONE表示Oracle数据库身份验证,NTS表示操作系统身份验证,两种方式可以并用。
可以设置成SQLNET.AUTHENTICATION_SERVICES=(NONE,NTS)先后顺序表明验证的优先方式。
示例
sqlnet.ora内容如下:
SQLNET.AUTHENTICATION_SERVICES=(NONE)
在命令行上执行如下命令:
sqlplus "/ as sysdba"时,执行失败。
提示错误信息ORA-01031: insufficient privileges
这个参数默认没有设置。
认识tnsnames.ora
提供了客户端连接某个数据库的详细信息,主机地址,端口,数据库实例名等。
下面给出一个示例来说明问题:
local_dev =
(DEION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = linuxdb)
)
)
PROTOCOL参数一般是TCP,可以根据服务器情况选择一种配置方式。
HOST 一般是ip地址,也可以是主机名,这个主机名字只要能用ping hostname通就行,一般在客户端系统的host文件上配好主机名和ip地址的映射关系。
ORT 标准是1521,根据服务器端的监听端口而定。S
ERVICE_NAME 就是数据库的服务名,用system用户登陆后,sqlplus> show parameter service_name命令查看。
这个配置文件平时大家都用得比较多,一般人都会,相信不会有太大问题。
认识listener.ora
tnslsnr进程是监听、并接受远程连接数据库请求的监听进程,listener.ora是tnslsnr进程的配置文件,监听的参数都是从该配置文件中读取。
该文件位于服务端,如果只安装oracle客户端,一般不存在这个文件。
如果你只需要在本地连接数据库,不接受远程连接,那么也不需要启动tnslsnr进程,也不需要去维护listener.ora文件。
启动监听进程的命令,在命令模式下,执行lsnrctl start命令就启动了监听进程tnslsnr。
监听可以有多个,也就是说,可以同时监听多个oracle实例,可以在listener.ora中定义多个监听器进行监听。
下面给出一个简单的示例
listener.ora中的内容:
LISTENER_CSB =
(DEION_LIST =
(DEION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.9.14)(PORT = 1621))
)
)
)
SID_LIST_LISTENER_CSB =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db)
(SID_NAME = zjdevcsb)
)
)
#############################################
LISTENER_CSA =
(DEION_LIST =
(DEION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.70.9.14)(PORT = 1521))
)
)
)
SID_LIST_LISTENER_CSA =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME = /u02/oracle/app/oracle/product/10.2.0/db)
(SID_NAME = zjdevcsa)
)
)
在上面:
1). LISTENER_CSB,LISTENER_CSA定义了监听器的两个监听名字,和这两个监听器监听的参数:ip,port等。
2). SID_LIST_LISTENER_CSB,SID_LIST_LISTENER_CSA定义了两个监听服务,服务名字格式SID_LIST_,lsnrname就是上面两个监听器的名字,指定了这个服务将会接受的服务将提交给那个监听器;监听的实例名zjdevcsb,zjdevcsa是在tnsnames.ora中需要指定的SERVICE_NAME参数对应。
详细的参数说明可以查看示例的listener.ora文件。
启动数据库
先说一下数据库的相关定义术语
数据库 是指在物理磁盘上的文件数据,就是表空间文件的集合,只能有一个,并唯一;就像类的定义。
实例 是加载数据库文件的一个服务,或者进程。对同一个数据库,可以有多个实例,比如rac模式,多个实例都是加载同一份物理数据。
oracle用户登录主机:
1) 启动数据库实例
首先执行命令sqlplus "/ as sysdba"用数据库系统管理员角色登录,然后执行startup启动数据库实例,关闭数据库实例执行用shutdown命令。如果不需要从远程连接数据库,那么你就可以在本机登录数据库了。执行sqlplus username/password就可以正确登录数据库。
2) 监听
启动监听,执行命令lsnrctl start,可以用lsnrctl status查看监听状态,如果监听成功启动,那么就可以在远程连接数据库了,执行命令sqlplus username/password@tnsname;
关闭监听,执行命令lsnrctl stop。
远程连接数据库
当你执行命令sqlplus username/password@tnsname的时,一般处理过程如下:
1) 查询sqlnet.ora看看名称的解析方式,发现是TNSNAME,或者hostname。
2) 则查询tnsnames.ora文件,从里边找tnsname的记录,并且找到主机名,端口和service_name。
3) 如果listener进程没有问题的话,建立与listener进程的连接。
4) 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的server process。
5) 这时候网络连接已经建立,listener进程的历史使命也就完成了。
如果在连接数据库的时候,出现什么错误,可以按照上面的顺序查找相应的配置,解决问题。
几种连接数据库用到的命令形式
sqlplus "/ as sysdba" 这是典型的操作系统认证,不需要listener进程,数据库即使不可用也可以登录。
sqlplus username/password 不需要listener进程,登录本机数据库,数据库实例启动即可。
sqlplus username/password@tnsname需要listener进程,最常见的远程登录模式,需要启动数据库实例和listener进程。
本文涉及的相关术语
Db_domain:定义一个数据库所在的域,该域的命名同互联网的’域’没有任何关系,只是数据库管理员为了更好的管理分布式数据库而根据实际情况决定的。当然为了管理方便,可以将其等于互联网的域。
Global_name:对一个数据库(Oracle database)的唯一标识,oracle建议用此种方法命令数据库。该值是在创建数据库是决定的,缺省值为Db_name. Db_domain。在以后对参数文件中Db_name与Db_domain参数的任何修改不影响Global_name的值,如果要修改Global_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO 命令进行修改,然后修改相应参数。
Service_name:该参数是oracle8i新引进的。在8i以前,我们用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service name 必须与SID一样。
Oracle 主要配置文件:
profile文件,oratab 文件,数据库实例初始化文件 initSID.ora,监听配置文件, sqlnet.ora 文件,tnsnames.ora 文件
1.2 Oracle 主要配置文件介绍
1.2.1 /etc/profile 文件
系统级的环境变量一般在/etc/profile 文件中定义 在 CAMS 系统 与数据库
相关的环境变量就定义在/etc/profile 文件中 如下所示
export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/8.1.7 export PATH=$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib export ORACLE_SID=cams export ORACLE_TERM=vt100 export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export NLS_LANG=AMERICAN.ZHS16CGB231280 |
说明
1 配置上述环境变量要注意定义的先后顺序
如:
定义 ORACLE_HOME
时 用 到 了 ORACLE_BASE,那 么 ORACLE_HOME 的 定 义 应 该 在
ORACLE_BASE之后
2 使用中文版
CAMS 环境变量 NLS_LANG 的值应该设置为
AMERICAN.ZHS16CGB231280 如上所示在使用英文版 CAMS时 可
以不设置 NLS_LANG 即去掉 export NLS_LANG=... ... 那一行 也可以
设置 NLS_LANG 的值为 AMERICAN_AMERICA.US7ASCII
1.2.2 /etc/oratab 文件
/etc/oratab 文件描述目前系统中创建的数据库实例 以及是否通过 dbstart 和
dbshut 来控制该实例的启动与关闭 如下所示 忽略以#开头的注释部分 :
cams:/u01/app/oracle/product/8.1.7:Y
其中 cams 为实例 ID /u01/app/oracle/product/8.1.7为 ORACLE_HOME目
录 Y表示允许使用 dbstart和 dbshut 启动和关闭该实例数据库 如果设置为
N 表示不通过 dbstart 和 dbshut 启动和关闭实例数据库 CAMS 系统要求在
安装完 ORACLE 后要求将该参数修改为 Y 以保证 ORACLE 数据库自启动和关闭
1.2.3 数据库实例初始化文件 initSID.ora
每个数据库实例都有一个初始化 参数文件 其缺省 存放的路径为
$ORACLE_BASE/admin//pfile 其名称为 init.ora 如 cams 实
例 对 应 的 参 数 文 件 为 initcams.ora 缺 省 存 放 路 径 为
$ORACLE_BASE/admin/cams/pfile 即/u01/app/oracle/admin/cams/pfile
但 在 CAMS 应 用 中 initcams.ora 的 存 放 路 径 为
/u02/app/oracle/admin/cams/pfile 这是基于数据与应用程序分开存放更好地
保护数据考虑的 尤其在 CAMS 双机应用模式下 能够保证数据的一致性
具体的修改操作可参考 Linux与 Oracle 安装手册
初始化参数文件是一个包含实例配置参数的文本文件 这些参数被设置为特
定的值 用于初始化 Oracle 实例的多数内存和进程设置 以下是一些主要参
数的说明
1 实例的数据库名称
db_name = "cams" |
2 实例名称
instance_name = cams |
3 数据库控制文件的名称和位置
control_files = ("/u02/app/oracle/oradata/cams/control01.ctl", "/u02/app/oracle/oradata/cams/control02.ctl", "/u02/app/oracle/oradata/cams/control03.ctl") |
4 调度作业队列的 SNP 进程的数量以及 SNP 进程觉醒时间间隔秒
JOB_QUEUE_PROCESSES=2 JOB_QUEUE_INTERVAL=60 |
5 存储追踪和告警文件的路径
user_dump_dest 指定记录 Oracle 用户进程产生的追踪和告警信息的文件的
存放路径 background_dump_dest 指定记录 Oracle 后台进程产生的追踪和
告警信息的文件的存放路径 core_dump_dest指定Oracle运行所产生的coredump
信息的文件的存放路径.
background_dump_dest = /u02/app/oracle/admin/cams/bdump core_dump_dest = /u02/app/oracle/admin/cams/cdump user_dump_dest = /u02/app/oracle/admin/cams/udump |
6 UTL_FILE_DIR 参数
UTL_FILE_DIR = * |
UTL_FILE_DIR 参数指定一个或多个目录用于 Oracle 应用的文件 I/O 如备
份数据到文件 在 CAMS 系统中将该值设置为 * 表示可供 Oracle 应
用进行文件 I/O操作的目录为任意目录 因此 只要空间允许 可以将备份数
据存放到任意目录下
1.2.4 监听配置文件
为了使得外部进程 如 CAMS后台程序 能够访问 Oracle 数据库 必须配
置 Oracle 网络服务器环境 配置 Oracle 网络服务器环境是通过配置
listener.ora sqlnet.ora 和 tnsnames.ora 共三个文件来进行的 listener.ora
即监听配置文件 在本小节说明 另两个文件分别在随后的两个小节说明
监听配置文件 listener.ora 的存放路径为 $ORACLE_HOME/network/admin
以下是一个示例
LISTENER = #监听器名称 (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = localhost.localdomain) (PORT = 1521)) ) ) (DESCRIPTION = (PROTOCOL_STACK = (divSENTATION = GIOP) (SESSION = RAW) ) (ADDRESS = (PROTOCOL = TCP) (HOST = localhost.localdomain) (PORT = 2481)) ) ) SID_LIST_LISTENER = #命名规则 SID_LIST_+上面定义的监听器名称 (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc1) (ORACLE_HOME = /u01/app/oracle/product/8.1.7) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = cams) (ORACLE_HOME = /u01/app/oracle/product/8.1.7) (SID_NAME = cams) ) (SID_DESC = (GLOBAL_DBNAME = oid) (ORACLE_HOME = /u01/app/oracle/product/8.1.7) (SID_NAME = oid) ) ) |
说明
1 listener.ora 文件中定义一个监听器 其缺省的名称为 LISTENER
这个监听器缺省以tcp/ip为协议地址且端口号为1521运行 在CAMS应用中
监听文件定义的监听器就使用这个缺省名字 并且使用缺省的协议 tcp/ip
和缺省的端口号 1521 待配置好监听文件以及随后说明的 sqlnet.ora 和
tnsnames.ora 文件之后 就可以用以下命令将监听文件中定义的监听器启动
起来
$ lsnrctl start |
停止监听器的命令为
$ lsnrctl stop |
监测监听器当前状态的命令为
$ lsnrctl status 当 lsnrctl status 命令有如下输出结果
就说明监听器正在运行 否则说明监听器已经停止了 CAMS 系统的后台程 序的正常运行不仅依赖于数据库实例的运行 还依赖于这个数据库监听器的 运行 假如监听器没有启动 即使数据库已经启动 CAMS 后台程序仍然不 能正常工作
2 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))所示的一个 IPC 协议地址的监听 是为了外部进程调用用的 在数据库安装时自动设定 不需要改动
3 在监听文件后部还有一个 SID_LIST_LISTENER 段 该段用于定义监听 器的服务 即为哪些数据库实例提供监听服务 以 cams 实例为例 其对应的 服务信息为
1.2.5 sqlnet.ora 文件
sqlnet.ora 文件的存放路径为 $ORACLE_HOME/network/admin 以下是一个示例
说明 NAMES.DEFAULT_DOMAIN 指定网络域名 NAMES.DIRECTORY_PATH 指定当解析客户端连接标识符时命名方法 naming metthods 采用的优先顺 序 从左至右递减,在 CAMS 应用中, 这两个参数采用上述所示的系统缺省值
1.2.6 tnsnames.ora 文件
tnsnames.ora 文件的存放路径为 $ORACLE_HOME/network/admin 以下 是一个示例
说明
tnsnames.ora 文件中定义一个或多个网络服务 net service cams 实例对 应的网络服务为
注意:这里 ADDRESS项包含三个子参数
要确保在监听文件中也有对应的一个 ADDRESS 项也包含同样的三个子参 数 并且子参数的值对应都相等 另外 这里 SERVICE_NAME 的值必需确 保与监听文件中某 SID_DESC项下的 SID_NAME参数的值相等 |