Data Guard Broker—ORA-16714: The Value of Property LogFileNameConvert Is Inconsistent with the Database Setting

This seems like a simple message to fix, right?
The parameter is different between the broker configuration and the database parameters—it was most likely changed directly on the database after the DG (Data Guard) broker configuration was created or the database was added. However, there is an interesting point to consider.
Let’s check on the error first. On the primary database side of the broker configuration:
DGMGRL> show database myprodDB; Database - myprodDB Role: PRIMARY Intended State: TRANSPORT-ON Instance(s): rmprdb01 Warning: ORA-16714: the value of property LogFileNameConvert is inconsistent with the database setting Database Warning(s): ORA-16707: the value of the property LogFileNameConvert is invalid, valid values are pairs of file specifications Database Status: WARNING DGMGRL> show database verbose myprodDB; Database - myprodDB Role: PRIMARY Intended State: TRANSPORT-ON Instance(s): rmprdb01 Warning: ORA-16714: the value of property LogFileNameConvert is inconsistent with the database setting Database Warning(s): ORA-16707: the value of the property LogFileNameConvert is invalid, valid values are pairs of file specifications Properties: DGConnectIdentifier = 'myprodDB' ObserverConnectIdentifier = '' LogXptMode = 'ASYNC' RedoRoutes = '' DelayMins = '0' Binding = 'optional' MaxFailure = '0' MaxConnections = '1' ReopenSecs = '300' NetTimeout = '30' RedoCompression = 'DISABLE' LogShipping = 'ON' PreferredApplyInstance = '' ApplyInstanceTimeout = '0' ApplyLagThreshold = '0' TransportLagThreshold = '0' TransportDisconnectedThreshold = '30' ApplyParallel = 'AUTO' StandbyFileManagement = 'AUTO' ArchiveLagTarget = '1800' LogArchiveMaxProcesses = '4' LogArchiveMinSucceedDest = '1' DbFileNameConvert = '+DATA/MYDATABASE/DATAFILE/, +DATA/myprodDB/DATAFILE' LogFileNameConvert = '+DATA/MYDATABASE/ONLINELOG/, +DATADG/myprodDB/ONLINELOG/, +DATA2/MYDATABASE/ONLINELOG/, +DATADG2/myprodDB/ONLINELOG/, +DATA3/MYDATABASE/ONLINELOG/', +DATADG3/myprodDB/ONLINELOG/' FastStartFailoverTarget = '' InconsistentProperties = '(monitor)' InconsistentLogXptProps = '(monitor)' SendQEntries = '(monitor)' LogXptStatus = '(monitor)' RecvQEntries = '(monitor)' StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.100)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=myprodDB_DGMGRL)(INSTANCE_NAME=MYDATABASE)(SERVER=DEDICATED)))' StandbyArchiveLocation = 'USE_DB_RECOVERY_FILE_DEST' AlternateLocation = '' LogArchiveTrace = '0' LogArchiveFormat = 'MYDATABASE_%t_%s_%r.arc' TopWaitEvents = '(monitor)' Database Status: WARNING
Next we check for the status in the standby database server:
DGMGRL for Linux: Version 12.1.0.2.0 - 64bit Production Copyright (c) 2000, 2013, Oracle. All rights reserved. Welcome to DGMGRL, type "help" for information. Connected as SYSDG. DGMGRL> show configuration; Configuration - my_dg_configuration Protection Mode: MaxPerformance Members: myprodDB - Primary database Warning: ORA-16809: multiple warnings detected for the database mySTDB - Physical standby database Fast-Start Failover: DISABLED Configuration Status: WARNING (status updated 12 seconds ago) DGMGRL> show database myprodDB; Database - myprodDB Role: PRIMARY Intended State: TRANSPORT-ON Instance(s): MYDATABASE Warning: ORA-16714: the value of property LogFileNameConvert is inconsistent with the database setting Database Warning(s): ORA-16707: the value of the property LogFileNameConvert is invalid, valid values are pairs of file specifications Database Status: WARNING
Now let’s check for the database parameters perspective on the primary:
SQL> show parameter convert NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_file_name_convert string +DATA/MYDATABASE/DATAFILE/, + DATADG/myprodDB/DATAFILE log_file_name_convert string +DATA/MYDATABASE/ONLINELOG/,+DATADG/myprodDB/ONLINELOG/, +DATA2/MYDATABASE/ONLINELOG/, +DATADG2/myprodDB/ONLINELOG/, +DATA3/MYDATABASE/ONLINELOG/, +DATADG3/myprodDB/ONLINELOG/ pdb_file_name_convert string
Comparing the settings:
- LogFileNameConvert=’+DATA/MYDATABASE/ONLINELOG/, +DATA/myprodDB/ONLINELOG/, +DATA2/MYDATABASE/ONLINELOG/, +DATADG2/myprodDB/ONLINELOG/,+DATA3/MYDATABASE/ONLINELOG/’, +DATADG3/myprodDB/ONLINELOG/’
- log_file_name_convert=+DATA/MYDATABASE/ONLINELOG/,+DATA/myprodDB/ONLINELOG/,+DATA/MYDATABASE/ONLINELOG/, +DATADG2/myprodDB/ONLINELOG/,+DATA/MYDATABASE/ONLINELOG/, +DATADG3/myprodDB/ONLINELOG/
Everything seems all right.
What’s the problem then?
This is the interesting part. When we check on MOS Usage and Limitation of db_file_name_convert and log_file_name_convert (Doc ID 1367014.1) we find:
“When using the Data Guard Broker the Values for these Parameters are limited to 512 Bytes (Characters) due to the Limit of the corresponding Data Guard Broker Properties ‘DbFileNameConvert’ and ‘LogFileNameConvert’.”
This was news to me! So, possible alternatives are:
- Use OMF (Oracle Managed Files).
- Use the same file structure on both sites (if they’re different and would be under the limit).
- Rename and create datafiles/redo log files manually.
In my case, I checked and confirmed with the client that the only places for the logfiles were DATA and DATA2 (multiplexed). So the fix was easy:
edit database 'myprodDB' set property 'LogFileNameConvert' = "+DATA/MYDATABASE/ONLINELOG/,+DATADG/myprodDB/ONLINELOG/,+DATA2/MYDATABASE/ONLINELOG/, +DATADG2/myprodDB/ONLINELOG/";
Once done:
DGMGRL> show configuration; Configuration - my_dg_configuration Protection Mode: MaxPerformance Members: myprodDB - Primary database mySTDB - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS (status updated 3 seconds ago) DGMGRL> show database myprodDB; Database - myprodDB Role: PRIMARY Intended State: TRANSPORT-ON Instance(s): MYDATABASE Database Status: SUCCESS DGMGRL> show database mySTDB; Database - mySTDB Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds (computed 0 seconds ago) Apply Lag: 0 seconds (computed 0 seconds ago) Average Apply Rate: 325.00 KByte/s Real Time Query: OFF Instance(s): mySTDB Database Status: SUCCESS DGMGRL> show database verbose myprodDB; Database - myprodDB Role: PRIMARY Intended State: TRANSPORT-ON Instance(s): MYDATABASE Properties: DGConnectIdentifier = 'myprodDB.' ObserverConnectIdentifier = '' LogXptMode = 'ASYNC' RedoRoutes = '' DelayMins = '0' Binding = 'optional' MaxFailure = '0' MaxConnections = '1' ReopenSecs = '300' NetTimeout = '30' RedoCompression = 'DISABLE' LogShipping = 'ON' PreferredApplyInstance = '' ApplyInstanceTimeout = '0' ApplyLagThreshold = '0' TransportLagThreshold = '0' TransportDisconnectedThreshold = '30' ApplyParallel = 'AUTO' StandbyFileManagement = 'AUTO' ArchiveLagTarget = '1800' LogArchiveMaxProcesses = '4' LogArchiveMinSucceedDest = '1' DbFileNameConvert = '+DATA/MYDATABASE/DATAFILE/, +DATA/myprodDB/DATAFILE' LogFileNameConvert = '+DATA/MYDATABASE/ONLINELOG/,+DATADG/myprodDB/ONLINELOG/,+DATA2/MYDATABASE/ONLINELOG/,+DATADG2/myprodDB/ONLINELOG/' FastStartFailoverTarget = '' InconsistentProperties = '(monitor)' InconsistentLogXptProps = '(monitor)' SendQEntries = '(monitor)' LogXptStatus = '(monitor)' RecvQEntries = '(monitor)' StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.100)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=myprodDB_DGMGRL)(INSTANCE_NAME=MYDATABASE)(SERVER=DEDICATED)))' StandbyArchiveLocation = 'USE_DB_RECOVERY_FILE_DEST' AlternateLocation = '' LogArchiveTrace = '0' LogArchiveFormat = 'MYDATABASE_%t_%s_%r.arc' TopWaitEvents = '(monitor)' Database Status: SUCCESS
I hope this helps!
As always, please leave any questions or thoughts in the comments.