Post by Oleg Dvornikov
imp dbauser / password file = file_table.dmp fromuser = user1 touser = user2
IS> Підкажіть, будь ласка. Я приблизно так і роблю, але проблема з tablespace.
IS> Мені треба скопіювати всю схему. Причому в копії потрібна тільки структура,
IS> без даних.
Можна просто згенерувати текст DDL-ів, якщо додати show = y, то імпорт
замість самого імпортування видасть повний текст створення всіх об'єктів.
Тільки потрібно вручну підправити текст, видалити лапки і з'єднати
потрібні рядки.
imp dbauser / password file = file.dmp full = y show = y
IS> imp USERID = system / system ROWS = n FROMUSER = user1 TOUSER = user2 FILE = file.dmp
IS> Схема user1 розташовується в стандартних табличних просторах.
IS> Для користувача user2 явно прописано табличний простір (create user
IS> user2 identified by user2 default tablespace user2).
IS> Однак всупереч моїм наївним очікуванням імпорт виконується не в табличное
IS> простір user2, а в стандартні табличні простору.
Проблема в процедурі імпорту - imp намагатиметься спочатку використовувати
tablespace з таким же ім'ям як і у вихідного об'єкта, і тільки при
відсутності такого tablespace буде використовувати default tablespace для даного
юзера.
IS> Можна інакше, не через імпорт перенести структури таблиць схеми?
IS> Чи можна якось імпортувати в табличний простір user2?
Можна тільки звичайні таблиці, без LOB. Якщо не забув, то Oracle рекомендує
так. Припустимо вихідна схема використовувала табличні простору DATA і INDX,
тоді на _другой_ базі даних з відсутнім tablespace DATA і INDX створюється
user2 c default tablespace user2. Робимо імпорт туди, і всі об'єкти будуть
перестворювати в табличному просторі USER2. Тепер робимо експорт звідси і
імпорт в першу базу, де всі об'єкти будуть створені вже в USER2.
При наявності LOB, швидше за все простіше вручну підправити DDL скрипт,
згенерований через imp show = y. Інший варіант, згенерувати скрипт через
Reorg Wizard від Enterprise Manager, тут вже згадали. Я робив і так, і так.