Страницы: 1
RSS
TI_90х\отчеты\sql2005
 
Доброго времени суток, Уважаемые..

вводные: 2к12(ОС)\907(сборка)\209(драйвер) + внешний sql2005(х32 на 2к8r2). ти каждый месяц создает(должен создавать) внешнюю базу по шаблону ti_11_2015.mdf, - база ti_12_2015.mdf создана не была(причина не обнаружена), биллингом использовалась предыдущая бд(ti_11_2015.mdf авто_созданная на 906 сборке), что привело к определенным последствиям.

необходимость: разделить данные базы ti_11_2015.mdf на две бд(как и должно быть)... может быть после этого разделения, отчеты, - худо-бедно, - начнут работать.

вопрос: каким одним(!) SQL запросом это(корректно разделить) можно сделать, если:
1. копирование данных из одной бд во вновь созданную(вручную) средствами "мастера импорта\экспорта sql" приводит к зависанию процесса на последней стадии(может проблема с ним, но данные, вроде, копируются и сохраняются, однако внутри новой базы есть ссылки на физические файлы источника копирования),
2. ручной(с помощью сценария "CREATE") перенос структуры бд в новую(создана вручную с нужным шаблонным названием в нужном месте) бд с последующим копированием содержимого всех таблиц базы источника средствами "мастера импорта\экспорта sql" приводит к уменьшению конечной бд до размеров в 25гб(к примеру: среднестатистическая месячная бд(для моей схемы) должна весить от 30 до 45гб(если очень грубо), база же "с двумя месяцами внутри" весит порядка 70гб), что может быть неверным(не уверен)..

согласно последнему варианту копирования данных выполняю удаление "лишних" данных внутри полученной бд запросом(ниже), имея ввиду что переменная @DateTo = N'30.11.2015 21:00:00' - указывает момент ДО которого данные должны удаляться(!):
Код
<BR>USE [ti_12_2015]<BR>GO<BR><BR>DECLARE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@return_value int<BR><BR>EXEC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@return_value = [dbo].[ClearDataOlderThatDate]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ServerID = 1,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@DateTo = N'30.11.2015 21:00:00'<BR><BR>SELECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'Return Value' = @return_value<BR><BR>GO<BR><BR>

в результате выполнения(достаточно быстрого даже для такого объема) получаем: в новой полученной бд сохранены данные ДО выбранного момента времени '30.11.2015 21:00:00', а не после(как, вероятно, и должно быть)... и как этот момент можно объяснить применительно к такому говорящему названию встроенной(!) хранимой процедуры: [dbo].[ClearDataOlderThatDate]([dbo].[очистка_данных_старее_выбранной_даты])?

вероятно в процедуре знак неверный(?):
Код
<BR>USE [ti_12_2015]<BR>GO<BR>/****** Объект: StoredProcedure [dbo].[ClearDataOlderThatDate]&nbsp;&nbsp;&nbsp;&nbsp;Дата сценария: 01/17/2016 12:01:27 ******/<BR>SET ANSI_NULLS ON<BR>GO<BR>SET QUOTED_IDENTIFIER ON<BR>GO<BR>ALTER PROCEDURE [dbo].[ClearDataOlderThatDate]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ServerID int,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@DateTo datetime<BR>AS<BR>BEGIN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET NOCOUNT ON;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from AdminGroupLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from AdminLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from AVLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from ContentRatingLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from CounterTrafficLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from ExtCounterLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from NetStatLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from ProxyLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from RatingLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from SearchQueriesLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from SMTPFltLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from SMTPSendLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from SMTPTraceLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from TariffLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from TerminsLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from UserBillLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from UserCounterLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from UserLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from UserStopSessLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from UserTrafficLog where ServerID = @ServerID and Time <strong>&gt;</strong> @DateTo<BR>END<BR>
и ее надо переименовать в [dbo].[ClearDataFollowingThatDate]?


и создавать рядом вторую дополнительную процедуру, с правильным знаком:

Код
<BR>USE [ti_12_2015]<BR>GO<BR>/*** Объект: StoredProcedure [dbo].[ClearData<strong>Older</strong>ThatDateCorrect]Дата сценария: 01/17/2016 15:39:07***/<BR>SET ANSI_NULLS ON<BR>GO<BR>SET QUOTED_IDENTIFIER ON<BR>GO<BR>CREATE PROCEDURE [dbo].[ClearDataOlderThatDateCorrect]<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@ServerID int,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@DateTo datetime<BR>AS<BR>BEGIN<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SET NOCOUNT ON;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from AdminGroupLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from AdminLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from AVLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from ContentRatingLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from CounterTrafficLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from ExtCounterLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from NetStatLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from ProxyLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from RatingLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from SearchQueriesLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from SMTPFltLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from SMTPSendLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from SMTPTraceLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from TariffLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from TerminsLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from UserBillLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from UserCounterLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from UserLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from UserStopSessLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>&nbsp;&nbsp;&nbsp;&nbsp;Delete from UserTrafficLog where ServerID = @ServerID and Time <strong>&lt;</strong> @DateTo<BR>END<BR><BR>



DmitryPC2016-01-19 09:47:51
 
... а все-равно, и с отчетами по трафику, и с сетевыми отчетами - "полный швах"(за последние 2 месяца прошлого года).



 


ручное выполнение процедуры [UpdateUserTrafficLog] завершается без ошибок.


ручное выполнение процедуры [UpdateCounterTrafficLog] приводит к ошибке:




Сообщение 213, уровень 16, состояние 1, процедура UpdateCounterTrafficLog, строка 185
Ошибка вставки: имя столбца или число предоставленных значений не соответствует определению таблицы.

DmitryPC2016-01-18 07:32:13
 

видимо придется продолжать очередной "разговор" БЕЗ поддержки суппорта(Вы бы хоть присутствие своё обозначили)...



продолжение:


 


1.делаем штатный sql бэкап базы ti_11_2015


2.разворачиваем его в наичистейшую базу ti_12_2015


3.выполняем правильную(см. выше) хранимую процедуру по удалению из этой восстановленной базы "лишних"(за 11 месяц) данных ("граничное" число 29-11-2015 00-00-00)


4.в ти \консоль\настройки\обслуживание бд\архивные бд\ открываем базу "MS SQL - [01.11.15-01.01.16]" ставим галочку "НЕ ИСПОЛЬЗОВАТЬ для построения отчетов" (вроде как ДОЛЖНО не использоваться)


5.в ти \консоль\настройки\обслуживание бд\архивные бд\ СОЗДАЕМ подключение к существующей в SQL(названной "ti_12_2015") базе "MS SQL - [01.12.15-01.01.16]", - настройки по аналогии с существующими автосозданными бд , - галочку из пункта "4" НЕ устанавливаем 


6. пытаемся (в любой консоли(локальной\удаленной), в любом браузере(ie\ya\firefox\opera\...)) построить отчет по сетевой статистике(к примеру) за любое число указанного месяца - всплывает окно выбора баз(видны все базы(ДАЖЕ ОТКЛЮЧЕННЫЕ ДЛЯ ОТЧЕТОВ) - может это конечно и правильно, но нифига не добавляет уверенности в том, что что-то получится),  выбираем любого пользователя, любое, - точно не пустое(по данным) - число месяца, нажимаем "Построить", выбираем вновь подключенную базу "MS SQL - [01.12.15-01.01.16]",


      получаем:


      а. период отчета становится с 01.12.2015 00:00 по 31.12.2015 23:59,


      б. ответ системы - "Выберите корректный интервал"


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


 


при прочих равных условиях выбираем базу "MS SQL - [01.11.15-01.01.16]"(галка "Не использовать бд для построения отчетов" НЕ СТОИТ!),


      получаем:


      а. период отчета становится с 01.11.2015 00:00 по 31.12.2015 23:59,


      б. система пытается чтото строить.. но, извините, - даже по одному выбранному пользователю(со среднестатистическим месячным трафиком 25-30гб), за такой автоподставленный системой промежуток времени, построить отчет по сетевой статистике средствами ти НЕРЕАЛЬНО(оно банально отвалится по таймауту)! тем не менее ответ системы через 15 минут: "Для документа XML должен существовать документ более высокого уровня."


 


с остальныеми отчетами ситуация практически аналогична(за исключением некоторых нюансов с отчетами по трафику(описывал в других темах)).


 


мне вот интересно, это у меня руки настолько кривые и их нужно выпрямлять или есть другие варианты решения?
DmitryPC2016-01-19 08:26:54
 
хочу ответов на поставленные вопросы.
 
up.

PS. буду UPать до тех пор, пока не увижу ответов на вопросы.
 
up.

PS. буду UPать до тех пор, пока не увижу ответов на вопросы.
Страницы: 1
Читают тему (гостей: 2)