Идея

Сделать быструю проверку кода на ошибки перед тем как отправлять его компилировать.

Мне надоедает каждый раз написав скрипт с 1-2 сотнями строчек ждать по пол часа пока всё скомпилируется, и выдаст ошибку что я не поставил где то ";" ... 

Обсуждение
5 комментариев

Идея классная давно витает в воздухе и переодически выскакивает, вот только наврядли будет реализована. А почему просто не создать пустую сборку в VS и не подключить туда Terrasoft.Configuration и другие используеміе библиотеки. При работе с ФС проверка синтаксиса и автозавершение будет работать!

Как работать с серверным кодом в Visual Studio, описано тут. Если реально компилирует полчаса, то это что-то не то с производительностью веб-сервера.

Зверев Александр,

Почему вэб сервера а не БД скажем? Вообщето компиляция при генерации включенной герерации исходных кодом и отладочной информации на мощной тачке идет под 20 минут. Если у тебя быстрее поделись секретиком как ты этого добился

Зверев Александр,

Я конечно утрировал, не пол часа но всё равно долго. Если он компилирует 3-5мин и выдаёт постоянно мелкие ошибки, по 5-6 штук то это уже почти пол часа....

Владислав, в таком случае можно вести разработку в Студии, ссылка выше.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Всем доброго времени суток!
Нужна Ваша помощь.

Развернул приложение на локальном ПК v7.12
Сайт запускается. но когда аутентифицируюсь в консоли выбивает ошибки:

http://prntscr.com/jav3ap
 

Во вложении так же логи ошибок.
Подскажите, что может быть не так?
Благодарю!

Прикрепленные файлы

У меня такой же вопрос

5 комментариев

Здравствуйте!

Запросите в поддержке "чистые" бинарные файлы 7.12.0.2702-sales-enterprise-marketing-service-enterprise-en и разверните приложение на них. Ранее полученные файлы с облачного приложения отличаются от коробочных, вследствие чего возникает указанная ошибка.

Сергей Кy6риш,

Здравствуйте! Так мне необходима именно данная сборка для доработки функционала и дебага. Ранее разворачивал 7.11.3 данных ошибок не было.

 

Нигрескул Алексей,

У вас и будет именно ваша сборка для доработок и дебаггинга, все что вам нужно хранится в вашей БД.
А чтобы не было ошибки, которая у вас появляется, необходимо развернуть коробочную версию. Могу дать вам ссылку на бинарные файлы, установив которые, сможете работать. Для этого подскажите, что у вас, Тим, Сейлс или другой тип и т.д.

Литвинко Павел,

здравствуйте. У меня SalesEnterprise + Marketing

Для получения сборки направьте запрос напрямую в поддержку.

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

Приветствую, уважаемые коллеги!

В данной статье я хочу привлечь внимание не только разработчиков, но и партнёров Террасофт и их представителей.

Сегодня я расскажу Вам о преимуществах и выгодах использования приложения для оперативной проверки структуры базы данных (далее - БД) на корректность (https://marketplace.terrasoft.ru/app/database-structure-check).

Проблематика.

После накатывания нового функционала на тестовую среду могут появиться ошибки структуры БД. Их особенности:

  • не всегда очевидны.
  • разработчиков может сбивать с толку тот факт, что на рабочей среде всё работает, а на тестовой – нет.
  • поиск и устранение может занять длительное время.

Всё это снижает эффективность разработки/обслуживания, приводит к дополнительным расходам ресурсов. 

После накатывания на промышленную среду могут также появиться ошибки. Они имеют ту же природу, но масштаб их разрушительного действия уже выше, т.к. это промышленная среда, соответственно, плюс к проблемам выше:

  • падает надёжность системы.
  • повышается вероятность аварии.

Особенно это актуально, когда «окно» для обновления промышленной среды очень небольшое. Чем больше проект в плане доработок, тем больше ошибок структуры БД может возникать.

При использовании приложения все эти проблемы можно успешно решить!

Целевая аудитория.

Обращаю внимание партнёров Terrasoft: приложение предназначено для среднего и крупного бизнеса. То есть, основные преимущества от его использования получает именно клиент. Приложение универсально и подойдёт практически всем клиентам, у которых есть потребность в доработке базовых продуктов.

Степень необходимости приложения может варьироваться. Если в ходе выяснения потребностей выясняется, что:

  1. будет большой проект (или уже есть) со сложными связями между сущностями системы.
  2. есть потребность в максимальной надёжности.
  3. у клиента только небольшие «окна» для обновления промышленной среды.
  4. есть потребность в повышении эффективности разработки и обслуживания (клиент хочет как можно скорее получить готовую систему в пользование).
  5. есть потребность в повышении устойчивости к авариям системы.

- это всё покажет рост степени необходимости приложения. Я настоятельно рекомендую устанавливать приложение всем клиентам в случае, если имеет место хотя бы один пункт выше.

Выгоды.

Какие выгоды получит клиент от использования приложения? Как правило, это выгоды в долгосрочной перспективе. Клиент:

  1. получит дополнительную меру повышения надёжности системы.
  2. сэкономит ресурсы на обнаружение ошибок структуры БД.
  3. обеспечит повышение эффективности разработки и обслуживания системы.
  4. обеспечит повышение устойчивости системы к авариям из-за ошибок структуры БД.

Есть также выгоды для разработчиков, облегчающие некоторые аспекты разработки/сопровождения. Разработчики: 

  1. смогут пользоваться самым рациональным решением для проверок структуры БД, которое не имеет аналогов.
  2. смогут пользоваться всем функционалом приложения в один клик.
  3. смогут проверять структуру БД на корректность в течение нескольких секунд.
  4. смогут оперативно выявлять отсутствующие таблицы и/или их колонки, обнаруживать несоответствия типов полей.
  5. после проверки структуры БД смогут понять, для каких объектов необходимо произвести повторное обновление структуры БД.
  6. после успешного анализа, будут точно знать, что БД целевой среды содержит все требуемые системой таблицы/поля, и что типы всех полей всех таблиц правильные.

Преимущества.

  1. Поиск ошибок структуры БД. Приложение выявляет отсутствующие таблицы и/или их колонки, а также обнаруживает несоответствия типов полей.
  2. Повышение надёжности. Использование приложения повышает надёжность системы за счёт минимизации времени, в течение которого в структуре БД есть ошибки.
  3. Экономия ресурсов. Использование дополнения сокращает расходы на обнаружение ошибок структуры БД. В ряде случаев очень серьёзно сокращает расходы.
  4. Подтверждение целостности. После успешного анализа, специалист будет точно знать, что база данных целевой среды содержит все требуемые системой таблицы/поля, и что типы всех полей всех таблиц соответствуют требуемым типам.
  5. Повышение эффективности разработки и обслуживания. Это происходит за счёт экономии ресурсов при использовании приложения, а также за счёт ускорения обнаружения ошибок структуры БД.
  6. Простота использования. Запуск функционала в один клик.
  7. Быстрая скорость работы. Проверка структуры БД в течении нескольких секунд.
  8. Простая и удобная форма отчёта приложения. После проверки, в случае наличия ошибок, специалисту будет предоставлено подробное информационное сообщение. Разработчик сразу поймёт, для каких объектов необходимо произвести повторное обновление структуры БД.
  9. Локализация на английский язык. Поддержка не только русского языка, но и английского.
  10. Самое рациональное решение для проверок структуры БД. На самом деле, можно проверить вручную, но это дольше (просмотреть все разделы, вкладки, детали, а также проверить работоспособность всего разработанного функционала) и не всегда возможно проверить вообще всё. Зачастую такого количества времени просто нет. 
  11. Уникальность. Инструмент для проверки структуры БД не имеет аналогов на маркетплейс.
  12. Смешная цена. За год использования, то есть возможно продление на следующий год. Продлевать нет смысла только если разработка/обслуживание полностью завершены. Экспертные продажи.
  13. Повышение устойчивости системы к авариям, вызванным ошибками структуры БД. Использование приложения позволяет обнаружить ошибки БД сразу же после обновления целевой среды, после чего сразу предпринять действия для исправления найденных ошибок.

Совместимость.

Приложение совместимо со всеми продуктами на платформе bpm’online (с версии 7.11, на остальных нужно тестировать, но скорее всего работать будет).
В данный момент не поддерживается работа на системах, для которых используется СУБД Oracle.

Большое спасибо всем, кто дочитал до конца!

Буду рад любым предложениям по совершенствованию продукта!

С уважением, Сергей Кузнецов.

Поделиться

1 комментарий

yes

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Salud, amigos!

Версия: 3.3.2.222
Класс исключения: EOleException
Сообщение об ошибке: OLE error 80020102
Прошу объяснить мне не образованному человеку причину этой ошибки
Возникает на коде:

...
Dataset('SomeName') = 0;    // (*)
...

Поле 'SomeName' - типа Boolean. Исключение выбрасывается не всегда, а только на некоторых записях.
При том перед присвоением:
Вывод -
MessageBox(Dataset.ValAsStr('SomeName'));

Отрабатывает корректно, но повторюсь иногда - после строчки кода (*) выбрасывает исключение [Object Error].

Буду очень признателен за руку помощи.

У меня такой же вопрос

11 комментариев

Чтобы увидеть настоящую причину ошибки, надо установить отладчик.

Исключение выбрасывает строка *.

function RecalcPartableDiscounts(){  
    if (Self.State == dstEdit){               
        var UpdateQuery = GetSingleItemByCode('uq_SetOrderPartableParams');
        var Parameters = UpdateQuery.Parameters;
        Parameters('ID').Value = Self('ID');    
        Parameters('HasClientCard').Value = Self('HasClientCard');
        Parameters('SourceID').Value = Self('SourceID');
        Parameters('IsComplaintDiscount').Value = Self('IsComplaintDiscount');
        UpdateQuery.Execute(); (*)
        RecalcOrderPartableDiscounts(Self('ID'));
        CalcOrderLotsAmount(Self);
	}
}

А как выглядит uq_SetOrderPartableParams? И что именно пишет при возникновении исключения?

Исключение в принципе, всё то же, что и в названии темы. После установки отладчика, проследил стек вызовов, и дошёл до этого метода.

Егор, предоставьте, пожалуйста, более подробную информацию по uq_SetOrderPartableParams

Что выполняется в пользовательском запросе?

Напрашивается вопрос.
С каким Dataset взаимодействует UpdateQuery, и как можно определить тот самый Dataset? (По логике все Наборы данных которые могут иметь отношение к Запросу на обновление (в моём случае) отмечены CheckBox'ом Генерировать запрос на обновление.)
Вывод Assigned(Dataset.UpdateQuery.Caption) выдаёт false.
Прошу пояснить механизм работы конвейера, и прядок и принципы обработки данных.
С уважением
Ваш коллега.

"Резвов Роман" написал:Егор, предоставьте, пожалуйста, более подробную информацию по uq_SetOrderPartableParams

Что именно необходимо?
Я человек новый, пока всех тонкостей и особенностей сервисов не знаю, буду благодарен за более исчерпывающую информацию.

Егор, доброго времени суток.

UQ - это сервис который отсылает UPDATE запрос к базе, без всяких там датасетов и так далее.
По поводу ошибки, значение параметров нужно устанавливать так:

SetParameterValue(Parameters, 'ID', ID);

а

GetSingleItemByCode('uq_SetOrderPartableParams');

лучше заменить на

Services.GetNewItemByUSI('uq_SetOrderPartableParams');

И проверьте чтобы совпадал тип параметра с типом колонки в БД.

Удачи!

Дмитрий, и все участники обсуждения, выражаю огромную благодарность. Вы мне очень помогли. Проблема выявлена.
И заключалась в неверных типах значений сервиса UpdateQuery, которые не совпадали с типами в таблице БД.
Буду дальше выравнивать ситуацию после своих предшественников, и совершенствовать своё понимание системы, ещё раз всем огромное спасибо.
P.S.

"Олейник Дмитрий" написал:GetSingleItemByCode('uq_SetOrderPartableParams');
лучше заменить на

Services.GetNewItemByUSI('uq_SetOrderPartableParams');


У меня дилетантский вопрос:
До этого момента ломал голову и думал что лучше. Пришёл к выводу что как раз первый вариант с тем аргументированием что функция более гибкая, и позволяет, при использовании единого кода (второй параметр) каждый раз не создавать новый экземпляр сервиса, а ссылаться на уже созданный.
Возможно моё недопонимание двух методов связано с отсутствием опыта использования в соответствующих особых ситуациях.
Так в общем собственно вопрос =)
Почему лучше?

Это совет из опыта. Так будет большая вероятность избежать утечек памяти.

Учту на будущее, благодарю!

С уважением,
Ваш коллега

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день! Появилась такая проблема: Начал через некоторое время появляться у некоторых пользователей различные ошибки такого рода(не открываеться вкладки например договора) повисает и все. Есть предположение что это может возникнуть из за добавления новых в полей в таблицу и выборку и датасет? Но я не уверен. Подскажите мож кто сталкивался с подобными проблемами???

У меня такой же вопрос

21 комментарий

Может проблемы с сетью? У одного из клиентов была подобная проблема.

Нет проблем с сетью нет. Прикол в том что постепенно все пользователи начинают так глючить. Лечиться только созданием нового пользователя.

А какая версия ? Обычно, при описании ошибки, оговаривают версию. Это избавляет от лишних вопросов и предположений :)

У меня версия 3.0.2.203 субд MS 2008

Вполне может быть, что проблема новых полях. Или ошиблись в SelectQuery и идет запрос, который вешает систему. Проанализируйте запрос, который идет непосредственно перед зависанием системы.

А не подскажите как проанализировать. Если я не ошибаюсь с помощью Profile но я его в MS 2008 ненашел?

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

Для таких полей в запросе необходимо выбрать "всегда выбирать в запросе". Например где-то использовалась проверка поля "тип". А пользователь скрыл колонку "тип" в реестре и все! "Оптимизатор запроса" не даст запросу выбрать данные, которые не нужны для отображения (в данном случае "тип"). А скрипт будет пытаться проверить значение несуществующего поля. Так что, как и советовал Underscore - проверьте хорошенько запросы.

можно в администраторе открыть сервис sq_****, нажать кнопку "просмотр" и попробовать его выполнить - если есть ошибки, они уже здесь появятся

ООО "Лайнсервис"
www.ls-crm.ru

Да профайлером. Не знаю как в 2008, но в 2000 и 2005 ярлык к нему был вынесен в "Программы". Можно выложить запрос сюда, если сами не сможете найти ошибку.

Вот еще информация для размышления: Эти косяки происходят только с пользоваелями которые не имеют полных прав доступа к таблицам. У админов все нормально. И еще ошибка по связанная с пользователями. Есть запрос :
SELECT
[tbl_Contract].[ID] AS [ID],
[tbl_AccountCustomer].[Name] AS [Title],
[tbl_Contract].[ContractNumber] AS [ContractNumber],
[tbl_Contract].[ContractTypeID] AS [ContractTypeID],
[tbl_ContractType].[Name] AS [ContractTypeName],
[tbl_Contract].[ParentContractID] AS [ParentContractID],
[tbl_Contract].[OpportunityID] AS [OpportunityID],
[tbl_Opportunity].[Title] AS [OpportunityTitle],
[tbl_Contract].[ContractStatusID] AS [ContractStatusID],
[tbl_ContractStatus].[Name] AS [ContractStatusName],
[tbl_Contract].[OwnerID] AS [OwnerID],
[Owner].[Name] AS [OwnerName],
[tbl_Contract].[StartDate] AS [StartDate],
[tbl_Contract].[DueDate] AS [DueDate],
[tbl_Contract].[CustomerID] AS [CustomerID],
[tbl_AccountCustomer].[Name] AS [CustomerName],
[tbl_Contract].[BillInfoID] AS [BillInfoID],
[tbl_AccountBillingInfo].[BankAccountNumber] AS [BillInfoName],
[tbl_Contract].[BillingFrequencyID] AS [BillingFrequencyID],
[tbl_Contract].[CurrencyID] AS [CurrencyID],
[tbl_Currency].[Currency] AS [Currency],
[tbl_Contract].[CurrencyRate] AS [CurrencyRate],
[tbl_Contract].[Amount] AS [Amount],
[tbl_Contract].[BasicAmount] AS [BasicAmount],
[ParentContract].[Title] AS [ParentContract],
[tbl_Contact].[Name] AS [ContactName],
[tbl_Contract].[ContactID] AS [ContactID],
[tbl_Contract].[CampaignID] AS [CampaignID],
[tbl_Campaign].[Name] AS [CampaignName],
[tbl_Contract].[IncidentID] AS [IncidentID],
[tbl_Incident].[IncidentNumber] AS [IncidentNumber],
[tbl_Contract].[CreatedOn] AS [CreatedOn],
[tbl_Contract].[CreatedByID] AS [CreatedByID],
[CreatedBy].[Name] AS [CreatedByName],
[tbl_Contract].[ModifiedOn] AS [ModifiedOn],
[tbl_Contract].[ModifiedByID] AS [ModifiedByID],
[ModifiedBy].[Name] AS [ModifiedByName],
[tbl_Contract].[DateVerify] AS [DateVerify],
[tbl_Contract].[DateSwitching] AS [DateSwitching],
[tbl_Contract].[Exchange] AS [Exchange],
COUNT(*) AS [ColPhoneNumber],
[tbl_City].[Name] AS [AccountCityName],
[tbl_AccountCustomer].[Address] AS [Address],
[AccountOwner].[Name] AS [AccountOwnerName],
[tbl_AccountCustomer].[StatusAccount] AS [StatusAccount],
[tbl_Department].[Name] AS [MamgerDepartament],
[tbl_Contract].[ContractNumberFL] AS [ContractNumberFL]
FROM
[tbl_Contract] AS [tbl_Contract]
LEFT OUTER JOIN
[tbl_Opportunity] AS [tbl_Opportunity] ON [tbl_Opportunity].[ID] = [tbl_Contract].[OpportunityID]
LEFT OUTER JOIN
[tbl_Contact] AS [Owner] ON [Owner].[ID] = [tbl_Contract].[OwnerID]
LEFT OUTER JOIN
[tbl_Account] AS [tbl_AccountCustomer] ON [tbl_AccountCustomer].[ID] = [tbl_Contract].[CustomerID]
LEFT OUTER JOIN
[tbl_Currency] AS [tbl_Currency] ON [tbl_Currency].[ID] = [tbl_Contract].[CurrencyID]
LEFT OUTER JOIN
[tbl_Contract] AS [ParentContract] ON [ParentContract].[ID] = [tbl_Contract].[ParentContractID]
LEFT OUTER JOIN
[tbl_Contact] AS [tbl_Contact] ON [tbl_Contact].[ID] = [tbl_Contract].[ContactID]
LEFT OUTER JOIN
[tbl_Campaign] AS [tbl_Campaign] ON [tbl_Campaign].[ID] = [tbl_Contract].[CampaignID]
LEFT OUTER JOIN
[tbl_Incident] AS [tbl_Incident] ON [tbl_Incident].[ID] = [tbl_Contract].[IncidentID]
LEFT OUTER JOIN
[tbl_ContractType] AS [tbl_ContractType] ON [tbl_ContractType].[ID] = [tbl_Contract].[ContractTypeID]
LEFT OUTER JOIN
[tbl_ContractStatus] AS [tbl_ContractStatus] ON [tbl_ContractStatus].[ID] = [tbl_Contract].[ContractStatusID]
LEFT OUTER JOIN
[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_Contract].[CreatedByID]
LEFT OUTER JOIN
[tbl_Contact] AS [ModifiedBy] ON [ModifiedBy].[ID] = [tbl_Contract].[ModifiedByID]
LEFT OUTER JOIN
[tbl_SAPhoneNumbers] AS [PhoneNumbers] ON [PhoneNumbers].[ContractID] = [tbl_Contract].[ID]
LEFT OUTER JOIN
[tbl_City] AS [tbl_City] ON [tbl_City].[ID] = [tbl_AccountCustomer].[CityID]
LEFT OUTER JOIN
[tbl_Contact] AS [AccountOwner] ON [AccountOwner].[ID] = [tbl_AccountCustomer].[OwnerID]
LEFT OUTER JOIN
[tbl_Department] AS [tbl_Department] ON [tbl_Department].[ID] = [AccountOwner].[DepartmentID]
LEFT OUTER JOIN
[tbl_AccountBillingInfo] AS [tbl_AccountBillingInfo] ON [tbl_AccountBillingInfo].[ID] = [tbl_Contract].[BillInfoID]
GROUP BY
[tbl_Contract].[ID],
[tbl_AccountCustomer].[Name],
[tbl_Contract].[ContractNumber],
[tbl_Contract].[ContractTypeID],
[tbl_ContractType].[Name],
[tbl_Contract].[ParentContractID],
[tbl_Contract].[OpportunityID],
[tbl_Opportunity].[Title],
[tbl_Contract].[ContractStatusID],
[tbl_ContractStatus].[Name],
[tbl_Contract].[OwnerID],
[Owner].[Name],
[tbl_Contract].[StartDate],
[tbl_Contract].[DueDate],
[tbl_Contract].[CustomerID],
[tbl_AccountCustomer].[Name],
[tbl_Contract].[BillInfoID],
[tbl_AccountBillingInfo].[BankAccountNumber],
[tbl_Contract].[BillingFrequencyID],
[tbl_Contract].[CurrencyID],
[tbl_Currency].[Currency],
[tbl_Contract].[CurrencyRate],
[tbl_Contract].[Amount],
[tbl_Contract].[BasicAmount],
[ParentContract].[Title],
[tbl_Contact].[Name],
[tbl_Contract].[ContactID],
[tbl_Contract].[CampaignID],
[tbl_Campaign].[Name],
[tbl_Contract].[IncidentID],
[tbl_Incident].[IncidentNumber],
[tbl_Contract].[CreatedOn],
[tbl_Contract].[CreatedByID],
[CreatedBy].[Name],
[tbl_Contract].[ModifiedOn],
[tbl_Contract].[ModifiedByID],
[ModifiedBy].[Name],
[tbl_Contract].[DateVerify],
[tbl_Contract].[DateSwitching],
[tbl_Contract].[Exchange],
[tbl_City].[Name],
[tbl_AccountCustomer].[Address],
[AccountOwner].[Name],
[tbl_AccountCustomer].[StatusAccount],
[tbl_Department].[Name],
[tbl_Contract].[ContractNumberFL]

В нем есть колонка количества которая считает количество номеров для переключения для каждого клиента. И если во вкладки договора в основном реестре двойным щелчком по гриду вызвать окно редактирования формы выдаеться ошибка:
[09.07.15 17.38.02.575] (E) Ошибка выполнения метода 'wnd_BaseDBEditOnPrepare'. Ошибка открытия источника данных "X15\Workspaces\Contracts\General\MainGrid\ds_Contract".
Оригинальное сообщение об ошибке: Каждое выражение GROUP BY должно содержать по меньшей мере один столбец, который не является внешней ссылкой. «Call Stack»

Как-то меня Group by в sq_Contract смущает. Вы сделали агрегатную колонку в запросе? Там наверное подзапрос нужно было сделать.

"Maxim Ivanov" написал:COUNT(*) AS [ColPhoneNumber],

а меня вот это в принципе смущает, что здесь считается? звездочка это как-то странно... по какой таблице то?

ООО "Лайнсервис"
www.ls-crm.ru

Ну так из-за этого count и появилась группировка. Это и есть та агрегатная колонка, о которой я говорил. F возвращать это поле всегда 1 будет. Ибо там GROUP BY по tbl_Contract.ID идет.

"Maxim Ivanov" написал:колонка количества которая считает количество номеров для переключения для каждого клиента

я так понимаю, в запрос добавляли "Колонку с текстом SQL"?
туда бы вместо Count(*) подзапрос поставить типа такого:

select count(*) from tbl_SAPhoneNumbers AS CountPhoneNumbers
where CountPhoneNumbers.ContractID = tbl_Contract.ID 

(если правильно понял, именно из этой таблицы берется список номеров по договору)

тогда и весь огромный набор GroupBy не нужен будет

ООО "Лайнсервис"
www.ls-crm.ru

Добрый день! Попробовал сделать подзапрос. Почему то в некоторых колонках получаються нули хотя номера в в таблице есть?

В запросе сделаны еще список не включенных фильтров я так полагаю возможно нули появляються из за этого. Проблема в том что я не знаю где используеться этот столбец? Его создал другой разработчик и у меня нет с ним связи.

Спасибо всем. Узнал что это поле просто пока не используют. Отключил его.

:-) ну в общем тоже вариант.
А про нули в некоторых записях - тут можно проверить результаты только сделав запросик в Query Analyzer по нужной табличке по нужной записи...

ООО "Лайнсервис"
www.ls-crm.ru

Александр подскажите пожалуста где он (Query Analyzer ) находиться? У меня MS 2008 Server

Тогда SQL Server Management Studio

ООО "Лайнсервис"
www.ls-crm.ru

Спасибо всем!

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

Пришлось столкнуться с проблемой, когда у клиента возникали "специфические" ошибки следующего характера:

The following error(s) have occurred: Оригинальное сообщение об ошибке: I/O error (bad page ID) detected during read at offset 0x00000010a5c000 in fileC:\terrasoft\Data\terrasoftCRM 30x15 Rus.mdf

Ошибка сохранения записи. Оригинальное сообщение об ошибке: I/O error (bad page ID) detected during read at offset 0x00000010a58000 in fileC:\terrasoft\Data\terrasoftCRM 30x15 Rus.mdf

Оригинальное сообщение об ошибке: Could not find the index entry for RID '16f1d2207bc9455f408a6e73882fe163ff010000' in index page (1:498400), index ID 0, database 'TSCRM30'. «Call Stack»

Данная ошибка возникает при сбоях сервера базы данных. Для решения нужно выполнить скрипт, на базе данных с помощью Query Analyzer или Management Studio:

USE master

go

ALTER DATABASE Название_базы SET single_user

go

USE Название_базы

go

DBCC CHECKDB ('Название_базы', repair_allow_data_loss)

go

ALTER DATABASE Название_базы SET multi_user

go

С помощью данного запроса починили уже две базы клиентов.

Может кому-то еще пригодится!;)

Поделиться

2 комментария

Есть одно небольшое замечание
DBCC CHECKDB с параметром repair_allow_data_loss
может привести к потере данных и, возможно, к нарушению логической целостности системы

Рекомендуется
- использовать резервные копии
- сначала запускать
DBCC CHECKDB с опцией repair_rebuild и только - если данный вариант не поможет (в самом крайнем случае, если нет другого выхода), то с опцией repair_allow_data_loss

См.документацию
DBCC CHECKDB (Transact-SQL)

Тоже поделюсь опытом:)
Конечно такие критические ошибки появляются не просто так, а как правило это происходит когда кто-то изменяет данные в базе данных а при этом .... выключается свет или кто-то кнопочку ВЫКЛ нажал на сервере(бывает даже такое, что вместо сервера используется ПК какого-то сотрудника :)). Все было бы хорошо если бы на сервере баз данных стоял UPS, а как правило на это не обращают пока гром не грянет. dbcc checkdb не всегда может помочь, хотя конечно и меня спасал :) А вот если уж случилась данная проблема, то я бы рекомендовал сделать следующее:
1. Попробовать варианты с dbcc checkdb
2. Если Вам повезло, то создать полную копию базы или из бекапа с инсталяции или sql скриптами и с помощью утилит Import/Export, SSIS "перелить" данные в новую базу и... поставить UPS на сервер, настроить автоматический бекап с верификацией и жить спокойно :)
3. Если все таки некоторые таблицы нельзя восстановить то, у меня получалось вытянуть данные из таких таблиц с помощью select top ... пакетами и "перелить" их в чистую копию.
Может повезет и Вы сможете вытянуть побольше:)

Войдите или зарегистрируйтесь, чтобы комментировать