Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как осуществляется транзакция если обмен через ODBC / 16 сообщений из 16, страница 1 из 1
16.06.2003, 16:47:01
    #32183451
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как осуществляется транзакция если обмен через ODBC
у меня при создании таблицы установлены параметры:
MAXTRANS = 255

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

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

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

или что иное?

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

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

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

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


Vopros: 'то как это рассматривать как одна транзакция или как серия транзакций' -> necorecten
...
Рейтинг: 0 / 0
17.06.2003, 10:24:50
    #32183872
Oracle X-pert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как осуществляется транзакция если обмен через ODBC
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
17.06.2003, 10:28:57
    #32183878
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как осуществляется транзакция если обмен через ODBC
Violina а смогу я выключить autocommit через ОДиБиСи или это делается как-то вручную? и как это выключить?
...
Рейтинг: 0 / 0
17.06.2003, 10:30:21
    #32183881
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как осуществляется транзакция если обмен через ODBC
Oracle X-pert у меня работает по умолчанию...
...
Рейтинг: 0 / 0
17.06.2003, 11:20:51
    #32183962
olk
olk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как осуществляется транзакция если обмен через ODBC
Не буду ориентироваться на конкретны драйвер - дам теорию :)
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
17.06.2003, 11:36:17
    #32183992
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как осуществляется транзакция если обмен через ODBC
to akalend

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

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

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

Кто знает наверняка подскажет!
...
Рейтинг: 0 / 0
17.06.2003, 13:51:36
    #32184271
Oracle X-pert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как осуществляется транзакция если обмен через ODBC
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
17.06.2003, 14:35:12
    #32184327
akalend
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как осуществляется транзакция если обмен через ODBC
как сделать лучше,
мне необходимо ввести (выполнить команду INSERT ) 500 000 записей

при стандартном подходе - это занимает 40 мин... - это очень много...
могу я использовать какие-то настройки Oracle или как-то использовать кэш или транзакцию, чтоб сократить время работы....
...
Рейтинг: 0 / 0
17.06.2003, 14:43:40
    #32184340
olk
olk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как осуществляется транзакция если обмен через ODBC
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / как осуществляется транзакция если обмен через ODBC / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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