情况描述:
RAC集群环境,尝试通过tnsname连接备库.出现密码不正确的问题,问题反馈到我这里:
[oracle@rac1 ~]$ sqlplus sys/oracle@orcldg as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Thu Jan 21 10:57:38 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:
ERROR:
ORA-01017: invalid username/password; logon denied
那么已经同步好密码文件了,怎么还无法登录.
远程连上环境,自己同步了一下密码文件,依旧出现这样的问题
这里要注意的一点是
关于11g 12c以后RAC环境下密码文件管理以及参数文件管理都出现了变化:
从12c开始数据库实例密码文件信息记录在了OCR中.
具体看
Oracle RAC参数文件管理
Oracle RAC密码文件管理
然后进行排查:
查看在集群中密码文件记录位置:
[oracle@rac2 ~]$ srvctl config database -d orcl
Database unique name: orcl
Database name: orcl
Oracle home: /oracle/app/product/12.2.0/db_1
Oracle user: oracle
Spfile: +DATA/ORCL/PARAMETERFILE/spfileorcl
Password file: +data/orcl/password/pwdorcl
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools:
Disk Groups: DATA
Mount point paths:
Services:
Type: RAC
Start concurrency:
Stop concurrency:
OSDBA group: dba
OSOPER group:
Database instances: orcl1,orcl2
Configured nodes: rac1,rac2
CSS critical: no
CPU count: 0
Memory target: 0
Maximum memory: 0
Default network number for database services:
Database is administrator managed
看了一下没有问题.
去数据库层面查看:
SQL> show parameter name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cdb_cluster_name string orcldg
cell_offloadgroup_name string
db_file_name_convert string +DATA/ORCL/DATAFILE/, +DATA/OR
CL/DATAFILE/, +DATA/ORCL/4700A
987085B3DFAE05387E5E50A8C7B/,
+DATA/ORCL/DATAFILE/, +DATA/OR
CL/B953DF0CE8892A15E05337F2A8C
0CAC4/, +DATA/ORCL/DATAFILE/
db_name string orcl
db_unique_name string orcldg
global_names boolean FALSE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string orcl2
lock_name_space string
log_file_name_convert string +DATA/ORCL/ONLINELOG/, +data/o
rcl/logfile/
pdb_file_name_convert string
processor_group_name string
service_names string orcldg
这里就可以发现原因.db_unqiue_name被修改,导致这个资源与真实的数据库实例信息不一致,所以这个实例也就无法认知到该密码文件
解决方案:
1.仅修改数据库资源信息中的db_unique_name.
但是12c开始已经不支持使用crsctl修改资源配置.12c需要加上-unsupported
[root@rac1 ~]# crsctl modify res ora.orcl.db -attr 'DB_UNIQUE_NAME=orcldg' -unsupported
[oracle@rac1 ~]$ srvctl config database -d orcl
Database unique name: orcldg
Database name: orcl
Oracle home: /oracle/app/product/12.2.0/db_1
Oracle user: oracle
Spfile: +DATA/ORCL/PARAMETERFILE/spfileorcl
Password file: +data/orcl/password/pwdorcl
...
...
Database instances: orcl1,orcl2
Configured nodes: rac1,rac2
CSS critical: no
CPU count: 0
Memory target: 0
Maximum memory: 0
Default network number for database services:
Database is administrator managed
修改成功,但是这种方式仅仅修改了OCR中记录的db_unique_name,修改后集群数据库资源状态与真实数据库实例状态会出现不一致。
2.添加数据库资源.
[oracle@rac1 ~]$
srvctl add database -d orcldg -o /oracle/app/product/12.2.0/db_1
-n orcl -p +DATA/ORCL/PARAMETERFILE/spfileorcl -s open -t immediate -y AUTOMATIC
向数据库资源添加实例:
[oracle@rac1 ~]$ srvctl add instance -d orcldg -i orcl1 -n rac1
[oracle@rac1 ~]$ srvctl add instance -d orcldg -i orcl2 -n rac2
删除旧数据库资源
[root@rac1 ~]#crsctl delete res ora.orcl.db
之前关于RAC中的db_unique_name已经总结了一次.
Oracle RAC集群数据库资源状态与数据库实例状态不一致的情况
问题解决!
记录于20210121