创建数据库
显示上述报错
default listener is not configured in grid infrastructure home
crsctl stat res -t查看资源
看不到 ora.LISTENER.lsnr
这里的服务显然没有listener
crs服务中没有注册到listener的服务,需要手工的添加一下
使用srvctl指令查看listener服务
[grid@oel11g ~]$ srvctl status listener
PRCN-2044 : No listener exists
以上证明确实没有listener服务添加入crs中
shdb1:~ # su - grid
grid@shdb1:~> srvctl status listener
Listener LISTENER_ORA is enabled
Listener LISTENER_ORA is running on node(s): shdb1,shdb2
grid@shdb1:~>
通过如下指令加listener加入到crs服务中
grid@shdb1:~> srvctl add listener
grid@shdb1:~> srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is not running
Listener LISTENER_ORA is enabled
Listener LISTENER_ORA is running on node(s): shdb1,shdb2
grid@shdb1:~> srvctl start listener
PRCC-1014 : LISTENER_ORA was already running
PRCR-1004 : Resource ora.LISTENER_ORA.lsnr is already running
PRCR-1079 : Failed to start resource ora.LISTENER_ORA.lsnr
CRS-5702: Resource 'ora.LISTENER_ORA.lsnr' is already running on 'shdb1'
grid@shdb1:~> srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): shdb1,shdb2
Listener LISTENER_ORA is enabled
Listener LISTENER_ORA is running on node(s): shdb1,shdb2
grid@shdb1:~>
创建监听和服务名文件
以oracle用户执行以下命令,设置本地监听器指向多个监听器配置。
sqlplus / as sysdba
SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.30)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.30)(PORT=1526))))' sid='shinfo1';
SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.40)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.40)(PORT=1526))))' sid='shinfo2';
10.10.10.30和10.10.10.40分别为服务器节点shdb1和shdb2的虚拟IP地址。
1521端口号为grid用户下默认监听器listener对应的端口。
1526端口号为oracle用户下新建监听器listener_ora对应的端口。
以oracle用户登录各服务器节点,执行命令vi $ORACLE_HOME/network/admin/listener.ora,
打开“$ORACLE_HOME/network/admin/listener.ora”文件。按“i”键,使文件进入编辑状态。
在文件中添加如下内容,防止监听无响应或者连接数据库时出现ORA-12570: TNS:packet reader failure错误。
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER_ORA=OFF
按“Esc”键,执行命令:wq保存文件并退出。
13.以grid用户重新启动监听。
srvctl stop listener -l LISTENER_ORA
srvctl start listener -l LISTENER_ORA
说明:
LISTENER_ORA为oracle用户下新建的监听器名称,请使用实际规划值。
如果无法停止监听,请执行srvctl start listener -l LISTENER_ORA -f命令强制停止。
修改初始化文件
1.以oracle用户登录服务器节点1。
2.修改“initSID.ora”文件。
cd /opt/app/oracle/product/dbs
vi initshinfo1.ora
SPFILE='+DATADG/shinfo/spfileshinfo.ora'
_optim_peek_user_binds=false
_b_tree_bitmap_plans=false
修改初始化文件
1.以oracle用户登录服务器节点2。
2.修改“initSID.ora”文件。
cd /opt/app/oracle/product/dbs
vi initshinfo2.ora
SPFILE='+DATADG/shinfo/spfileshinfo.ora'
_optim_peek_user_binds=false
_b_tree_bitmap_plans=false
配置VNCR
在Oracle 11.2.0.4.0以上版本中,通过配置VNCR(Valid Node Checking Registration)可以修复CVE-2012-1675安全漏洞。
配置Oracle用户下的VNCR
1.以oracle用户在各节点执行vi $ORACLE_HOME/network/admin/listener.ora命令,打开“$ORACLE_HOME/network/admin/listener.ora”文件。
2.按“i”键,进入编辑状态,在文件内添加如下内容。
VALID_NODE_CHECKING_REGISTRATION_LISTENER_ORA=1
3.按“ESC”键,执行命令:wq保存并退出。
4.以oracle用户在各节点执行以下命令重启监听LISTENER_ORA。
lsnrctl stop listener_ora
lsnrctl start listener_ora
配置grid用户下的VNCR
1.以grid用户在各节点的“$ORACLE_HOME/network/admin/listener.ora”里添加如下内容。
VALID_NODE_CHECKING_REGISTRATION_LISTENER=1
VALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN1=1
REGISTRATION_INVITED_NODES_LISTENER_SCAN1=(shdb1, shdb2) #注意此处是主机名,不是实例名
2.以grid用户在各节点执行以下命令重启监听LISTENER。
lsnrctl stop listener
lsnrctl start listener
3.以grid用户在listener_scan1监听所运行的节点上执行以下命令重启监听LISTENER_SCAN1。
lsnrctl stop listener_scan1
lsnrctl start listener_scan1