![]() |
|
Программирование >> Oracle
Импорт и экспорт 431 му пользователя А как указывающее на таблицу А.Т. Если уточненное именем схемы имя таблицы, на которую мы ссылаемся, совпадает с именем владельца в момент экспортирования, утилита ЕХР это имя не сохранит. Сравните это с тем, как экспортирован триггер. Триггер T2 TRIGGER создается не по таблице пользователя А - он создается для таблицы пользователя TKYTE! Это потенциально опасный побочный эффект. Если продублировать триггер по таблице TKYTE.T4, его тело будет выполнено дважды, а для таблицы А.Т4 триггера вообще не будет. Настоятельно рекомендую учитывать все это при использовании утилит EXP/IMP для клонирования пользователя. Помните об этих побочных эффектах и ищите их. Выполнив приведенные ниже команды, можно просмотреть все операторы ЯОД, триггеры, процедуры и т.д., прежде чем выполнять их в базе данных: imp userid=sys/manager fromuser=tkyte touser=a INDEXFILE=foo.sql imp userid=sys/manager fromuser=tkyte touser=a SHOW=Y В крайнем случае попробуйте выполнить импорт в базу данных, где нет учетной записи пользователя FROMUSER. Например, ниже выполняется импорт в базу данных, где имеется пользователь А, но пользователя TKYTE нет: C:\exp>imp userid=sys/manager fromuser=tkyte touser=a Import: Release 8.1.6.0.0 - Production on Tue Mar 20 10:29:37 2001 (c) Copyright 1999 Oracle Corporation. All rights reserved. Connected to: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production With the Partitioning option JServer Release 8.1.6.0.0 - Production Export file created by EXPORT:V08.01.06 via conventional path Warning: the objects were exported by TKYTE, not by you import done in WE8ISO8859P1 character set and WE8ISO8859P1 NCHAR character set . importing TKYTEs objects into A . . importing table T1 0 rows imported . . importing table T4 0 rows imported . . importing table T5 0 rows imported IMP-00041: Warning: object created with compilation warnings CREATE FORCE VIEW A . V ( X ) AS select X from TKYTE.tl IMP-00017: following statement failed with ORACLE error 942: CREATE TRIGGER A .t2 trigger before insert on TKYTE.t4 begin null; end; IMP-00003: ORACLE error 942 encountered ORA-00942: table or view does not exist Import terminated successfully with warnings. Глава 8 Так можно выяснить наличие подобных побочных эффектов немедленно. Настоятельно рекомендую использовать такой подход для поиска объектов, использующих уточненные схемой имена, и проверки корректности их импортирования. Несколько иная проблема возникает при импортировании и экспортировании объектных типов Oracle. СУБД Oracle позволяет создавать в базе данных новые типы данных. Можно добавлять типы, равноправные со стандартными NUMBER, DATE, VARCHAR2.... Затем можно создавать таблицы таких типов или таблицы со столбцами таких типов. Поэтому обычный порядок действий - создать схему, затем - типы данных в схеме и, наконец, - объекты, использующие эти типы; причем все это делается от имени одного пользователя. Однако при клонировании такой схемы вы столкнетесь с серьезной проблемой. Я продемонстрирую эту проблему, укажу причины ее возникновения и предложу возможное решение. Начнем со схемы следующего вида: tkyte@TKYTE816> create type my type 2 as object 3 (x int, 4 у date, 5 z varchar2(20) Type created. tkyte@TKYTE816> create table tl of my type 2 / Table created. tkyte@TKYTE816> create table t2 (a int, b my type); Table created. tkyte@TKYTE816> insert into tl values (1, sysdate, hello); 1 row created. tkyte@TKYTE816> insert into t2 values (55, my type(l, sysdate, hello)); 1 row created. tkyte@TKYTE816> commit; Commit complete. tkyte@TKYTE816> host exp userid=tkyte/tkyte owner=tkyte Мы получили копию схемы. Попытавшись теперь использовать параметры FROMUSER/ TOUSER, можно обнаружить следующее: tkyte@TKYTE816> host imp userid=sys/manager fromuser=tkyte touser=a; Import: Release 8.1.6.0.0 - Production on Tue Mar 20 12:44:26 2001 (c) Copyright 1999 Oracle Corporation. All rights reserved. Connected to: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production With the Partitioning option JServer Release 8.1.6.0.0 - Production Импорт и экспорт 433 Export file created by EXPORT:V08.01.06 via conventional path Warning: the objects were exported by TKYTE, not by you import done in WE8ISO8859P1 character set and WE8ISO8859P1 NCHAR character set . importing TKYTEs objects into A IMP-00017: following statement failed with ORACLE error 2304: CREATE TYPE MY TYPE TIMESTAMP 2001-03-20:12:44:21 OID 4A301F5AABF04A46 88552E4AF5793176 as object (x int, у date, z varchar2(20) IMP-00003: ORACLE error 2304 encountered ORA-02304: invalid object identifier literal IMP-00063: Warning: Skipping table A . T1 because object type A . MY TYPE cannot be created or has different identifier IMP-00063: Warning: Skipping table A . T2 because object type A . MY TYPE cannot be created or has different identifier Import terminated successfully with warnings. В этот момент все останавливается. Мы не можем создать тип в пользовательской схеме А, а если бы у нас это и получилось, - это будет другой тип, и импортировать данные мы не сможем. В базе данных будут присутствовать как бы два различных типа NUMBER. В примере выше мы создаем два разных типа MY TYPE, но работаем с ними, как с одним. Проблема (к сожалению, в документации она никак не отражена) состоит в том, что не надо создавать схему, содержащую как типы, так и объекты, особенно если в дальнейшем планируется экспортировать и импортировать ее подобным образом. Используя принцип создания схем CTXSYS и ORDSYS для компонента Oracle interMedia, надо создать отдельную схему, содержащую типы. Если необходимо использовать interMedia Text, мы пользуемся типами схемы CTXSYS. Если предполагается использовать средства interMedia для работы с изображениями, мы пользуемся типами схемы ORDSYS. В нашем случае надо сделать то же самое, т.е. создать схему, содержащую необходимые типы данных: our types@TKYTE816> connect OUR TYPES our types@TKYTE816> create type my type 2 as object 3 (x int, 4 у date, 5 z varchar2(20) Type created. our types@TKYTE816> grant all on my type to public; Grant succeeded.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |