У меня возникла проблема при одновременном использовании двух БД (оба оракула).
Моя функция startup
выполняет только блок перехвата первой попытки соединения, но показывает сообщение о подключении console.info для блока перехвата второй попытки, но соединение никогда не устанавливается.
Вот моя функция startup
:
async function startup() {
try {
console.info('Initializing SEI database module...');
await seiDatabase.initialize();
} catch (err) {
console.error(err);
process.exit(1); // Non-zero failure code
}
console.info('Starting SEI application...');
try {
console.info('Initializing SIP database module...');
await sipDatabase.initialize();
} catch (err) {
console.error(err);
process.exit(1); // Non-zero failure code
}
console.info('Starting SIP application...');
try {
console.info('Initializing web server module...');
await webServer.initialize();
} catch (err) {
console.error(err);
process.exit(1); // Non-zero failure code
}
}
startup();
Я использую один и тот же webServer.initialize
для обоих...
Когда я пытаюсь использовать свой SIP-маршрут для получения данных, возвращается эта ошибка: message "ORA-00942: table or view does not exist"
, мой маршрут пытается получить данные из БД SIP, но подключена только БД SEI...
Я неправильно делаю множественное соединение?
Я использую Node, Express и oracledb ^ 5.4.0 "... не использую TypeORM.
@RahulSharma Я изменил позиции try catch и позволил SIP DB сначала подключиться, и мой запрос начал работать ... и моя SEI DB (ранее первое соединение) перестала работать. Вот небольшое консольное сообщение: Initializing SEI database module... Starting SEI application... Initializing SIP database module... Starting SIP application... Initializing web server module... Web server listening on localhost:4242
Похоже, мой запрос пытается получить данные из БД SEI...
Убедитесь, что у вас правильный диапазон переменных, иначе вы можете перезаписать переменную, содержащую соединение (или пул?) первой БД, с соединением (или пулом) для второй БД. Если вы используете два пула, обязательно назначьте, а затем используйте псевдоним пула (или передайте объект пула). Проверьте документ oracle.github.io/node-oracledb/doc/api.html#connpoolcache.
@ChristopherJones, это сработало просто отлично! Я добавил poolAlias в каждое соединение hrPool и назвал псевдоним в соединении... conn = await oracledb.getConnection('sipprod');
и conn = await oracledb.getConnection('seiprod');
Пожалуйста, сделайте ответ для решения.
Если вы используете два пула, обязательно назначьте, а затем используйте псевдоним пула (или передайте объект пула). Ознакомьтесь с документом Кэш пула соединений.
Например, два пула могут быть созданы следующим образом:
await oracledb.createPool({
user: 'hr',
password: myhrpw,
connectString: 'localhost/XEPDB1',
poolAlias: 'hrpool'
});
await oracledb.createPool({
user: 'sh',
password: myshpw,
connectString: 'localhost/XEPDB1',
poolAlias: 'shpool'
});
Затем вы получите соединение из нужного пула, указав его псевдоним. Например:
const connection = await oracledb.getConnection('hrpool');
. . . // Use connection from the HR pool
await connection.close();
Спасибо, указание того, какой пул мне нужен, решило проблему, использование oracledb.getConnection();
позволяло моему подключению только к первому пулу и не позволяло подключиться второму!
Откуда ты это знаешь
only SEI DB is connected
? Если это ошибка ORA-00942, которую вы получили после запроса в базе данных SIP, это означает, что вы подключены к базе данных SIP.