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

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


Глава 8

Все схемы должны использовать эти типы, а не собственные, которые тесно связаны с их учетной записью. Теперь можно повторно выполнить рассмотренный ранее пример:

tkyte@TKYTE816> connect tkyte

tkyte@TKYTE816> create table tl of our types.my type

2 / Table created.

tkyte@TKYTE816> create table t2 (a int, b our types.my type); Table created.

tkyte@TKYTE816> insert into tl values (1, sysdate, hello); 1 row created.

tkyte@TKYTE816> insert into t2 values (55,

2 our types.my type(l, sysdate, hello)); 1 row created.

tkyte@TKYTE816> commit; Commit complete.

tkyte@TKYTE816> host exp userid=tkyte/tkyte owner=tkyte

Итак, единственное отличие в том, что мы используем уточненное имя типа, OUR TYPES.MY TYPE, а не просто MY TYPE. Поскольку синонимы для типов создавать нельзя, такое уточнение именем схемы обязательно: необходимо указывать полное имя объекта, включая схему, которой он принадлежит. Именно так мы обязаны делать при использовании типов interMedia (например, объектов CTXSYS и ORDSYS), да и индексов, то есть всегда необходимо указывать уточненные имена. Поэтому тщательно выбирайте имя схемы, содержащей типы, - вам с ним предстоит некоторое время жить!

Теперь давайте рассмотрим, как на этот раз пройдет импортирование:

tkyte@TKYTE816> host imp userid=sys/manager fromuser=tkyte touser=a;

Import: Release 8.1.6.0.0 - Production on Tue Mar 20 12:49:33 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

IMP-00017: following statement failed with ORACLE error 2304:

CREATE TABLE Tl OF OUR TYPES . MY TYPE OID AC60D4D90ED1428B84D245357AD F2DF3 OIDINDEX (PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 524288) TABLESPACE DATA ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING S

TORAGE(INITIAL 524288) TABLESPACE DATA



Импорт и экспорт 435

IMP-00003: ORACLE error 2304 encountered ORA-02304: invalid object identifier literal

. . importing table T2 1 rows

imported

Import terminated successfully with warnings.

Уже лучше, но тоже не идеально. Объектную таблицу импортировать не удалось, но реляционная таблица с объектным типом столбца импортирована успешно. Этого следовало ожидать. Объектная таблица теперь формально другая, а для объектов это существенно. Эту проблему можно, однако, обойти, поскольку эти две таблицы фактически созданы по одному и тому же типу. Надо заранее создать объектную таблицу в схеме пользователя А. Можно использовать параметр IMP INDEXFILE= для получения необходимого оператора ЯОД:

a@TKYTE816> host imp userid=a/a tables=tl indexfile=tl.sql

Если открыть полученный файл T1.SQL в текстовом редакторе:

REM CREATE TABLE A . T1 OF OUR TYPES . MY TYPE OID

REM AC60D4D90ED1428B84D245357ADF2DF3 OIDINDEX (PCTFREE 10 INITRANS 2 REM MAXTRANS 255 STORAGE (INITIAL 524288) TABLESPACE DATA ) PCTFREE 10

REM PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING STORAGE (INITIAL 524288) REM TABLESPACE DATA ;

REM ALTER TABLE A . T1 MODIFY ( SYS NC OID$ DEFAULT SYS OP GUID()) ; REM ... 1 rows

Необходимо удалить слова REM, а также конструкцию OID xxxxx, а затем выполнить:

a@TKyTE816> CREATE TABLE A . T1 OF OUR TYPES . MY TYPE

2 OIDINDEX (PCTFREE 10 INITRANS 2

3 MAXTRANS 255 STORAGE(INITIAL 524288) TABLESPACE DATA ) PCTFREE 10

4 PCTUSED 40 INITRANS 1 MAXTRANS 255 LOGGING STORAGE (INITIAL 524288)

5 TABLESPACE DATA ;

Table created.

a@TKYTE816> ALTER TABLE A . Tl MODIFY ( SYS NC OID$ DEFAULT

SYS OP GUID()) ;

Table altered.

Теперь можно выполнить импорт:

a@TKYTE816> host imp userid=a/a tables=tl ignore=y

Import: Release 8.1.6.0.0 - Production on Tue Mar 20 13:01:24 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



Глава 8

import done in WE8ISO8859P1 character set and WE8ISO8859P1 NCHAR character set

. importing TKYTEs objects into A

. . importing table N1 1 rows

imported

Import terminated successfully without warnings. a@TKYTE816> select * from tl;

X Y Z

1 20-MAR-01 hello

и данные загружены.

Использование различных версий утилит IMP/EXP

Можно использовать утилиты IMP и ЕХР с разными версиями СУБД Oracle. Можно даже экспортировать и импортировать данные в СУБД версии 7 и 8. Однако при этом нужно использовать подходящие версии утилит ЕХР и IMP. При выборе версии IMP и ЕХР руководствуйтесь следующими правилами:

Всегда используйте версию IMP, соответствующую версии СУБД. Если вы собираетесь импортировать в базу данных версии 8.1.6, это надо делать с помощью утилиты импорта версии 8.1.6.

Всегда используйте версию ЕХР, соответствующую старейшей из двух версий СУБД. Если вы экспортируете данные из версии 8.1.6 в 8.1.5, необходимо использовать версию 8.1.5 утилиты ЕХР, по протоколу Net8, подключаясь к СУБД версии 8.1.6. Если вы экспортируете из версии 8.1.5 в 8.1.6, необходимо использовать утилиту ЕХР версии 8.1.5, подключаясь к СУБД версии 8.1.5 локально.

Это принципиально важно. Если попытаться экспортировать из версии 8.1.6 в 8.0.5, например, с помощью утилиты ЕХР версии 8.1.6, окажется, что утилита IMP версии 8.0.5 не может прочитать файл DMP. Более того, нельзя использовать версию 8.1.6 утилиты IMP для подключения к СУБД версии 8.0.5; это не сработает. В базах данных версии 8.1.6 есть возможности и объекты, не существовавшие в 8.0.5.

Помня о том, что версию IMP определяет СУБД, в которую данные импортируются, а версия ЕХР должна быть старейшей из двух, всегда можно перенести данные с одной версии на другую.

Последнее замечание: если у вас имеются базы данных Oracle 7, в базах данных Oracle 8 нужно выполнить сценарий, чтобы утилита ЕХР версии 7 могла с ними работать. Это сценарий cat7exp.sql, который находится в каталоге [ORACLE HOME]/rdbms/ admin. Сценарий необходимо выполнять от имени пользователя SYS с помощью утилиты командной строки SVRMGRL. В результате в базе данных версии 8 будут установлены совместимые с версией 7 сценарии экспорта. Они не заменят представления, используемые для экспорта версией 8, - эти представления останутся нетронутыми.



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

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