可能是因为短了几天,2月过得比其他月份要快不少。这都最后一天了,博客还是没碰一下。
也因为这个月学习放缓了,就是偷懒了。。所以想了想,定不下要写些什么。
很久以前就想写写分析函数,Oracle的分析函数是个强大的东东,也整理过一些,但始终觉得拿不出手。。。
写写我们家little fairy?想到就很开心哈哈哈哈哈哈哈哈哈哈哈哈哈傻的不行!
打住打住,时间不多了,就最后一个半钟。还是记一点东西吧。、
======================================== 一根完美的分割线 =======================================
事情是这样发生的,公司的的一台破服务器,最近不知道为啥呢,上面的数据库连接速度特别慢,尝试用tnsping了一下那服务器的1521端口,120000+ ms,也就是差不多两份多钟的样子,尝试修理一下,未果。
但是发现,如果我重新建一个监听,用1522端口,tnsping速度块的一批,10ms妥妥的。结局还是很美好的!
但那只是我以为。。。
C:\Users\Lhy>tnsping 127.0.0.1:1522TNS Ping Utility for 64-bit Windows: Version 11.2.0.1.0 - Production on 28-2月 -2019 22:49:09Copyright (c) 1997, 2010, Oracle. All rights reserved.已使用的参数文件:
D:\app\product\11.2.0\dbhome_1\network\admin\sqlnet.ora已使用 HOSTNAME 适配器来解析别名
尝试连接 (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1522)))
OK (0 毫秒)C:\Users\Lhy>sqlplus lhy/lhy@127.0.0.1:1522/orclSQL*Plus: Release 11.2.0.1.0 Production on 星期四 2月 28 22:49:41 2019Copyright (c) 1982, 2010, Oracle. All rights reserved.ERROR:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务请输入用户名:
怎么样,惊不惊喜!!!意不意外!!!
原来的数据库并不能直接就注册到新的监听中来给外面连接。
那么为什么呢?有数据库,有监听,怎样关联?
原来的为什么就行呢?
1、了解一下动态注册
实例在启动的时候,读取init.ora文件,把一些信息动态注册到默认监听中,默认监听,也就是名称叫LISTENER,端口是1521,协议是tcp的那个监听。
而我们现在是重新建了监听。。数据库和实例并不不知道我们这个监听的信息,所以,我们要把这个监听的信息,保存到数据库里面,让它服务启动的时候,能够知道往哪里注册。。。
两种方法:
第一种:
(1)在%ORACLE_HOME%\NETWORK\ADMIN\tnsnames.ora文件中,添加新监听的连接信息,代码及位置如下图,自己按照自己的改一下host和端口:
LISTENER1522 =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-U9EADHR)(PORT = 1522)))
(2)然后,先通过操作系统认证登陆,并设置数据库注册的监听,如下:
C:\Users\Lhy>set oracle_sid=orcl -- 设置默认数据库sidC:\Users\Lhy>sqlplus / as sysdba -- 管理员身份登陆SQL*Plus: Release 11.2.0.1.0 Production on 星期四 2月 28 23:21:57 2019Copyright (c) 1982, 2010, Oracle. All rights reserved.连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> alter system set local_listener=LISTENER1522; -- 修改监听名为刚才tnsnames.ora里面的监听名系统已更改。SQL> alter system register; -- 注册系统已更改。SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开C:\Users\Lhy>sqlplus lhy/lhy@127.0.0.1:1522/orcl --走1522端口的监听登陆SQL*Plus: Release 11.2.0.1.0 Production on 星期四 2月 28 23:23:06 2019Copyright (c) 1982, 2010, Oracle. All rights reserved.连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL>
这样,咱们就算是用上了新的监听了。
上面这种方法呢,是先在tnsnames.ora里面定义LISTENER1522这个监听的信息,然后在数据库里面设置这个监听名;这种的话,比较适合这个服务器中有多个数据库,统一维护比较方便,如后面监听再有变动,也只需要改一下tnsnames文件重启下数据库就行。
第二种:另外一种比较简单粗暴的,就是直接把监听的连接信息直接写到数据库中,就省了修改tnsnames.ora这一步。例如咱们把在tnsnames中配置的监听信息抽出来,就是 (ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-U9EADHR)(PORT = 1522)),然后,直接把这个信息,设置到数据库中,如下:
C:\Users\Lhy>set oracle_sid=orcl -- 设置默认数据库C:\Users\Lhy>sqlplus / as sysdba -- 管理员登陆SQL*Plus: Release 11.2.0.1.0 Production on 星期四 2月 28 23:33:28 2019Copyright (c) 1982, 2010, Oracle. All rights reserved.连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-U9EADHR)(PORT = 1522))'; -- 直接设置具体的监听连接信息系统已更改。SQL> alter system register; -- 注册系统已更改。SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开C:\Users\Lhy>sqlplus lhy/lhy@127.0.0.1:1522/orcl -- 通过1522登录SQL*Plus: Release 11.2.0.1.0 Production on 星期四 2月 28 23:34:07 2019Copyright (c) 1982, 2010, Oracle. All rights reserved.连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL>
这个方法呢,,可行,但是呢,如果数据库多,维护起来就比较麻烦些吧。
还有个方法呢,根据网上的说法,可以用静态注册的方式, 在listener.ora文件中静态注册某一个或者多个实例,但暂时没实践过,最后几分钟了,就不折腾了。
3月,你好呀~