Как удалить и заново создать подключаемую базу данных в Oracle DB 18c XE?

Я новичок в Oracle DB 18c (исходя из MS SQL Server), и я хочу создать подключаемую базу данных, если она еще не существует.

Я прочитал многочисленные спецификации об управляющих операторах, СОЗДАТЬ ПОДКЛЮЧАЕМУЮ БАЗУ ДАННЫХ и УДАЛИТЬ ПОДКЛЮЧАЕМУЮ БАЗУ ДАННЫХ, и, согласно этим документам, я считаю, что все сделал правильно.

Но когда я выполняю следующий скрипт, используя Oracle 18c XE SQLPlus REPL в Linux с помощью @/tmp/test.sql:

ALTER SESSION SET CONTAINER=CDB$ROOT;

DEFINE DB_NAME = 'MYDB'
DEFINE DB_ADMIN = 'sa'
DEFINE DB_PWD = 'myPwd'

BEGIN
    IF SELECT COUNT(*) FROM v$pdbs WHERE name = '&DB_NAME' > 0 THEN DROP PLUGGABLE DATABASE &DB_NAME INCLUDING DATAFILES; END IF;
END;

CREATE PLUGGABLE DATABASE &DB_NAME ADMIN USER &DB_ADMIN IDENTIFIED BY &DB_PWD ROLES=(dba);

SQLPlus выводит:

SQL> @/tmp/test.sql

Session altered.

  6  

... и не продолжается оттуда.

Что я сделал не так?

PS: рассматриваемая база данных уже существует, поэтому ее следует сначала удалить, а затем создать заново.


person AxD    schedule 24.05.2021    source источник
comment
Ничего общего с PDB, но вам нужна косая черта (/) в отдельной строке, чтобы завершить и запустить ваш PL /блок SQL. Но вы не можете запускать DDL статически из PL/SQL; оператор drop должен быть динамическим SQL.   -  person Alex Poole    schedule 24.05.2021
comment
Что ж, вся концепция удаления и воссоздания базы данных является антишаблоном в Oracle. Кроме того, термин SQL Server и Oracle не обязательно означает одно и то же. По-видимому, то, что SQL Server называет базой данных, Oracle называет схемой; из-за старых версий SQL Server, которые не поддерживали схему. На самом деле удаление и воссоздание — это антипаттерн для любого объекта базы данных в Oracle. Я предлагаю взглянуть на Мигрируйте и свое мышление. Хотя это относится к Postgres, оно в равной степени применимо к любой базе данных.   -  person Belayer    schedule 25.05.2021