Oracle: импорт дампов данных без содержимого файла дампа знаний - PullRequest
2 голосов
/ 14 сентября 2010

Старый подход для экспорта / импорта всей схемы:

 exp user/pwdp@server FILE=export.dmp OWNER=user ROWS=Y
 imp newuser/pwd@server FULL=Y FILE=export.dmp

Новый подход:

 expdp user/pwdp@server DUMPFILE=export.dp DIRECTORY=exportfolder 

Однако возникла проблема с импортом:

 impdp newuser/pwdp@server DUMPFILE=export.dp DIRECTORY=exportfolder

будетничего не импортировать:

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-31655: no data or metadata objects selected for job
ORA-39154: Objects from foreign schemas have been removed from import
Master table "NEWUSER"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "NEWUSER"."SYS_IMPORT_FULL_01":  newuser/********@server
DUMPFILE=export.dp DIRECTORY=exportfolder
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Job "NEWUSER"."SYS_IMPORT_FULL_01" successfully completed at 19:13:04

Опция добавления схем не поможет (результат тот же, oracle не позволяет импортировать объекты, не являющиеся собственностью):

impdp newuser/pwdp@server DUMPFILE=export.dp DIRECTORY=exportfolder schemas=user

И только один рабочий подход, которыйЯ нашел:

impdp newuser/pwdp@server DUMPFILE=export.dp DIRECTORY=exportfolder remap_schema=newuser:user

Итак, вопрос в том, как импортировать дамп насоса данных схемы, не зная, какая схема была экспортирована?

(Конечно, я могу посмотреть первые 512 байт файла экспорта инайти строку типа "USER". "SYS_EXPORT_SCHEMA_01"), но может быть существует другой подход?

1 Ответ

7 голосов
/ 23 июня 2011

Во-первых, технически вы не используете full = y правильно:

imp newuser/pwd@server FULL=Y FILE=export.dmp

Вы должны сделать:

imp newuser/pwd@server touser=newuser fromuser=user FILE=export.dmp

Что похоже на команду impdp remap_schema.

Однако я понимаю, что вы пытаетесь импортировать схему от одного пользователя к другому, не зная перед этим пользователя-источника.Я просто должен был упомянуть об этом, потому что если вы не знаете исходного пользователя, то можно легко предположить, что вы не знаете содержимого файла данных;и если вы не знаете содержимого файла данных, вы можете импортировать гораздо больше пользователей и данных, чем вы думаете, если бы вы указали full = y.

Point: полный импорт = y означаетимпортировать каждого пользователя и связанный с ним контент;независимо от пользователя, которого вы используете для входа в базу данных и запуска импорта.

Сказав мой отказ от ответственности, impdp обладает точно такой же функциональностью в отношении полного импорта - просто используйте full = y

impdp newuser/pwdp@server DUMPFILE=export.dp DIRECTORY=exportfolder full=y

ОБНОВЛЕНИЕ

this will works in newuser have privilege: IMP_FULL_DATABASE

execution `grant IMP_FULL_DATABASE to newuser` solved it.

Ссылки: http://download.oracle.com/docs/cd/B19306_01/server.102/b14215/dp_import.htm#sthref301

...