![]() |
|
Программирование >> Oracle
Глава 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, - эти представления останутся нетронутыми.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |