Прежде всего. Конечно, я пытался гуглить и видел другие ответы, но ни один из них мне не помог.
Проблема Я запускаю сервер, и когда он запускается, я хочу подключить PDB , Чтобы дождаться инициализации и открытия БД, прежде чем подключать новую PDB, я запускаю скрипт:
for (; ; )
{
$process = Start-Process "sqlplus" -ArgumentList "-S sys/Qq123456 as sysdba @$Env:INSTALL_DIR\$Env:SCRIPT_DIR\ping.sql" -Wait -PassThru
if ($process.ExitCode -eq 0)
{
Write-Output "DB started!"
break;
}
Start-Sleep -s 1
}
ping. sql:
WHENEVER SQLERROR EXIT SQL.SQLCODE;
declare
db_not_open exception;
pragma exception_init (db_not_open, -20123);
l_count number(10);
begin
select count(*) into l_count from v$instance where status = 'OPEN' and database_status = 'ACTIVE';
if (l_count = 0) then
RAISE db_not_open;
end if;
end;
/
exit 0;
Затем я пытаюсь подключить PDB sqlplus -S / as sysdba "@$Env:INSTALL_DIR\$Env:SCRIPT_DIR\attach_pdb.sql"
attach_pdb. sql:
WHENEVER SQLERROR EXIT SQL.SQLCODE;
create pluggable database test_pdb using 'c:\data\oracle\oradata\orcl\test_pdb\test_pdb.xml' nocopy tempfile reuse;
alter pluggable database test_pdb open;
exit;
Таким образом, я l oop, пока у меня не открыто и активно состояние БД, но все равно иногда я получаю сообщение об ошибке при попытке подключить PDB:
create pluggable database test_pdb using 'c:\data\oracle\oradata\orcl\test_pdb\test_pdb.xml' nocopy tempfile reuse
*
ERROR at line 1:
ORA-01109: database not open
Итак, кто проверяет, что БД открыта и готова к любой операции?