Opening two of the same wallet (tested in v0.18.0 of bitcoin-qt 64 bit) will cause a database collision, and will crash the program.

`[marshall@likon] {21:21} [~] $ bitcoin-0.18.0/bin/bitcoin-qt `
`terminate called after throwing an instance of 'std::runtime_error'  what():  BerkeleyBatch: Can't open database 8204388-wallet.dat (duplicates fileid 8b1c090000000800e25686350000000000000000 from 1352491-wallet.dat)`
`Aborted (core dumped)`

I have been able to reproduce the issue by importing two of the same wallet (with different filenames).
walletInstance->SetMinVersion(FEATURE_LATEST);
        walletInstance->SetWalletFlags(wallet_creation_flags, false);
        
        walletInstance->SetupLegacyScriptPubKeyMan();
        if (!(wallet_creation_flags & (WALLET_FLAG_DISABLE_PRIVATE_KEYS | WALLET_FLAG_BLANK_WALLET))) {
            LOCK(walletInstance->cs_wallet);
            for (auto spk_man : walletInstance->GetActiveScriptPubKeyMans()) {
                if (!spk_man->SetupGeneration()) {
                    error = _("Unable to generate initial keys").translated;
                    return nullptr;
                }
            }
        }
        auto locked_chain = chain.lock();
        walletInstance->chainStateFlushed(locked_chain->getTipLocator());
    } else if (wallet_creation_flags & WALLET_FLAG_DISABLE_PRIVATE_KEYS) {
        
        error = strprintf(_("Error loading %s: Private keys can only be disabled during creation").translated, walletFile);
        return NULL;
    } else if (walletInstance->IsWalletFlagSet(WALLET_FLAG_DISABLE_PRIVATE_KEYS)) {
        for (auto spk_man : walletInstance->GetActiveScriptPubKeyMans()) {
            if (spk_man->HavePrivateKeys()) {
                warnings.push_back(strprintf(_("Warning: Private keys detected in wallet {%s} with disabled private keys").translated, walletFile));
                break;
            }
        }
    }
    if (!gArgs.GetArg("-addresstype", "").empty() && !ParseOutputType(gArgs.GetArg("-addresstype", ""), walletInstance->m_default_address_type)) {
        error = strprintf(_("Unknown address type '%s'").translated, gArgs.GetArg("-addresstype", ""));