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

1 ... 134 135 136 [ 137 ] 138 139 140 ... 469


Глава 8

MY ROLE С у > 10

SYS C002677 P

SYSJC002678 U

SYS C002679 R

6 rows selected.

Для нее создано много требований: шесть. Я экспортирую схему, удаляю таблицу и импортирую снова:

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

tkyte@tkyte816> drop table T;

Table dropped.

tkyte@TKYTE816> host imp userid=tkyte/tkyte full=y ignore=y rows=n tkyte@TKYTE816> select constraint name name, constraint type type, search condition

2 from user constraints where table name = T;

NAME T SEARCH CONDITION

SYS C002680 С Z IS NOT NOLL

SYS C002681 С x > 5

MY RULE С у > 10

SYS C002683 P

SYS C002684 U

SYS C002685 R

б rows selected.

Пока все выглядит нормально. Предположим, однако, что мы по какой-то причине снова выполняем импорт (например, он частично не удался). При этом мы обнаружим следующее:

tkyte@TKYTE816> host imp userid=tkyte/tkyte full=y ignore=y Import: Release 8.1.6.0.0 - Production on Tue Mar 20 15:42: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

Export file created by EXPORT:V08.01.06 via conventional path

import done in WE8ISO8859P1 character set and WE8ISO8859P1 NCHAR character set

. importing TKYTEs objects into TKYTE

. . importing table T 0 rows

imported

IMP-00017: following statement failed with ORACLE error 2264: ALTER TABLE I ADD CONSTRAINT MY RULE CHECK ( у > 10 ) ENABLE

NOVALIDAT



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

IMP-00003: ORACLE error 2264 encountered

ORA-02264: name already used by an existing constraint

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

ALTER TABLE T ADD UNIQUE ( ) USING INDEX PCTFREE 10 INITRANS 2 MAXTRAN

S 255 STORAGE (INITIAL 524288) TABLESPACE DATA ENABLE IMP-00003: ORACLE error 2261 encountered

ORA-02261: such unique or primary key already exists in the table

About to enable constraints...

Import terminated successfully with warnings.

tkyte@TKYTE816> select constraint name name, constraint type type, search condition

2 from user constraints where table name = T;

NAME T SEARCH CONDITION

SYS C002680 С Z IS NOT NULL

SYS C002681 С x > 5

MY RULE С у > 10

SYS C002683 P

SYS C002684 U

SYS C002685 R

SYS C002686 С x > 5

7 rows selected.

Появилось дополнительное требование. На самом деле при каждом повторном импортировании будет добавляться дополнительное требование. Для явно поименованного требования было выдано предупреждение: нельзя дважды создавать требование с одним и тем же именем. А вот не имеющее явно заданного имени требование х > 5 создано снова. Так произошло потому, что сервер сгенерировал для него новое имя.

Я знаю случаи, когда выполнялся экспорт на одной базе данных, удалялись данные на другой, и использовался импорт для наполнения структур исходными данными. Со временем накапливались сотни требований проверки для многих столбцов. Производительность начинала падать, и необходимо было выяснить, почему. Причина проста: при каждом копировании данных добавлялся очередной набор требований, делающих те же проверки. Давайте посмотрим, какое влияние может оказать всего сотня избыточных требований:

tkyte@TKYTE816> create table t

2 (x int check (x > 5)

Table created.

tkyte@TKYTE816> declare

2 l start number default dbms utility.get time;

3 begin

4 for i in 1 . . 1000

5 loop

6 insert into t values (10) ;



Глава 8

7 end loop;

8 dbms output.put line

9 (round((dbms utility.get time-l st*rt)/100,2) seconds);

10 end;

11 /

. 08 seconds

PL/SQL procedure successfully completed.

tkyte@TKYTE816> begin

2 for i in 1 . . 100

3 loop

4 execute immediate

5 ALTER TABLE TKYTE . T ADD CHECK ( x > 5 ) ENABLE;

6 end loop;

7 end;

PL/SQL procedure successfully completed. tkyte@TK:E816> declare

2 l start number default dbms utility.get time;

3 begin

4 for i in 1 . . 1000

5 loop

6 insert into t values (10) ;

7 end loop;

8 dbms output.put line

9 (round((dbms utility.get time-l start)/100,2) seconds);

10 end;

11 /

17 seconds

PL/SQL procedure successfully completed.

Еще одна веская причина явно задавать имена требований!

Поддержка национальных языков (NLS)

NLS - это сокращение от National Language Support (поддержка национальных языков). Она позволяет хранить, обрабатывать и получать данные на разн1х языках. Она гарантирует, что утилиты базы данных и сообщения об ошибках, порядок сортировки, форматы представления даты, времени, денежная единица, соглашения по представлению числовых данных и принятый календарь автоматически согласуются с родным языком клиента и форматом. Например, числа в]даются с соответствующим разделителем разрядов и дробной части. В некоторых странах числа должны выдаваться как 999.999.999,99, в других - как 999,999,999.00. Эти особенности необходимо учитывать при использовании утилит экспорта и импорта для переноса данных в среде с различными наборами символов. Существенное значение имеют наборы символов:

клиента, с которого запускается ЕХР, и базы данных, из которой данные экспортируются;



1 ... 134 135 136 [ 137 ] 138 139 140 ... 469

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