Программирование >>  Oracle 

1 ... 131 132 133 [ 134 ] 135 136 137 ... 469


Импорт и экспорт 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.



1 ... 131 132 133 [ 134 ] 135 136 137 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика