powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как осуществляется транзакция если обмен через ODBC
16 сообщений из 16, страница 1 из 1
как осуществляется транзакция если обмен через ODBC
    #32183451
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня при создании таблицы установлены параметры:
MAXTRANS = 255

Вопрос 1
если я выдаю серию команду INSERT через ОДиБиСи
то как это рассматривать как одна транзакция или как серия транзакций?

Вопос 2
если я выдаю INSERT или UPDATE в 100 раз больше, чем указано в MAXTRANS , но не ояормляя в виде одной транзакции
то что происходит?

а) оформляется новая транзакция?
или б) происходит все в рамках одного соединения?
с) команды INSERT или UPDATE делятся на блоки по 255 шт. и выполняются разными транзакциями..

или что иное?

какой выход:
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32183576
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понятно, что значит оформление транзакций. Транзакция заканчивается при выполении commit или rollback.

Воможно имеется ввиду что у твоей тулзы стоит autocommit, тогда вроде каждый DML коммитится автоматически. Если хочешь сам определять когда коммитить, выключи autocommit.

Параметр MAXTRANS на доступ через ODBC не влияет, ODBC по идее о нем даже не знает. Это параметр Оракл для data block, ограничивающий количество одновременных транзакций для блока, не для таблицы.
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32183585
gda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> если я выдаю серию команду INSERT через ОДиБиСи
> то как это рассматривать как одна транзакция или как серия транзакций

Tranzactia - ncinaetsea s DML instructii(insert, update, merge,...) i zacancivaetsea ispolizuia 'commit' ili DDL instructiu.


Vopros: 'то как это рассматривать как одна транзакция или как серия транзакций' -> necorecten
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32183872
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
By default, ODBC rabotaet s auto commit, t.e.posle DML predlogeniya ->
execute statement-> commit.
MS ODBC by default esche delaet i select... for update / insert ... as update.
A ty kak rabotaesh?
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32183878
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Violina а смогу я выключить autocommit через ОДиБиСи или это делается как-то вручную? и как это выключить?
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32183881
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle X-pert у меня работает по умолчанию...
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32183962
olk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не буду ориентироваться на конкретны драйвер - дам теорию :)
1. Надо вызвать SQLGetInfo со значением fInfoType=SQL_TXN_CAPABLE
2. Узнаем поддерживается ли транзакции
SQLGetInfo вернет одно из значений
SQL_TC_NONE
SQL_TC_DML
SQL_TC_DLL_COMMIT
SQL_TC_DDL_IGNORE
SQL_TX_ALL
3. Через SQLSetConnectOption - установим ручное завершение транзакций (если они конечно поддерживаются)
SQLSetConnectOption(hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_OFF)
4. Далее в ручную комитим или ролбачим наши действия.
SQLTransact(henv,hdbc,SQL_COMMIT)
или
SQLTransact(henv,hdbc,SQL_ROLLBACK)

ЗЫ:
При работе с транзакциями надо еще помнить об уровнях изоляции
возврат SQLGetInfo с параметром SQL_TXN_ISOLATION_OPTION
SQL_TXN_READ_UNCOMMITTED
SQL_TXN_READ_COMMITED
SQL_TXN_REPEATABLE_READ
SQL_TXN_SERIALIZABLE
SQL_TXN_VERSIONING
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32183992
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to akalend

Зависит от тулзы, которую ты используешь. Скорее всего можно. Я пока что кроме SQL Plus ничего не использую, так что сказать точно не могу.

Задавай вопрос в форуме, назвав тулзу которую используешь.
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32184107
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зависит от тулзы , которую ты используешь
1) что такое тулза?
2) я использую SQL+ и EnterpriceManager
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32184115
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо вызвать SQLGetInfo со значением fInfoType=SQL_TXN_CAPABLE
Как его вызвать?
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32184140
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тулза - стредство разработки/среда в которой ты пишешь программу (Delphi .NET etc). Например olk приводит тебе пример как это можно сделать в некой среде разработки, правда я так и не определила какой:-)
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32184226
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Среда разработки VC++ 6 версия
работаю через ODBC драйвер от Oracle
драйвер от Microsoft под Oracle не работает
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32184239
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, тогда правильный вопрос будет

Как выключить autocommit для DML (Среда VC++ 6, ODBC driver от Oracle)?

Кто знает наверняка подскажет!
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32184271
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ok.
Вопрос 1
Transaction per connect.
T.k. all by default, to.. transaction finished after "execute" statement.

Вопос 2
Esli use pool, to:
команды INSERT или UPDATE делятся на connections по 255 шт. и выполняются разными транзакциями
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32184327
akalend
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как сделать лучше,
мне необходимо ввести (выполнить команду INSERT ) 500 000 записей

при стандартном подходе - это занимает 40 мин... - это очень много...
могу я использовать какие-то настройки Oracle или как-то использовать кэш или транзакцию, чтоб сократить время работы....
...
Рейтинг: 0 / 0
как осуществляется транзакция если обмен через ODBC
    #32184340
olk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Violina:
это чистый С :) я его и приводил что-бы не заморачиваться на канкретную реализацию ...
например в VC это будет примерно так ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
{
  CMyDatabase db;
 BOOL bCanTrans=FALSE;
try
{
 db.Open( NULL, FALSE, FALSE, "ODBC;" , FALSE  );  // Select  SQL Server
  // rcode will equal  0  (SQL_SUCCESS) if call succeeds
  int rcode = ::SQLSetConnectOption   (db.m_hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_OFF);


bCanTrans = db.CanTransact();

 try
  
    CMyRecordset rs(&db);
    rs.Open();
    if (bCanTrans)
    BOOL ret = db.BeginTrans();

    // change some fields

    rs.Update();
    if (bCanTrans) db.Commit();
   }

 CATCH(CDBException,e)
{
if (bCanTrans) db.Rollback();
e->ReportError();
e->Delete();
}
END_CATCH;

  } 
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как осуществляется транзакция если обмен через ODBC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]