Импорт схемы в новое или другое табличное пространство

Есть ли удобный способ импортировать схему в Oracle 11gR2 с использованием одного нового или другого табличного пространства, чем там, откуда возникли данные?

В качестве примера я экспортировал BLOG_DATA из OLDDB, где все пользовательские данные хранятся в табличном пространстве USERS.

В NEWDB я хотел бы импортировать схему BLOG_DATA, но хранить пользовательские объекты в табличном пространстве BLOG_DATA, созданных специально для этого пользователя.

Я создал пользователя BLOG_DATA, создал табличное пространство BLOG_DATA и установил его как табличное пространство по умолчанию для этого пользователя и добавил соответствующую неограниченную квоту.

CREATE TABLESPACE blog_data DATAFILE SIZE 1G;

CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data;

GRANT connect,resource TO blog_data

Схема экспортировалась из OLDDB с чем-то вроде

exp blog_data/[email protected] file=blog_data.dmp 

После прочтения отличного ответа Фила ниже я подумал о :

Поскольку у данных нет другого места для перемещения, чем табличное пространство по умолчанию - единственное табличное пространство, в котором пользователь имеет квоту, - это ли это эффективно заставляет imp поместить все пользовательские объекты в это табличное пространство по умолчанию?

imp blog_data/[email protected] file=blog_data.dmp

Будет ли это размещать всю схему blog_data в табличном пространстве blog_data в NEWDB? Есть ли причина, почему это не сработает или что я столкнулся с проблемами с некоторыми объектами и т. Д.?

обновление:

Я сделал быстрый тест и нашел, что это так. Imp помещает объекты в табличное пространство по умолчанию для этого пользователя, если он не может поместить его в исходное табличное пространство (например, табличное пространство не существовать). Полное объяснение: http://www.dolicapax.org/?p=57

Тем не менее, я полагаю, что использование Data Pump, например Phil, может быть предпочтительным вариантом.

10 голосов | спросил Roy 12 +04002012-10-12T17:55:28+04:00312012bEurope/MoscowFri, 12 Oct 2012 17:55:28 +0400 2012, 17:55:28

2 ответа


13

На самом деле невозможно указать другое табличное пространство при импорте с помощью утилиты oracle imp. Однако в качестве обходного пути вы можете предварительно создать таблицы, выполнив импорт ROWS=N в USERS, затем alter table mytable move tablespace BLOG_DATA; для каждой таблицы, чтобы переместить их в новое табличное пространство, затем повторите импорт с параметром IGNORE=Y, чтобы игнорировать ошибки создания таблицы и импортировать все данные.

Если данные были экспортированы с помощью Data Pump (expdp), (как в стороне, все должны использовать это в эти дни, скорее чем старые устаревшие утилиты exp /imp ), вы можете легко импортировать его в другое табличное пространство, используя параметр REMAP_TABLESPACE.

, например:

impdp scott/[email protected] file=blog_data.dmp directory=mydir remap_tablespace=USERS:BLOG_DATA
ответил Philᵀᴹ 12 +04002012-10-12T18:06:29+04:00312012bEurope/MoscowFri, 12 Oct 2012 18:06:29 +0400 2012, 18:06:29
0

Вы должны выполнить следующие шаги: -

  • Экспорт пользователя
  • Выполнить импорт с помощью команды
    imp system/manager file=export.dmp indexfile=newfile.sql
    Это импортирует данные и сохраняет все определения в newfile.sql.
  • Отбросьте необходимые объекты.
  • Запустите скрипт newfile.sql после изменения табличных пространств.
  • Импорт из резервной копии для необходимых объектов.
ответил Md Wasi 21 Jpm1000000pmSat, 21 Jan 2017 13:25:54 +030017 2017, 13:25:54

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132