Oracle数据库DataGuard数据无法同步,主库查询v$archive_dest出现ORA-16494错误。
数据库版本Oracle 12.1.0.2.0:
SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- CON_ID ---------- Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production PL/SQL Release 12.1.0.2.0 - Production CORE 12.1.0.2.0 Production BANNER -------------------------------------------------------------------------------- CON_ID ---------- TNS for 64-bit Windows: Version 12.1.0.2.0 - Production NLSRTL Version 12.1.0.2.0 - Production
检查主库DG参数:
SQL> show parameter log_archive_config NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_config string DG_CONFIG=(orcl,orcladg) SQL> SQL> show parameter log_archive_dest_2 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_2 string SERVICE=orcladg LGWR ASYNC VAL ID_FOR=(ONLINE_LOGFILES,PRIMAR Y_ROLE) DB_UNIQUE_NAME=orcladg log_archive_dest_20 string log_archive_dest_21 string log_archive_dest_22 string log_archive_dest_23 string log_archive_dest_24 string log_archive_dest_25 string log_archive_dest_26 string log_archive_dest_27 string NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_28 string log_archive_dest_29 string SQL> show parameter service_names NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string orcl SQL> show parameter unique NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_unique_name string orcl
检查备库参数:
SQL> show parameter log_archive_config NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_config string DG_CONFIG=(orcl,orcladg) SQL> show parameter log_archive_dest_2 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_2 string SERVICE=orcl LGWR ASYNC VALID_ FOR=(ONLINE_LOGFILES,PRIMARY_R OLE) DB_UNIQUE_NAME=orcl log_archive_dest_20 string log_archive_dest_21 string log_archive_dest_22 string log_archive_dest_23 string log_archive_dest_24 string log_archive_dest_25 string log_archive_dest_26 string log_archive_dest_27 string NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ log_archive_dest_28 string log_archive_dest_29 string SQL> show parameter service_names NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string pdborcl SQL> show parameter unique NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_unique_name string orcladg
检查主备库之间的网络连通性
主库: C:\Users\Administrator>tnsping orcl TNS Ping Utility for 64-bit Windows: Version 12.1.0.2.0 - Production on 08-5月 -2023 22:42:27 Copyright (c) 1997, 2014, Oracle. All rights reserved. 已使用的参数文件: C:\app\pdborcl\product\12.1.0\dbhome_1\network\admin\sqlnet.ora 已使用 TNSNAMES 适配器来解析别名 尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-VJ841V9N3PU)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = OK (20 毫秒) C:\Users\Administrator>tnsping orcladg TNS Ping Utility for 64-bit Windows: Version 12.1.0.2.0 - Production on 08-5月 -2023 22:42:39 Copyright (c) 1997, 2014, Oracle. All rights reserved. 已使用的参数文件: C:\app\pdborcl\product\12.1.0\dbhome_1\network\admin\sqlnet.ora 已使用 TNSNAMES 适配器来解析别名 尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.188.201)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdborcl))) OK (20 毫秒) 备库: C:\Users\Administrator>tnsping orcl TNS Ping Utility for 64-bit Windows: Version 12.1.0.2.0 - Production on 08-5月 -2023 22:42:27 Copyright (c) 1997, 2014, Oracle. All rights reserved. 已使用的参数文件: C:\app\pdborcl\product\12.1.0\dbhome_1\network\admin\sqlnet.ora 已使用 TNSNAMES 适配器来解析别名 尝试连接 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-VJ841V9N3PU)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = OK (20 毫秒) C:\Users\Administrator>tnsping orcladg TNS Ping Utility for 64-bit Windows: Version 12.1.0.2.0 - Production on 08-5月 -2023 22:42:39 Copyright (c) 1997, 2014, Oracle. All rights reserved. 已使用的参数文件: C:\app\pdborcl\product\12.1.0\dbhome_1\network\admin\sqlnet.ora 已使用 TNSNAMES 适配器来解析别名 尝试连接 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.188.201)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdborcl))) OK (20 毫秒) 主备库之间网络是畅通的。 主库切换日志,查询v$archive_dest: SQL> alter system switch logfile; 系统已更改。 出现ORA-16494错误,该错误在网上找不到,而且MOS上也没有相关的记载。 再次检查备库,会不会是PDB模式的,而且有名为PDBORCL的PDB,导致主库通过tns直接连到了PDB中。 备库查询: SQL> select con_id,name,open_mode from v$pdbs; CON_ID NAME OPEN_MODE ---------- ------------------------------ ---------- 2 PDB$SEED MOUNTED 3 PDBORCL MOUNTED 果然有个叫PDBORCL的PDB。
查看数据库的数据库名:
SQL> select name,open_mode,database_role from v$database; NAME OPEN_MODE DATABASE_ROLE --------- -------------------- ---------------- ORCL MOUNTED PHYSICAL STANDBY
所以,如果想连到CDB中,应该将service_names指定为orcl,由于是备库,可设置为rzorcl或orclstd等,方便识别,但是一定要与PDBORCL不同名。
修改备库service_names
SQL> alter system set service_names='rzorcl';
在修改主库和备库中tnsnames.ora文件中备库连接串中SERVICE=RZORCL。
再次尝试切换日志,错误消失。
系统已更改。
SQL> select error from v$archive_dest; ERROR ----------------------------------------------------------------- ERROR ----------------------------------------------------------------- ERROR ----------------------------------------------------------------- 已选择 31 行。 SQL> 再次查看备库日志接收情况:
SQL> select process,sequence#,block# from v$managed_standby; PROCESS SEQUENCE# BLOCK# --------- ---------- ---------- ARCH 103988 43008 ARCH 0 0 ARCH 103987 4096 ARCH 103989 40960 MRP0 103990 29955 RFS 0 0 RFS 103990 29955 RFS 0 0 RFS 0 0 9 rows selected. 15 备库日志接收正常,问题解决。
Oracle-16494 在Oracle support中并未能找到相关报错信息,疑似bug,但是我们并未提交该bug