in oracle/pkg/agents/standby/verify_standby_settings_task.go [127:183]
func (task *verifyStandbySettingsTask) verifyPrimaryDBParams(ctx context.Context) error {
//check DB version
version, err := fetchAndParseSingleColumnMultiRowQueries(ctx, task.primary, task.dbdClient, checkDBVersionSQL)
if err != nil {
//ORA-12170: TNS:Connect timeout occurred (this happens if the host doesn't exist or is not reachable)
if strings.Contains(err.Error(), "ORA-12170:") {
addResultAsErr(task, standbyhelpers.StandbySettingErr_CONNECTION_FAILURE,
fmt.Sprintf(failedToConnectMsg, task.primary.Host, task.primary.Port, task.primary.Service, tnsConnectTimeoutMsg))
return err
}
if strings.Contains(err.Error(), "ORA-12541:") {
addResultAsErr(task, standbyhelpers.StandbySettingErr_CONNECTION_FAILURE,
fmt.Sprintf(failedToConnectMsg, task.primary.Host, task.primary.Port, task.primary.Service, tnsNoListenerMsg))
return err
}
// ORA-01017: invalid username/password; logon denied (this happens if the sys password is wrong or remote password file mode is NONE)
if strings.Contains(err.Error(), "ORA-01017:") {
addResultAsErr(task, standbyhelpers.StandbySettingErr_CONNECTION_FAILURE,
fmt.Sprintf(failedToConnectMsg, task.primary.Host, task.primary.Port, task.primary.Service, invalidLogonMsg))
return err
}
internalErr := fmt.Errorf("failed to query version: %v", err)
addResultAsErr(task, standbyhelpers.StandbySettingErr_INTERNAL_ERROR, internalErr.Error())
return internalErr
}
if len(version) != 1 {
internalErr := fmt.Errorf("got unexpected response for DB version query: %v", version)
addResultAsErr(task, standbyhelpers.StandbySettingErr_INTERNAL_ERROR, internalErr.Error())
return internalErr
}
if k, ok := supportedDBVersionToKeyWord[task.standby.Version]; !ok || !strings.Contains(strings.ToUpper(version[0]), strings.ToUpper(k)) {
addResultAsErr(task, standbyhelpers.StandbySettingErr_INCOMPATIBLE_DATABASE_VERSION, fmt.Sprintf(incompatibleVersionMsg, version[0], task.standby.Version))
}
//Check primary data guard broker and password file mode.
dbParams, err := fetchAndParseSingleColumnMultiRowQueries(ctx, task.primary, task.dbdClient, checkDBParamsSQL)
if err != nil {
internalErr := fmt.Errorf("failed to query DB params: %v", err)
addResultAsErr(task, standbyhelpers.StandbySettingErr_INTERNAL_ERROR, internalErr.Error())
return internalErr
}
if len(dbParams) != 2 {
internalErr := fmt.Errorf("got unexpected response for DB params query: %v", dbParams)
addResultAsErr(task, standbyhelpers.StandbySettingErr_INTERNAL_ERROR, internalErr.Error())
return internalErr
}
if strings.ToUpper(dbParams[0]) != "TRUE" {
addResultAsErr(task, standbyhelpers.StandbySettingErr_INVALID_DB_PARAM, fmt.Sprintf(invalidDataGuardBrokerMsg))
}
if strings.ToUpper(dbParams[1]) != "SHARED" && strings.ToUpper(dbParams[1]) != "EXCLUSIVE" {
addResultAsErr(task, standbyhelpers.StandbySettingErr_INVALID_DB_PARAM, fmt.Sprintf(unsupportedDBPwdFileModeMsg, dbParams[1]))
}
return nil
}