前言
Oracle
产品安装完成后,服务器
和客户端
都需要进行网络配置
才能实现网络连接
。
windows
自己配置了网络,但是Linux
需要自己配置!
Oracle至少启动的服务
如果通过网络(TCP/IP
)访问数据库服务器,至少启动:
-
OracleOraDb11g_home1TNSListener
服务 -
OracleServiceORCL
服务
如果本地访问数据库服务器,至少启动:
OracleServiceORCL
服务
两种访问
#@orcl代表着通过TCP/IP访问
#orcl是oracle服务器的一个服务名
sqlplus t1/t1@orcl
客户端和服务器在一起
#访问本地数据库服务器
sqlplus t1/t1
sqlplus t1/t1@orcl
sqlplus t1/t1
Oracle网络配置
服务器端
配置信息包括:
- 监听协议
- 地址
- 其他相关信息
存放在listener.ora
文件中,在安装服务器软件
时自动配置一个监听器
。
客户端
配置信息包括:
- 服务器地址
- 监听端口号
- 数据库SID
存放在tnsnames.ora
的文件中。
Oracle
中的Net Configuration Assistant
和 Net Manager
工具来配置监听器
和网络服务名
。
监听状态
#查看监听状态
lsnrctl status
#启动监听
lsnrctl start
lsnrctl status
”三剑客“
G:\software\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN
sqlnet.ora
sqlplus/nolog
conn / as sysdba
#为什么可以采用这种登录方式
#因为NTS
SQLNET.AUTHENTICATION_SERVICES = (NTS)
#修改成NONE
SQLNET.AUTHENTICATION_SERVICES = (NONE)
此时就会提示没有权限了!
简单连接
不需要客户端任何配置。
easy connect
SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH=(EZCONNECT)
#注意这里的wang是windows主机名!
SQL> conn t1/t1@wang:1521/orcl
Connected.
SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH=(TNSNAMES)
#此时连接采用的是TNSNAMES因此就报错了
conn t1/t1@wang:1521/orcl
SQLNET.AUTHENTICATION_SERVICES = (NTS)
#不会报错!
conn t1/t1@wang:1521/orcl
#查看sqlnet.ora文件
SQLNET.AUTHENTICATION_SERVICES= (NTS)
#系统又加上了两个配置
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
#有两个监听
#调用外部过程:
#C/C++/JAVA完成任务简单,但是Oracle PL/SQL自己完成,就很复杂。
#Oracle调用C/C++ 或者 JAVA的程序。
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
#在主机名为wang的机器上面 在1521端口使用TCP/IP协议
(ADDRESS = (PROTOCOL = TCP)(HOST = wang)(PORT = 1521))
)
)
添加监听
一直下一步就行!
监听程序
可以不止一个
tnsnames.ora
本地命名
需要客户端配置一个本地命名解析文件,为tnsnames.ora
。
#ORCL1是刚刚指定的网络服务名称
ORCL1 =
(DESCRIPTION =
(ADDRESS_LIST =
#这里之前解释过了!
(ADDRESS = (PROTOCOL = TCP)(HOST = wang)(PORT = 1521))
)
(CONNECT_DATA =
#这个是数据库的服务名
(SERVICE_NAME = orcl)
)
)
#报错!
sqlplus t1/t1@orcl
#成功!
sqlplus t1/t1@orcl1
个人理解:
tnsnames.ora
配置了一个网络服务名,一个对应的数据库服务名。
我们访问网络服务名就相当于访问数据库服务名。可以这样简单理解
Oracle服务名意义
服务名
是对数据库
的一个标识
,通过服务名
可以访问数据库
。
tnsping
静态注册/动态注册
注册
就说把数据库
作为一个服务注册
到监听程序
,在数据库服务器启动
的过程中,数据库服务器
会向监听程序
注册相应的服务
。
#称之为静态注册!
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = G:\software\oracle\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:G:\software\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
#称之为动态注册!
#默认是PMON,想LSNRCTL注册一个TCP/IP协议,端口为1521!
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = wang)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
那么到底是静态注册还是动态注册
lsnrctl status
如果是UNKNOWN
,表示静态注册
。
如果是READY
,表示动态注册
。
READY
的服务是由PMON
进程动态的注册到监听器,因此PMON
进程所在的数据库一定处于打开状态,所以说这些服务名所对应的实例已经准备好(READY
)接受用户的连接请求。
UNKNOWN
的服务通过编辑listener.ora
静态的注册服务名,监听器并不知道该服务名对应的实例是否打开了,所以用UNKNOWN
表示。
测试动态注册
lsnrctl stop
lsnrctl start
等待PMON
进程动态注册监听。
监听文件
也没了!
测试静态文件
点击保存!
lsnrctl stop
lsnrctl start
服务也就是UNKOWN
,把该文件删除掉又变为动态监听。
end~
ORA-12545、ORA-12154、ORA-12541、ORA-12514报错
其实出现该问题就是监听或者服务没有配好。
G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN
listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = wang)(PORT = 1521))
)
)
ADR_BASE_LISTENER = G:\xiaowangzhenshuai\software\Oracle
host = wang
在这里查看
G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN
tnsnames.ora
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = wang)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
查看SERVICE_NAME
。 select INSTANCE_NAME from v$instance;
成功!