Как добавить каталоги и зарегистрировать XML-схему на сервере БД Oracle, размещенном на Docker? - PullRequest
0 голосов
/ 24 декабря 2018

У меня БД Oracle 12c, размещенная на докере, и я не могу найти способ добавить схемы XML в БД (используя SQL Developer).

Я перенес необходимую папку с файлами с локального компьютера в контейнер Docker, я предоставил все разрешения и необходимые группы пользователей для папки:

drwxrwxrwx 2 oracle dba 4096 Dec 23 19:21 DB3

Содержимое каталога DB3 - LEAGUES.xsd и LEAGUE.xml

SQL-скрипт:

`CREATE OR REPLACE DIRECTORY XMLDATA AS '/DB3'; `

`BEGIN
    DBMS_XMLSCHEMA.REGISTERSCHEMA(
    SCHEMAURL => 'http://localhost:8080/home/leagues.xsd',
    SCHEMADOC => bfilename('XMLDATA', 'leagues.xsd'));
end;
/`

И этот код дает мне сообщение об ошибке, что файл не существует.

ORA-22288: операция с файлом или LOB FILEOPEN завершилась неудачно. Нет такого файла или каталога

Я уверен, что я делаю что-то не так, но так как это первый раз, когда я работаю с серверами БД, я не могу найтиспособ исправить эту проблему.

Буду признателен за некоторые советы или указания, где их искать, чтобы сделать эту работу.

1 Ответ

0 голосов
/ 24 декабря 2018

Я предполагаю, что вы перенесли свой каталог на хост докера.Чтобы процесс Oracle мог получить к нему доступ, его необходимо «перенести» внутрь контейнера докера.

Три способа сделать это:

  • получить оболочку внутри контейнера докера (docker exec -it <containerid> /bin/sh), затем извлеките каталог оттуда, используя ssh или другой инструмент для копирования файлов (который вам, возможно, придется сначала установить внутри контейнера).Не очень безопасный, я бы не советовал делать это, если вы работаете на чем-то другом, кроме локального компьютера, в целях разработки.
  • Перестройте образ докера, добавив в него папку DB3.Вы можете сделать это, даже если вы используете исходный образ, который вы не создали самостоятельно: echo "FROM base/oracle:12c \n COPY /DB3 /DB3" | docker build -t custom/oracle:12c -
  • смонтируйте вашу папку / DB3 на хосте как том в контейнер: docker run -v /DB3:/DB3 <other options and arguments> (или эквивалент вфайлы вашего дескриптора, если вы работаете в Openshift / Rancher /...)

Также убедитесь, что имена файлов совпадают с регистром между вашим сценарием и файловой системой.

...