TNS-12560: TNS: 协议适配器错误 /var/tmp/.oracle
网络架构
1.为了使服务器接收客户端上传连接请求,需要有一个进程在服务器端监听客户端传入的请求,这个进程就是在服务器端启动的监听程序,
监听程序进程负责检测传入的请求并将其传送到相应的目的地,若要启动监听程序进程通常必须在服务器端配置一个配置文件:listener.ora
2.为了使客户端连接到指定的数据库服务器,需要在客户端配置服务名,服务名配置中描述服务器的地址、数据库实例等信息,服务名是目标地址的别名,
为了简化服务名的使用oracle允许我们将服务名解析为连接字符串,服务名的配置保存在tnsnames.ora文件中,该配置文件包含网络上的服务名称和地址,
客户机和分发服务器均使用该文件来确定目标服务器,在tnsnames.ora文件中服务名直接映射到连接描述符然后通过下列方法之一对其进行解析将
�C 主机命名使用 sqlnet.ora 文件和本机命名服务
�C 本地命名使用 tnsnames.ora 文件
�C Oracle Names 使用 sqlnet.ora 文件和 Oracle Names server
3.在解析服务名后即向监听程序发送请求,监听程序接收会话请求后决定将该请求定向到什么位置
4.监听程序衍生新的进程或将该连接重定向到现有的进程以处理与 Oracle数据库的通信
5.该进程的地址传递到客户端进程在会话持续时间内客户端与服务器端进程直接通信无须监听程序介入
网络配置文件(listener.ora,tnsnames.ora,sqlnet.ora)的缺省位置是 $ORACLE_HOME/network/admin
网络基本配置
服务器端一定要配置监听程序
客户端要配置服务命名
1.配置网络:
服务器端:需要配置监听程序
ip : 192.168.1.5
sid: orcl
ssh 192.168.1.5 -X
netmgr
配置成功后重新启动监听程序:
lsnrctl stop
lsnrctl start
客户端:需要配置服务命名
ip : 192.168.1.254
su - oracle
netmgr
配置成功后在客户端连接服务器测试:
conn scott/oracle@5
预衍生服务进程
listener.ora
---------------------------------------------------------------
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
(SID_NAME = orcl)
(PRESPAWN_MAX = 10)
(PRESPAWN_LIST =
(PRESPAWN_DESC =
(PROTOCOL = tcp)
(POOL_SIZE = 10) --预衍生服务进程的初始数量
(TIMEOUT = 1)
)
)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 136.0.10.2)(PORT = 1521))
)
)
---------------------------------------------------------------
LSNRCTL> services
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已被拒绝:0
LOCAL SERVER
服务 "orcl" 包含 2 个例程。
例程 "orcl", 状态 UNKNOWN, 包含此服务的 11 个处理程序... 监听中配置的静态注册,无法获得实例状态!
处理程序:
"DEDICATED" 已建立:0 已被拒绝:0
LOCAL SERVER
"PRESPAWN" 已建立:0 已被拒绝:0 当前: 0 最大: 0 状态: ready
"PRESPAWN" 已建立:0 已被拒绝:0 当前: 0 最大: 0 状态: ready
"PRESPAWN" 已建立:0 已被拒绝:0 当前: 0 最大: 0 状态: ready
"PRESPAWN" 已建立:0 已被拒绝:0 当前: 0 最大: 0 状态: ready
"PRESPAWN" 已建立:0 已被拒绝:0 当前: 0 最大: 0 状态: ready
"PRESPAWN" 已建立:0 已被拒绝:0 当前: 0 最大: 0 状态: ready
"PRESPAWN" 已建立:0 已被拒绝:0 当前: 0 最大: 0 状态: ready
"PRESPAWN" 已建立:0 已被拒绝:0 当前: 0 最大: 0 状态: ready
"PRESPAWN" 已建立:0 已被拒绝:0 当前: 0 最大: 0 状态: ready
"PRESPAWN" 已建立:0 已被拒绝:0 当前: 0 最大: 0 状态: ready
例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
服务 "orclXDB" 包含 1 个例程。
例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"D000" 已建立:0 已被拒绝:0 当前: 0 最大: 1002 状态: ready
DISPATCHER <machine: ALVIN, pid: 3652>
(ADDRESS=(PROTOCOL=tcp)(HOST=alvin)(PORT=1158))
服务 "orcl_XPT" 包含 1 个例程。
例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
处理程序:
"DEDICATED" 已建立:0 已拒绝:0 状态:ready
LOCAL SERVER
命令执行成功
限制IP访问
限制IP访问:$ORACLE_HOME/network/admin/sqlnet.ora
tcp.validnode_checking=yes
tcp.invited_nodes=(ip1,ip2......) 被邀请IP
tcp.excluded_nodes=(ip1,ip2......) 被限制IP
重新启动监听器设置才生效
@ > conn scott/tiger@orcl
ERROR:
ORA-12537: TNS: 连接关闭
限制会话空闲时间
限制会话空闲时间:SQLNET.ora
alter system set resource_limit=true;
create profile p1 limit IDLE_TIME 1;
alter user scott profile p1;
sqlnet.expire_time=10
共享服务器
dispatchers 和shared_servers ,shared_server_sessions
alter system set DISPATCHERS='(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.250)(DISPATCHERS=2)(sessions=2))';
select username,server from v$session where username is not null;
select count(*) from v$shared_server;
select count(*) from v$dispatcher;
select * from V$CIRCUIT;
alter system set DISPATCHERS='(ADDRESS=(PROTOCOL=tcp)(HOST=10.1.1.95)(DISPATCHERS=2)(sessions=2))';
数据库链接
数据库链接:
SQL> conn / as sysdba
Connected.
SQL> grant create database link to scott;
grant create synonym to scott;
conn scott/tiger
创建数据库链接:
create database link remote_5_scott
connect to scott identified by oracle --静态数据库链接,户名口令在链接中被定义
using '5';
create database link remote_5
using '5'; --动态数据库链接,使用本地户名口令到远程做安全审核
select * from emp@remote_5_scott;
create synonym emp for emp@remote_5_scott;
select * from emp;
练习
自己作为服务器,配置网络使其他节点可以通过网络访问你的数据库!
自己作为客户端连接其他节点的数据库!