Главная > Программирование > Работа с базами данных > |
FAQ по Centura SQLBase |
Секция 3 из 3 - Предыдущая - Следующая
Все секции
- 1
- 2
- 3
A: Параметры настройки оптимизатора могут быть изменены с помощью команды:
ALTER SESSION SET OPTIMIZER_GOAL = <уровень>
Где уровень – это одно из следующих значений:
RULE | Rule-based optimization(index) |
CHOOSE | Cost-based optimization(index+amount of data+location of data) |
FIRST_ROW | Cost-based optimization for the first rows of the result set |
ALL_ROWS | Cost-based optimization for the entire result set |
A: Oracle отображает execution plan для объектов базы данных с помощью команды "EXPLAIN PLAN". Чтобы воспользоваться этой командой необходимо убедиться, что таблица "PLAN_TABLE" существует. Ее описание находится в файле UTLXPLAN.SQL:
CREATE TABLE PLAN_TABLE (
statement_id varchar2 (30),
timestamp date,
remarks varchar2 (80),
operation varchar2 (30,
options varchar2 (30),
object_node varchar2 (128),
object_owner varchar2 (30),
object_name varchar2 (30),
object_instance numeric,
object_type varchar2 (30),
optimizer varchar2 (255),
search_columns numeric,
id numeric,
parent_id numeric,
position numeric,
cost numeric,
cardinality numeric,
bytes numeric,
other_tag varchar2 (255),
other long);
A: Используйте 16-битный SqlNet 2.3, поставляемый с Oracle 7.3. По умолчанию устанавливается
32-разрядный клиент для Windows’NT, 95 или 98. Чтобы установить 16-битный SqlNet, необходимо
войти в каталог Windows на CD Oracle и запустите 16-битный установщик.
A: Это связано с тем, что максимальная длина VARCHAR2 в ORACLE – 2000 символов, что
трактуется OraGtwy как LONG VARCHAR, даже если явно указать меньшую длину возвращаемого
значения (например, VARCHAR(80)), поэтому данные следует принимать в переменные (или
поля) типа Long String.
A:Для обмена данными с хранимой процедурой следует использовать локальные переменные,
а затем из них передавать значения в параметры.
Q: Что за раздел [ODBCrtr] в sql.ini? Насколько я понял, это настройки роутера. Но в документации я по этому вопросу ничего не нашел. Хотелось бы узнать о них по подробнее.
A: Короткий ответ:
Раздел ODBCrtr в sql.ini использовался в ранних версиях SQLBase для определения удаленной (remotedbname) БД для QDBC взаимодействия. В настоящее время он заменен на настройки в файле ODBC.INI. Смотрите соответствующие разделы документации по SQLBASE Connection. Подробнее о старой версии раздела [ODBCrtr] в sql.ini можно посмотреть в документации версии 5.2 (или 6.0) SQLBase Книга "SQLNetwork: Guide to GUPTA Connectivity " стр. 3. 24. В версии 7.5 SQLBase этот раздел [ODBCrtr] может использоваться для определения параметра buffrow (и других) для контроля за буферизацией ODBC взаимодействия ( см. стр. 8-11, 4-8, 4-10 и др. электронной книги ccon.pdf - книга Connecting Centura Objects to Databases из CTD 2.0 Matternhorn).
Возможный распространенный ответ:
Раздел ODBCrtr в sql.ini использовался в ранних версиях SQLBase для определения удаленной (remotedbname) БД для QDBC взаимодействия. В документации версии 5.2 (или 6.0) SQLBase Книга "SQLNetwork: Guide to GUPTA Connectivity " на стр. 3. 24. Сказано буквально следующее:
(начало цитаты)
ODBC remotedbname
Section [odbcrtr]
Syntax remotedbname=db_name, connect__string
Description db_name specifies the database. The name cannot be more than 8 characters.
The connect string can also contain a user name (UID) and password (PWD) for Quest or SQLWindows login dialog boxes. User name and password can be defined in three places: in ODBC. INI, in SQL. INI, and at runtime; each one of these locations takes precedence over its predecessor (that is, a UID and PWD in SQL. INI override any ODBC. INI entries). If no user name or password are specified in files, you are prompted at runtime for the security information. Values in the connect string may be separated by semi-colons (;).
For more information about ODBC. INI and the connect string, read your ODBC driver manuals.
Example This example specifies a database called DEMO. It connects to a data source called MYDB, which is defined in ODBC.INI with SYSADM/SYSADM as the user name and password.
Не вдаваясь в детальный перевод, можно сказать, что информация об удаленной БД ODBC дублировалась в нескольких местах: ODBC.INI и SQL.INI. Для последних версий SQLBase эта неопределенность была преодолена. В документации на SQLBase 7.1 - 7.5 уже, хотя и коротко сказано свежующее ( электронная книга Connecting Centura Objects to Databases - ссоn.pdf, раздел Connect search order стр. 1-8):
(начало цитаты)
A slight variation applies to SQLRouter/ODBC and SQLRouter/Microsoft SQL Server. Instead of searching the [odbcrtr] section of SQL.INI for a remotedbname statement, the application tries to find an ODBC data source name in the ODBC.INI file that matches the target database name. Otherwise, the processing is the same as for all the other SQLRouters.
(конец цитаты)
Все настройки для удаленных БД на базе ODBC в частности для SQLRouter/ODBC и SQLRouter/Microsoft SQL Server введены в файл настроек ODBC.INI (или в DDC.INI для последних версий CTD. DDC database connectivity configuration). Нужно посмотреть соответствующие разделы документации, связанные с настройкой драйверов ODBC на вашем компьютере. В версии 7.5 SQLBase этот раздел [ODBCrtr] может использоваться для определения параметра buffrow(и других) для контроля за буферизацией ODBC взаимодействия ( см. стр. 8-11, 4-8, 4-10 и др. электронной книги ccon.pdf - книга Connecting Centura Objects to Databases из CTD 2.0 Matternhorn). Кроме того, старый раздел поддерживался для коммуникаций в OS/2 и роутеров ДОС dbxlocal, dbrouter и dbxcompbo.
Q: Проблема с работой CTD 1.5.1. под Oracle 8.1.5.
A: В Интернет на сайте www.centurasoft.com
есть такая информация. Хотя Ваша проблема, по-моему решена, т.к. новых звонков от Вас
не последовало, я все-таки решил Вам ее сообщить в первозданном виде. Может быть, она
будет полезна в дальнейшем.
Tech Alert
September 10, 1999
CTD 1.1.2 or 1.5.x and Oracle 8.1.5 ( Oracle 8i )
Description:
CTD Applications fail to connect to Oracle 8i (also called Oracle 8.1.5)
Solution:
There are actually two solutions to the problem.You can install the Oracle NET8 client software from Oracle 8.0.5 and it will communicate correctly with Oracle 8i. You can also use the SQL*Net 2.3 client software from Oracle 7.
-OR-
Use the Oracle 8i (8.1.5) client software and manually add the following entry into the Registry at location:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\
Add the following string value:
ORAOCI ORACLIENT8.DLL
and you will be able to successfully use the Oracle 8i (8.1.5) client software. You will still
need to run the VIEW8.ORA and PLSVIEW8.ORA scripts, logged on as "SYS", in order to use the Database Explorer with Oracle 8i.Note: This information only applies to Centura 32-bit applications, not to SQLWindows
16-bit applications, because the Oracle 8i client software is exclusively 32-bit.
A: Эта ошибка связана с проблемой определения путей загрузки DLL. Необходимо исследовать,
как загружаются необходимые модули на машинах с нормальной свяью и сравнить со сбойными
машинами. Некоторые драйверы устанавливает ODBC Администратор(ODBC32. DLL). Это приводит
к несоответствию версий ODBC Engine.
A: Если необходимо использовать "begin transaction" и "commit transaction" (или "rollback transaction") в сохраненных процедурах для MS SQL Server(ver 6.0, или 6.5) включите AUTOCOMMIT перед вызовом сохраненных процедур:
Call OdrPrepareProc(hSql, 'Call myproc ', ")
Call SqlSetParameter (hSql, DBP_AUTOCOMMIT, TRUE, ")
Call SqlExecute (hSql)
Call SqlSetParameter (hSql, DBP_AUTOCOMMIT, FALSE, ")
Если нет установки AUTOCOMMIT ON, Centura SQL/API неявно добавляет "begin tran"
прежде, чем вызывается любое DML утверждение и "commit tran" когда вызывается SqlImmediate('COMMIT’).
Процедура сообщит об ошибке возврата транзакции:
Create procedure myproc
AS
If @@ TRANCOUNT < > 0
begin
return -1 - - error
end
...
begin tran
-- make some DML here
.....
If <ERROR>
rollback tran
else
commit tran
A: Использование ‘||’ не отрабатывается.
SQL Server использует знак '+' для конкатенации столбцов, как показано в следующем
примере:
SELECT colA + colB + colC FROM tableD INTO :sVar
A:
A: Детальная информация по этой теме доступна по адресу:
http://www.centurasoft.com/support/tech_info/bulletins/access~1.html
A: При использовании приложений, которые создают SQL-запросы подобно "INSERT INTO
"INETLOG"("ClientHost", ..) ... " для вставки данных в SQLBase, существует проблема
в том, что кавычки в именах столбцов и таблиц не воспринимаются. Обходным вариантом
является следующий шаг. Необходимо создать таблицы и столбцы с кавычками в именах.
Например:
CREATE TABLE "INETLOG"("ClientHost" char (255), ...)
В SQLBASE.
Либо переименуйте уже существующие таблицы.
A: Невозможно проверить все ODBC драйверы. Если драйвер совместим с ODBC 2.0, то
он должен работать. Если имеются трудности с типами данных, обратитесь к интерактивной
справке для получения информации о DCC.INI.
A: Это может быть выполнено с помощью непосредственного подключения ODBC API. Либо
с помощью использования ODBCTESTX.OCX(свободно распространяемый ActiveX компонент),
который работает с ODBC API.
A: Centura сохраняет информацию об ODBC в файле по имени GUPTA.INI. Это, как предполагается,
делает соединение с источником данных быстрее. Этот файл хранится в каталоге, который
содержит ODBC32.DLL. Рекомендуется удалить GUPTA.INI прежде, чем будет соединение
с ODBC источником данных. Это предотвратит ошибку, при правильно сконфигурированом
ODBC.
A: Centura сохраняет информацию об ODBC в файле по имени GUPTA.INI. Это, как предполагается,
делает соединение с источником данных быстрее. Этот файл хранится в каталоге, который
содержит ODBC32.DLL. Рекомендуется удалить GUPTA.INI прежде, чем будет соединение
с ODBC источником данных. Это предотвратит ошибку, при правильно сконфигурированом
ODBC.
A: Centura сохраняет информацию об ODBC в файле по имени GUPTA.INI. Это, как предполагается,
делает соединение с источником данных быстрее. Этот файл хранится в каталоге, который
содержит ODBC32.DLL. Рекомендуется удалить GUPTA.INI прежде, чем будет соединение
с ODBC источником данных. Это предотвратит ошибку, при правильно сконфигурированом
ODBC.
A: Для версии 6. 1. x утверждение, подобное 'SELECT NAME AS CUSTNAME FROM TABLE' всегда возвращает первоначальное имя столбца. Хуже, когда вычисляемые столбцы, агрегаты и т.д. в запросе не возвращают заголовки вообще. SQLBASE 7.0.1 имеет новый ODBC драйвер, версии 3.01.0006. Используя этот драйвер можно прекрасно выполнять запросы типа:
SELECT COMPANY_NAME AS NAME FROM COMPANY;
SELECT INVOICE_NO, SYM(ITEM_PRICE) AS X, AVG(ITEM_PRICE) AS Y FROM INVOICE_ITEM
GROUP BY 1;
SELECT @LEFT(COMPANY_NAME, 4) AS SPLITNAME FROM COMPANY;
Q: Quest при обращении к базе дает ошибку Invalid SET parameter. А WinTalk вообще не видит базу по ODBC.
А: Нужно проверить настройки драйверов ODBC Quest, совершенно точно эта программа
(Quest) работает с ODBC наборами. Возможно, потребуется переустановить драйверы,
а затем определить настройки соответствующих наборов данных. С WinTalk, как с промежуточным
продуктом, были проблемы с доступом в БД и, в частности, ODBC наборами. Используйте
SQLTalk с обновленными DLL и все возможности, даже LOAD и UNLOAD, будут доступны.
Из SQLWindows доступ к ODBC наборам также работает нормально (при правильной настройке
драйверов).
Секция 3 из 3 - Предыдущая - Следующая
Вернуться в раздел "Работа с базами данных" - Обсудить эту статью на Форуме |
Главная - Поиск по сайту - О проекте - Форум - Обратная связь |