Категории
Самые читаемые
PochitayKnigi » Компьютеры и Интернет » Программирование » Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Читать онлайн Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 29 30 31 32 33 34 35 36 37 ... 123
Перейти на страницу:

Oracle 

Связь Oracle с Win95

Delphi 2 

Оптимизация связи Oracle с Windows 95

Предварительные условия:

• Windows 95

• Установленное клиентское программное обеспечение для доступа к Oracle & программа для соединения с Oracle Server через TCP/IP.

• (Опционально) Программное обеспечение Delphi 2.0 C/S для тестирования результатов.

Цель документа:

помочь увеличить скорость соединения Oracle под Windows 95. Под WinNT такая проблема не стоит, следовательно, данный документ рассматривает только работу с Windows 95. Ниже вы видите разницу в скорости выполнения запроса, выполненного до модификации, и после:

До : Win95 = 10-15 секунд. WinNT = 2-3 секунд.

После : Win95 = 3-4 секунд. (Большое улучшение)

Проблема: Windows 95 в сущности ищет адреса IPC в нескольких сетевых узлах ДО получения соединения с Oracle DNS, WinNT же поступает по другому.

Решение: Измените файл Oracle SQLNET.ORA для выключения вышеуказанной характеристики Windows 95.

Решение шаг-за-шагом:

1. Откройте в Notepad или Write файл SQLNET.ORA. (Данный файл расположен в каталоге <ORA_HOME>networkadmin. Проигнорируйте любые другие разновидности этого файла)

Данный файл должен выглядеть примерно следующим образом:

################

# Filename......: sqlnet.ora

# Node..........: local.world

# Date..........: 24-MAY-94 13:23:20

################

TRACE_LEVEL_CLIENT = OFF

sqlnet.expire_time = 15

names.default_domain = borland.world

name.default_zone = borland.world

Добавьте следующий параметр в файл SQLNET.ORA:

AUTOMATIC_IPC = OFF

После изменений файл должен выглядеть примерно так:

################

# Filename......: sqlnet.ora

# Node..........: local.world

# Date..........: 24-MAY-94 13:23:20

################

AUTOMATIC_IPC = OFF

TRACE_LEVEL_CLIENT = OFF

sqlnet.expire_time = 15

names.default_domain = borland.world

name.default_zone = borland.world

Сохраните измененный файл SQLNET.ORA и ура! В дальнейшем при инициализации соединения с Oracle время соединения вместо 15 секунд составит всего лишь 3 секунды. Скорость работы Delphi существенно увеличится. 

Возникла необходимость в обработке исключительных ситуаций в PL/SQL процедуре (Oracle7 WG Server Release 7.3.2.2.0). Почему у меня не получается?

Nomadic отвечает:

Объявить выборку SELECT * FROM CUSTOM.CAMAIN20TEMP WHERE CC_07_01=curCC_07_01 AND CC_07_02=curCC_07_02 AND CC_07_03=curCC_07_03 курсором, а потом примерно так:

loop

fetch_cursor;

выход когда фетчить больше нечего;

begin

INSERT INTO CUSTOM.CAMAIN20 чего нафетчили;

EXCEPTION

WHEN others THEN

BEGIN

DBMS_OUTPUT.PUT_LINE('ВВОД ДУБЛЯ В CUSTOM.CAMAIN20');

END

end

end loop; 

Поясните, чем в Oracle являются понятия Instance, Database etc.?

Nomadic отвечает:

Перевод документации:

Что такое ORACLE Database?

Это данные которые будут обрабатываться как единое целое. Database состоит из файлов операционной системы. Физически существуют database files и redo log files. Логически database files содержат словари, таблицы пользователей и redo log файлы. Дополнительно database требует одну или более копий control file.

Что такое ORACLE Instance?

ORACLE Instance обеспечивает программные механизмы доступа и управления database. Instance может быть запущен независимо от любой database (без монтирования или открытия любой database). Один instance может открыть только одну database. В то время как одна database может быть открыта несколькими Instance.

Instance состоит из:

SGA (System Global Area), которая обеспечивает коммуникацию между процессами;

до пяти (в последних версиях больше) бэкграундовых процессов.

От себя добавлю – database включает в себя tablespace, tablespace включает в себя segments (в одном файле данных может быть один или несколько сегментов, сегменты не могут быть разделены на несколько файлов). segments включают в себя extents. 

Как заставить Oracle анализировать все таблицы базы данных?

Nomadic отвечает:

Конечно, можно использовать DBMS_SQL, DBMS_JOB…

А можно и так:

#!/bin/sh

#

# Analyze all tables

#

SQLFILE=/tmp/analyze.sql LOGFILE=/tmp/analyze.log

echo @connect dbo/[email protected]> $SQLFILE

$ORACLE_HOME/bin/svrmgrl <> $SQLFILE

connect dbo/passwd

SELECT 'TABLE', TABLE_NAME FROM all_tables WHERE owner = 'DBO';

EOF

echo exit>> $SQLFILE

cat $SQLFILE> $LOGFILE

cat $SQLFILE | $ORACLE_HOME/bin/svrmgrl>> $LOGFILE

cat $LOGFILE | /usr/bin/mailx –s 'Analyze tables' [email protected]

rm $SQLFILE rm $LOGFILE 

В режиме отладки приложения не разрешается доступ (открытие) базы данных. Как лечить?

Nomadic отвечает:

Необходимо отключить (деинсталлировать через Oracle Installer) Trace Service на клиенте – совет от ORACLE.

Глюк имеет место быть только под Windows NT 4.xx. 

Подскажите, как на Oracle 7.3.2.3 (Solaris x86) поменять compatible на 7.3.2.3 (c 7.1.0.0)?

Nomadic отвечает:

Ставить в initmybase.ora

compatible = "7.3.2.3"

и после старта с новым параметром сделать

ALTER DATABASE RESET COMPABILITY;

И рестартовать базу. 

Как настроить Personal Oracle с русским языком на корректную работу с числами и BDE?

Nomadic отвечает:

прописать в HKEY_LOCAL_MACHINESOFTWAREORACLE параметр:

NLS_NUMERIC_CHARACTERS = '.,'

или

после соединения с ORACLE выполнить

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,' 

Как в Oracle создать sequence с некоторого номера?

Одной строкой 

Nomadic отвечает:

create sequence minvalue 10; 

Как решать некоторые вопросы при подключении к Oracle?

Nomadic отвечает:

DD> 1. Все поля (TField), определенные в формах, имеющие типы TDateField,

DD> TSmallIntField – при открытии таблицы ругаются: Field «…» is not of

DD> expected type. Посмотрел – при переопределении их под Oracle'ом они

Чтобы «увидеть» integer-поля нужно в настройке Alias'а Oracle в BDE установить Enable Integers→True (и напрочь будет потерян Locate по этим якобы int/smallint полям). С датами, возможно, тоже надо разбираться через настройки Win & Oracle. У меня в Win дата формата «дд.мм.гггг», в Oracle NLS_LANG→AMERICAN_AMERICA.CL8MSWIN1251 и с датами все гут.

DD> 2. Используя в SQL

DD> строки типа 'SELECT XX FROM YY WHERE XX="QQQ"' мы поступали

DD> неправильно,

DD> т.к. двойные кавычки в Oracle обрабатываются не так, как в Btrieve.

Oracle в данном случае не при чем. Это глюк BDE. Лечилось просто – вместо обрамления двойными кавычками строкового значения, нужно обрамлять его с помощью #39, примерно так 

MySQLString := 'SELECT XX FROM YY WHERE XX='+#39+'QQQ'+#39;

Belsky Roman

(2:450/94.75)

SS> У кого-нибудь есть опыт по настройке BDE? Откликнитесь плиз! При

SS> попытке соединиться с базой вылезает ошибка: Vendor failed init!

SS> Delphi запускаю под 95. Hа всякий случай пути к BDE и ORAWINBIN я

SS> проставил! orant71.dll (родной или переименнованый ora72win.dll)

SS> закидывал куда угодно, но… все равно вылетает ошибка BDE Error

SS> 15879 Vendor failed init :-(

Клиент у тебя NT, как я понял?

• ora7x.dll – 32bit клиент для win95

• orant7x.dll – 32bit клиент для NT

• ora7xwin.dll – 16bit клиент для win

т.е. ora7xwin в Delphi3 вообще ставить бесполезно (16bit для 32bit appl). ora*71.dll у меня изначально к ORACLE 7.2 не коннектился – они там как-то резко сменили OCI. Правда потом ora72win.dll с Personal Oracle 7.3 работал, но все равно лучше, наверное, чтобы номер версии dll был не ниже версии сервера.

А вообще я 32bit дельфях в Vendor Init давно прописываю OCIW32.dll – он всегда для последней версии сервера с которым ты работаешь.

Это IMHO. Hо у меня Delphi3 и Delphi1 коннектятся как с Oracle 7.1 на Unix'е, так и с Personal Oracle 7.3 

WindowsNT 4.0 + Delphi 2.01 C/S + Oracle Client 7.3 + Oracle Server 7.3. После логина в базу данных возникает `EExternalError 0xC0000008`. Что делать?

Nomadic коротко отвечает:

A: (IA, SK): Снести Oracle Trace Collection Services.

Псевдонимы

Получение пути псевдонима и таблицы I

Delphi 1

Есть три способа сделать это… №1 годится только для постоянных псевдонимов BDE. №2 работает с BDE и локальными псевдонимами, и No3 работает с BDE и локальными псевдонимами, используя "тяжелый" путь, через вызовы DBI.

function GetDBPath1(AliasName: string): TFileName;

var ParamList: TStringList;

begin

 ParamList := TStringList.Create;

 with Session do try

  GetAliasParams(AliasName,ParamList);

  Result := UpperCase(ParamList.Values['PATH'])+'';

 finally

  Paramlist.Free;

 end;

end;

function GetDBPath2(AliasName: string): TFileName;

var

 ParamList: TStringList;

 i: integer;

1 ... 29 30 31 32 33 34 35 36 37 ... 123
Перейти на страницу:
Тут вы можете бесплатно читать книгу Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров.
Комментарии