Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Название:Советы по Delphi. Версия 1.4.3 от 1.1.2001
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001 краткое содержание
…начиная с 1001. Смотрите другие файлы…
Советы по Delphi. Версия 1.4.3 от 1.1.2001 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
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. (Данный файл расположен в каталоге \network\admin. Проигнорируйте любые другие разновидности этого файла)
Данный файл должен выглядеть примерно следующим образом:
################
# 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/passwd@> $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' tlk@nbd.kis.ru
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_MACHINE\SOFTWARE\ORACLE параметр:
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 и ORAWIN\BIN я
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 был не ниже версии сервера.
Читать дальшеИнтервал:
Закладка: