1.专有连接
用户连接有专门的进程进行相应
user ----server process
2.共享连接 []
用户连接数据库时,没有服务进程相应,而将用户的信息放到调度里,而调度放到队列[队列]中
uesr ----dispater --[SAG] ----server ------data buffer ------|
3.监听程序工作原理
用户进程跟服务器能不能连接主要是去问我们的监听
客户端程序------tnsnames.ora/本地命名解析文件
1.sqlplus sys/oracle@updb as sysdba //远程连接
b.去客户端验证用户名密码
c.通过服务器连接实例
2.sqlplus sys/oracle@ip:1521/service_names as sysdba
服务器端程序listener.ora
1.静态注册
将实例名/服务名写到了监听文件中
SID_DESC (实例名/服务名 oracle家目录 ....)
2.动态注册
由pmon 进程去动态注册 ,进程会每分钟扫描一次数据库的状态,有库打开就立马告诉监听该数据库需要被监听
alter system register; //手动注册,pmon也是去执行这条命令
lsnrctl status //查看监听状态
lsnrctl stop //停掉我们的监听
ready : 动态注册
unknow: 静态注册
项目中一般使用静态监听,可以保证用户时时可以连接
一个数据库中只使用一个listener.ora
一个监听可以监听一个数据库,也可监听多个数据库
一个监听程序可以被多个实例监听 ----集群
监听的默认端口为:1521
4.如何配置监听
在grid 目录下面执行 netca 创建出来的为动态的监听 图形界面创建 ,监听文件会放到/opt/u01/grid/11g/nerwork/admin/listener.ora ,在哪个文件下面执行就会创建到相应的文件目录下
add-->listener-->ipc--->1521--->no-->
$netca
第一个选项是直接建一个服务器端的监听
图形界面建好后,会在路径/opt/u01/oracle/11g/network/admin 下会生成一个listener.ora文件,记录我们服务端的信息
vim listener.ora
# listener.ora Network Configuration File: /opt/u01/oracle/11g/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = up12.up.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCPS)(HOST = up12.up.com)(PORT = 2484))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER1 = /opt/u01/oracle
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER1=ON # line added by Agent
第二个选项是建一个客户到我们要连接的服务器的解析,方便我们连接远端的服务器
也会在/opt/u01/oracle/11g/network/admin 路径下生成一个客户端的tnsnames.ora文件
vim tnsnames.ora //记录了我们要访问的远端数据库的信息
# tnsnames.ora Network Configuration File: /opt/u01/oracle/11g/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.132)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl.wangzilong)
)
)
netmgr 创建出来的为 静态的监听
# listener.ora Network Configuration File: /opt/u01/oracle/11g/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))
)
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER1 = ON
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = maxdb)
(ORACLE_HOME = /opt/u01/oracle/11g)
(SID_NAME = maxdb)
)
)
ADR_BASE_LISTENER1 = /opt/u01/oracle
静态注册,监听两个库
lsnrctl
有参数的修改,必须重启监听
lsnrctl stop
lsnrctl start
tnsname.ora
5.监听程序的管理
11g以前 : lsnrtcl start
lsnrctl status
lsnrctl stop
lsnrctl reload
11g 以后---
srvctl start listener //只能启动监听名字为listener的监听
srvctl start listener -l listener1 //启动名字为listener1的监听
srvctl add listener -l listener1 //监听没有在grid文件里,加入到grid文件里进行管理
srvctl remove listener
lsnrctl start
show parameter service_name //查看服务名,如果为updba.com 一般走的专有连接
SQL> show parameter service_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string maxdb.up.com
select service_name ,username,server from v$session //service 为dedicated 表示是专有连接
shared 是sys用户的共享连接,none是普通用户的共享连接
SQL> show parameter disp //dispatchers表示共享连接的服务用的是maxdbXDB
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cell_offload_plan_display string AUTO
dispatchers string (PROTOCOL=TCP) (SERVICE=maxdbX
DB)
max_dispatchers integer
SQL>
vim /opt/u01/oracle/11g/network/admin/tnsnames.ora //编辑客户端中存在的,数据库解析
增加server
查看网络是否通畅,用
tsping updb
tnsping updb