Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 О вреде транзакций, или "Как же отключить transaction log?"  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
В конференции по MS SQL был вопрос, как же все таки отключить transaction log. Правда, вопрошающего сразу запинали, сказали, что он в корне не прав, и лог - это правильно. Вопрощающий сказал - Ладно, пусть не всегда, а иногда отключать, я ДБА, я лучше знаю, нужен он или нет. Ему сказали - гнать таких ДБА, лог - это свято, без него нельзя.
Наверное, меня тоже гнать надо, но мне лог мешает.
вот к примеру...
У нас есть база, достаточно большая. По ней, естественно, надо строить отчеты. Большие и сложные. За один проход не считаются, а требуют создания большого количества промежуточных результатов.
Обычно в таких случаях создают временную табличку, промежуточные результаты складывать. И всем по большому счету плевать, если при работе с этой временной табличкой произойдет ошибка (не вставилось все или не все удалилось) - просто ловят ошибку и выходят из процедуры. Она ведь временная, и так дропнется по выходу из области видимости - кому она нужна?!
А у нас в качестве временных табличек используются постоянные (удобнее нам так). И мне все равно, если при удалении из этой таблички произойдет ошибка и удалятся не все данные - я ловлю ошибку и просто выхожу из процедуры. Тоже самое при вставке. Ну не волнует меня непротиворечивость данных в этих табличках - они по смыслу временные. Но! Я вынужден тратить дисковое пространство под лог(а места на диске не так уж и много), я вынужден терпеть накладные расходы на обслуживание лога (а сервер - не бесконечной мощности), я вынужден терпеть взаимоблакировки пользователей (а вдруг кто-то поменяет данные! ой!) и т.д.
Поэтому так и тянуться руки отключить лог - а НЕКАК!!!! А хочется....
И вообще, что это за механизм транзакций такой?
Почему переход на следующий уровень вложенности вверх или вниз так различается? Почему я должен об этом помнить? "так, здесь - begin tran, тут - save tran..."?
Почему нельзя открыть две паралельные транзакции в одном коннекте? В одной (маленькой и быстрой) получать номер документа, во второй (большой и медленной) создавать спецификацию документа? Почему кто-то должен ждать момента, пока другой не отпустит давно ненужный ему ресурс?
2 июл 03, 20:33    [249298]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Сорри - немножно не в тему, но вспомнилось вот, как меня глобальные темповые таблицы в Sybase ASA прикололи: создается глобальная темповая таблица, причем описание ее структуры хранится в БД. Любой коннект, который подцепляется к БД ее сразу видит, даже из Enterprice Manager, причем как полноценную таблицу, правда на ней значек специальный, указывающий, что она временная. Пока ее не дропнешь, она так в БД и остается существовать. Для каждого коннекта в ней будут хранятся свои данные. Ей можно указать как она будет обнуляться - при commit или при завершении соединения. Хоть структура и хранится в БД, но данные такая табличка хранит в темповой БД и в транзакциях не участвует, поэтому скорость работы с ней приятная, блокировки естественно отсутствуют, раз она получается разделена между пользователеми. Очень мне даже эти таблички помогли как раз в первую очередь для отчетов. Ну а по существу - нельзя наверное все таки в БД лог отключать, целостность данных гораздо важнее скорости. В принципе если так подумать, кто Вам мешает еще одну БД рядышком положить, в которую эти таблички промежуточных результатов для отчетов и перенести, отключить на эту БД лог и пусть себе там все и работает.
3 июл 03, 00:23    [249386]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
Sergey Ch
Member

Откуда: Благовещенск
Сообщений: 8894
Вот за что я и люблю FoxPro
Скачал на рабочую станцию необходимую информацию - и строй всякие временные таблицы до "посинения" - все это в локальном трафике, ты никому не мешаешь... Да и встроенный генератор отчетов весьма неплох.

P.S. Просьба воздержаться от дальнейшего обсуждения FoxPro.
3 июл 03, 01:22    [249406]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
2locky
Насчёт полного отключения лога - это действительно в MS SQL нельзя. Но ведь данные нужно где-то хранить? Если вы создаёте временную таблицу, она создаётся физически в ОЗУ, а логически - в логе. И ничего тут плохого нет. Или вам просто не нравится слово "лог"? Ну, забудьте о логе, считайте, что это просто массив в память... А хранится всё это там до конца транзакции (до конца стэйтмента, если не объявлена транзакция), точнее, до чекпойнта, а потом прееносится в постоянную структуру, но перено
А по поводу расширенного и улучшеного управления транзакциями, в т.ч. парралельные транзакции в одном коннекте - это было-бы здорово, но к сожалению, в MS SQL такого нет.

2Sergey Ch
Не воздержимся! Щаааас...
3 июл 03, 09:54    [249588]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
2locky
Извиняюсь, не закончил фразу.
...а потом прееносится в постоянную структуру (тоже в памяти), но переносится асинхронно, и если сервер занят чем-то другим, то это процесс будет отложен.
3 июл 03, 10:03    [249607]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Sergey Ch
Цитирую Вам автора форума:
У нас есть база, достаточно большая. По ней, естественно, надо строить отчеты. Большие и сложные. За один проход не считаются, а требуют создания большого количества промежуточных результатов.

Вы же пишите:
Скачал на рабочую станцию необходимую информацию - и строй всякие временные таблицы до "посинения" - все это в локальном трафике, ты никому не мешаешь...

Вопрос - Вы всю базу в dbf будете закачивать ? Дело даже не в FoxPro, а вот в мышлении многих программистов, работающих на файл-серверных системах. Иногда полезно все таки в тему вникнуть, а не вставлять в каждую ветку форума рекламу FoxPro. Ей богу, такая реклама приведет скоро к тому, что я действительно начну при слове FoxPro вздрагивать.
3 июл 03, 10:50    [249697]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
Scott Tiger
Member

Откуда: вмваре
Сообщений: 6905
locky, если использовать постоянные таблицы в качестве временных, не стоит удивляться тому, что СУБД их считает постоянными и применяет к ним механизм транзакций. Это ошибка проектирования приложения.

ASCRUS, в оракле тоже такой механизм есть (впрочем, там это, слава Аллаху, единственный механизм создания временных таблиц).

All, в Informix можно отключить поддержку транзакций на уровне базы, чреватость очевидна, но иногда это имеет смысл (например, жопой написанный софт, жопа при этом не знает, что такое транзакция и приложение ими никак не управляет).
3 июл 03, 10:59    [249717]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Странно, действительно в MSSQL нельзя лог отключить. Даже никогда об этом не задумывался честно говоря. В ASA можно, в MSSQL нельзя, а вроде как близкие продукты.

locky
А какая у Вас Recovery Model на БД стоит ? Если не Simple, то может быть действительно БД рядышком положить с моделью лога Simple, где промежуточные результаты и хранить, чтобы лог хоть не сильно рос и основная БД без лишних поводов нагрузкам на операции записи не подвергалась ?

Scott Tiger
В ASA это тоже единственный механизм работы с временными таблицами. Но с утверждением, что использование в качестве временных постоянных таблиц - это ошибка проектирования приложения не соглашусь. В MSSQL как и в Sybase ASE (в отличие от ASA) эти глобальные временные ##таблицы больше слез вызывают, чем желание их использовать. А для сложных отчетов действительно часто нужны временные таблицы для хранения промежуточных результатов, которые должны существовать до тех пор, пока отчет себя полностью на их основе не построит.
3 июл 03, 11:07    [249731]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
Scott Tiger
Member

Откуда: вмваре
Сообщений: 6905
ASCRUS, ну тогда не стоит удивляться :) Кстати, я ошибся в предыдущем посте - механизм транзакций к оракловским GTT, разумеется, применяется, не применяется журналирование данных, прокачиваемых через эти таблицы.
3 июл 03, 11:24    [249779]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
2ASCRUS
По поводу Sybase и временных таблиц, создающихся при коннекте - не знал,
это второй этап моих мечтаний и претензий к MS SQL.
По поводу целостности данных, которые важнее скорости - не согласен.
Это - отчет, и это - ВРЕМЕННЫЕ данные, они умрут после отчета. Но если я
бы смог заставить отчет считаться не 40 минут, а 20... это был бы праздник
Recovery Model - Simple, но когда я вставляю (или удаляю) 2*10e6 строк, не сильно
и помогает :-)
А глобальные временные таблицы MS SQL - это да... ужжжас....

2Sergey Ch
На клиента... 26 Gb... не реально :-( Да и к тому же, при изменении алгоритма
расчета отчета менять не процедуру, а код клиента...

2Alexeyvg
Нравится мне слово лог, мне не нравится, что его нельзя отключить. К тому же
в памяти временные таблицы хранятся до тех пор, пока есть память, а потом все
равно на диск...

2Scott Tiger
Механизм транзакций применяется как к постоянным, так и ко временным таблицам.
И наш подход к решению задач - не думаю, что это ошибка. Как из процедуры формирования
начальных остатков передать данные в процедуру расчета движения и формирования
конечных остатков, кроме как через таблицу?

Informix... IBM Informix Extended Parallel Server, V8.3, цитата:
Несмотря на то, что EPS не поддерживает нелогируемые базы, он поддержиавет нелогируемые
постоянные и временные таблицы.

2All
Все эти постоянно-временные таблицы у нас хранятся в Tempdb. Дело в том, что у TempDb
есть особенность - данные в ней временные, база пересоздается при рестарте сервера,
поэтому в отличие от других баз изменения в ней пишуться не СРАЗУ, а потом, по мере
необходимости (могут и вообще не писаться). Проверить достаточно просто - посмотреть
профайлер, чтения/запись.
Но этого все равно мало, крайне мало...
3 июл 03, 13:50    [250099]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Ну как вывод - если бы MS снизошла бы до переделки механизма глобальных временных таблиц, чтобы они разделяли данные по сессиям и не участвовали в логах, то во многом настал бы рай :)

Зато я теперь кстати получил ответ на вопрос, почему же у меня при переводе с MSSQL 2000 на ASA 8 скорость сложных расчетов в ХП выросла в 3 раза. Одна из причин теперь ясна - темповые таблицы не участвуют в транзакциях. Будет свободное время, посмотреть что ли, насколько сильно ASA будет тормозить при работе с такими большими обьемами данных, как у Вас. Все таки он workgroup, прям стало интересно, как он со своей моделью работы с данными и оптимизатором потянет 26 гигов. Осталость только придумать, где бы взять такую большую БД :)
3 июл 03, 14:11    [250149]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
Scott Tiger
Member

Откуда: вмваре
Сообщений: 6905
locky, Как из процедуры формирования начальных остатков передать данные в процедуру расчета движения и формирования конечных остатков, кроме как через таблицу?

Я таких слов не знаю, ты по-человечески объясни. А что, в MSSQL "настоящая" временная таблица между двумя вызовами процедур данные не сохраняет?

Informix умеет в on-line dynamic server 7.23, если мне не изменяет память.
3 июл 03, 14:31    [250193]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Как из процедуры формирования начальных остатков передать данные в процедуру расчета движения и формирования конечных остатков, кроме как через таблицу?
Имеется ввиду, что вызывается серия процедур, заполняющих рассчитываемые данные в некие таблицы, которые потом будут использоваться в других хранимых процедурах и отчетником (не все же данные можно вернуть для отчета одним запросом).

А что, в MSSQL "настоящая" временная таблица между двумя вызовами процедур данные не сохраняет?
Умеет. Существует правда несколько подводных камней - при ее создании одной сессией она и ее данные становяться видимыми для всех сессий, что приводит к тому, что перед их созданием неплохо бы убедиться, что они еще не существуют. Плюс возникает необходимость самостоятельно разделять данные по сессиям, по тому же @@SPID. Но что самое печальное, что если сессия, с которой такая темповая таблица была создана закрывается, то она автоматом затирается и если в ней хранятся данные других сессий, то они сильно будут "удивлены", куда это все подевалось. Как я понимаю, все это тяжелое наследие с ASE, а затем MSSQL 6.5 . Странно, что при проектировании MSSQL 7.0 весь этот тяжкий груз был перетащен вместо того, чтобы изменить модель работы СУБД с временными таблицами. Плюс вместо того, чтобы действительно исключить из участия в транзакциях темповые таблицы, в MSSQL 2000 ввели локальные переменные-таблицы, которые для увеличения скорости работы как я понял действительно не участвуют в логах, но хранятся в оперативной памяти, что ограничивает их использование с большими обьемами данных.
3 июл 03, 15:02    [250229]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
2ASCRUS
Действительно, данные по сессиям у нас разделяется по @@SPID.
Для удобства, ходим не напрямую к таблицам, а к View с условием.
По поводу табличных переменных - они могут быть ооочень большими,
т.к. все равно транслируются во временные таблицы (см. sysobjects
в tempdb во время выполнения запроса, имена похожи на @___table___)

Где взять базу?
Нечто вроде биллинга, ~500000 абонентов, 3.6 года, ~310 записей на одного абонента+Справочники+остатки+так, по мелочи.
Генерится за 6-10 часов.

По поводу временных локальных и глобальных таблиц
Локальные таблицы видны и существуют в пределах сессии. Но есть определенный гемморой с их использованием (ее надо создать, если ее нет, и опять-таки очистить, если она есть)
Глобальные временные таблицы видны всем сессиям и существуют до тех пор,
пока хоть одна сессия их используетя. Гемморой тот же, что и при использовании локальных временных таблиц, плюс самому разделять данные между сессиями.
Теперь еще такая особенность.... если в пакете (процедуре, запросе)
вперемешку идут операторы DML и DDL, то это приводит к постоянным рекомпиляциям процедур. При сложных процедурах и при большой нагрузке на
сервер это очень печально....
К операторам DDL относятся такие операторы как create table....
Т.е. любые действия с временныеми таблицами практически неизбежно приводят к рекомпиляциям.
3 июл 03, 15:50    [250353]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
NewYear
Member

Откуда: Большой адронный коллайдер
Сообщений: 2203
AS/400 чудно и радостно поддерживает нелогируемые таблицы.
просто без проблем.

также там можно радостно завести 5 логов для таблицы A, 2 лога для таблицы B, причем один из логов таблица A шарит с табличей B, а второй с табличей С
и т.д....
3 июл 03, 16:48    [250491]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32174
2locky
Всё-таки не пойму этого:
"Нравится мне слово лог, мне не нравится, что его нельзя отключить. К тому же в памяти временные таблицы хранятся до тех пор, пока есть память, а потом все равно на диск... "
Так вы хотите, что-бы временные таблицы не занимали места ни в памяти, ни на диске??? Это как?

Ещё раз.
Вы создали временную таблицу, заполнили её гигом данных. На любой СУБД нужно это место - гиг - выделить. На MSSQL это место называется логом, ну просто он так устроен, а на других СУБД может называтся по другому, как здорово пишет NewYear про AS/400 и нелогируемые таблицы на нём. Но от изменения названия суть не меняется - выделяется место, кладутся данные, при необходимости (при нехватке места) сбрасываются на диск.
Так вас всё-таки не устраивает название или вы считаете, что MSSQL сервер делает какие-то лишние операции по сравнению с какой-то другой СУБД? Тогда приведите эти конкретные операции.

2ASCRUS
Я, может, что-то упустил в обсуждении, но мне непонятно:
"Существует правда несколько подводных камней - при ее создании одной сессией она и ее данные становяться видимыми для всех сессий, что приводит к тому, что перед их созданием неплохо бы убедиться, что они еще не существуют. Плюс возникает необходимость самостоятельно разделять данные по сессиям, по тому же @@SPID"
Может, вы создаёте глобальные временные таблицы? Но если вам надо изолировать данные по сессиям, почему не использовать локальные?
3 июл 03, 17:42    [250610]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
2Alexeyvg
Если я правильно помню, то в MS SQL лог - это журнал изменения данных,
а не место для хранения самих данных.
я прекрасно понимаю, что для хранения 1 гига информации этот самый гиг надо выделить - я не против этого.
Я против того, что когда мне надо удалить 1000 записей из временной таблицы в случае, если получилось удалить только 900 записей, MS SQL не откатывал транзакцию назад и не восстанавливал все 1000 записей, а оставлял эти 100 неудаленных.
Аналогично при обновлении. Не удалось обновить все записи - черт с ним, отрапортуй ошибку и забудь. Мне НЕ НУЖНО восстанавливать базу в состояние до обновления.
По поводу моего "К тому же в памяти временные таблицы хранятся до тех пор, пока есть память". Временные таблички отличаются от постоянных крайне мало (только тем, что автоматом дропаются, когда уже не нужны). Они все равно хранятся в базе TempDB, база хранится на диске. Просто по возможности TempDB не сбрасывает свои страницы на диск. Грубо говоря, если у обычной базы включено только кэширование чтения и отключено кэширование записи, то для TempDB включено и кэширование чтения и кэширование записи.
3 июл 03, 19:38    [250743]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
Glory
Member

Откуда:
Сообщений: 104751
Не удержался.

Если вы ставите в вину логу то, что ваши процедуры работают медленно, то я вам о всей ответственнойстью могу заявить, что проблемы производительности это на 90% ошибки проектирования и неоптимального кода.
3 июл 03, 20:28    [250776]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Тоже не удержался.

В MS SQL2000 есть же таблицы-переменные, изменения которых в логе не фиксируются.

2 ASCRUS
Извините если грубо, но Ваши рассуждения насчет временных таблиц в MS SQL вызывают удивление
4 июл 03, 10:22    [251083]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Но ведь действительно глобальные временные таблицы участвуют в логах и хранят не разделенные по сессиям данные. Или я не прав ? Во всяком случае при работе с MSSQL у меня так все и было. Локальные темповые таблицы в перечисленном случае тоже не подходили, нельзя в одной ХП создать локальную темповую таблицу, заполнить ее, выйти с ХП и позволить клиенту или отчетнику пользоваться ее результатами до DROP или конца сессии. Цитирую BOL:
A local temporary table created in a stored procedure is dropped automatically when the stored procedure completes. The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. The table cannot be referenced by the process which called the stored procedure that created the table.

То есть насколько я понимаю, должен создать ее вне вызова ХП в сессии из клиентской части, что для того же Crystal Report например проблематично. Если проблема решается, просто я не знаю как, поделитесь опытом, тем более что для locky это будет полезно.
4 июл 03, 10:53    [251126]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
А зачем нужна временная таблица после выполнения процедуры? Обычно для отчета в процедуре ставится в конце что-то типа select * from #tmp и по этому потоку уже и делается отчет.
4 июл 03, 12:13    [251317]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
А если отчет использует вложенные отчеты, которые ссылаются на промежуточные данные, хранимые в этих темповых таблицах и внесенные посредством ХП, которая возвращает всего лишь центральный набор данных и подготваливает для подотчетов группу данных ? Причем как применяемое решение при использовании в сложных отчетов подотчетов временные таблицы выгодны еще тем, что не заставляют решать вопрос блокировок данных на время построения отчета. Согласитесь, чтобы реализовать отчет, содержащий в себе подотчет, который на каждую запись главного отчета получает и обрабатывает данные с реальной таблицы БД, пришлось бы в начале центральной ХП делать блокировку такой таблицы до конца сессии с целью избежания искажения отчета на начало момента его печати, и при длительном построении отчета это ни к чему хорошему не приведет. Некоторые отчеты кстати только с помощью связанных подотчетов в том же Crystal Report или PB именно так реализуются, и хочешь не хочешь, эти принципы все равно будут навязываться БД и их как то придется решать.
4 июл 03, 12:46    [251389]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Не знаю, на мой взгяд проблемы, которые вы описали, не требуют использовать глобальные ВТ.
С Crystal Report не знаком.
4 июл 03, 13:02    [251414]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
Ggg
Guest
2 locky:
В Sybase есть один такой момент для увеличения скорости работы:
если вы пишете
create table #tmp_table ......
insert ... into #tmp_table - то эти операции отражаются в Transaction log.
если же вы создаете и заполняете временную таблицу через:
select .....
into #tmp_table
то операции создания и записи данных в #tmp_table не заносятся в лог и работают заметно быстрее. Попробуйте, может MSSQL делает так-же.
И если что-то выйдет, то скажете - помогло или нет?
4 июл 03, 13:24    [251462]     Ответить | Цитировать Сообщить модератору
 Re: О вреде транзакций, или "Как же отключить transaction log?"  [new]
Артем1
Member

Откуда: www.desnogorsk.{ru||net} -> Москва
Сообщений: 2036
О временных таблицах.

create procedure spOuter

as
create table #temp(id int)

insert into #temp
select 1
union all
select 5

exec spInner

go

create procedure spInner
as

select * from #temp

go

exec spOuter
4 июл 03, 13:43    [251523]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить