Импорт системных таблиц в другую схему в Oracle 11g - PullRequest
1 голос
/ 02 июля 2011

Я пытаюсь сделать резервную копию базы данных Oracle с помощью expdp. У меня есть конкретный случай, когда таблица приложения находится в табличном пространстве SYSTEM.

  1. Резервный экспорт этой схемы успешно создан с параметрами SCHEMAS = SYSTEM и INCLUDE = TABLE: "like 'USER%'", что соответствует таблицам моего приложения.
  2. Я создал другую схему с пользователем impexp, для которой выделено другое табличное пространство. Когда я пытаюсь импортировать файл .dmp в impexp, импорт завершается неудачно с указанием «SYSTEM». «USER_SYS_MAST» существует. Есть ли способ импортировать эту таблицу во вновь созданную схему. Я также попытался использовать опцию REMAP_SCHEMA = SYSTEM: IMPEXP, но, по-видимому, выдает ошибку, говоря ORA-39013: переназначение схемы SYSTEM не поддерживается.

Подводя итог: я хочу импортировать свои таблицы приложений в табличном пространстве SYSTEM в новое TABLESPACE 'IMPEXP'.

Пожалуйста, дайте мне знать, если я где-то ошибаюсь и пытаюсь сделать что-то, что не поддерживается.

любая помощь будет принята с благодарностью.

Ответы [ 2 ]

7 голосов
/ 02 июля 2011

Это одна из причин, по которой размещение таблиц приложений в схемах SYS или SYSTEM считается плохой практикой. Эти схемы имеют жизненно важное значение для работы наших баз данных и не должны вмешиваться.

Вы составили этот блумер, назвав свои таблицы префиксом USER, что соответствует соглашению, используемому в словаре данных.

Что вам нужно сделать, это создать новую схему для хранения этих таблиц. Предоставьте ему все необходимые привилегии, чтобы вы думали, что он должен принадлежать SYSTEM. Затем переместите эти таблицы из схемы SYSTEM.

Чтобы сделать правильную работу, вы должны изменить свое приложение на использование этой новой схемы, но в качестве временного исправления вы можете дать SYSTEM права на таблицы и построить для них синонимы. Если у вас есть время, измените приложение. Это принесет вам меньше горя в долгосрочной перспективе.

В любом случае вы сможете экспортировать данные из старой базы данных в целевую базу данных, используя эту новую схему.

3 голосов
/ 03 июля 2011

Согласен с APC.

В вашем конкретном случае я бы посмотрел DBMS_METADATA.GET_DDL, чтобы извлечь DDL, чтобы я мог воссоздать все объекты в новой схеме. Существуют варианты исключения компонента TABLESPACE, чтобы они создавались в табличном пространстве новой схемы по умолчанию.

Тогда я бы просто сделал INSERT / * + APPEND * / INTO newschema.table AS SELECT * FROM SYSTEM.table

Если пробел является проблемой, вам может потребоваться TRUNCATE или DROP отдельные таблицы сразу после их успешного копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...