Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) REINDEX через FoxPro... (число прочтений - 6685 )
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
REINDEX через FoxPro...
21. Августа 2007 :: 09:03
Печать  
в свете выяснившихся обстоятельств про использование FoxPro я на досуге решил поэкспериментировать:

1. создал файлик reindexDB.prg
Код
Выбрать все
Set Default To ('d:\_test\db1gb\')

gnDbcnumber = Adir(gaDatabase, '*.DBF')  

For nCount = 1 To gnDbcnumber

	tablename = gaDatabase(nCount,1)

	Use ''+tablename In 0 Exclusive
	Reindex
	Use
Endfor

Close All
 



2. выбрал базу размером 1 гиг, и скомпилил reindexDB.prg и запустил (перед этим принудительно работу с базой завершил аварийно)

3. время на моей рабочей машинке заняло 4:19:47 (замерял секундомером)

Результат который я получил - запустив потом базу
а) 1С-нина не поняла что базу переиндексировали, указав на индекс таблицы ПоследовательностиДокументов нарушен.
б) переиндексация средствами 1С заняла 5:20:41

Вопросы:
1) Как 1С проверяет сам факт нарушения индексных файлов?
2) Можно заставить 1С поверить что база переиндексированна (в принципе можно нажать кнопку НЕТ  Улыбка, но )


  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: REINDEX через FoxPro...
Ответ #1 - 21. Августа 2007 :: 09:20
Печать  
Наличие файлов *.lck в корне базы
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: REINDEX через FoxPro...
Ответ #2 - 21. Августа 2007 :: 11:51
Печать  
Возможно еще 1С , дополнительно , проверяет индексы при открытии таблиц как в XBase :

1. Существует ли файл
Код
Выбрать все
ФС.СуществуетФайл(ФайлИндекс) = 1 


2. Открывается ли в режиме чтения
Код
Выбрать все
 БазаАдреса.ОткрытьФайл(ФайлБазы, ФайлИндекс, 1);  


3. Содержится ли необходимые индексы (выясн из МД) в  индексном файле (выясняется из файла)

Вопрос : может ли Fox внутренними методами проверить необходимость переиндексации ?
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: REINDEX через FoxPro...
Ответ #3 - 23. Августа 2007 :: 02:47
Печать  
+
4. Не нулевое значение в поле USRSCNT в файле 1susers.dbf
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: REINDEX через FoxPro...
Ответ #4 - 23. Августа 2007 :: 05:10
Печать  
dnp писал(а) 23. Августа 2007 :: 02:47:
+
4. Не нулевое значение в поле USRSCNT в файле 1susers.dbf

ИМХО это самое главное и единственное Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: REINDEX через FoxPro...
Ответ #5 - 23. Августа 2007 :: 06:38
Печать  
Активных пользователей из syslog\links.tmp уже давно прочитал, очень удобно.
А сравнить их количество с USRSCNT, чтобы уже днем\вечером знать, что утром запросит переиндексацию, мысль не приходила.
Щас прикручу  Класс
  
Наверх
ICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: REINDEX через FoxPro...
Ответ #6 - 23. Августа 2007 :: 12:23
Печать  
dnp писал(а) 23. Августа 2007 :: 06:38:
Активных пользователей из syslog\links.tmp уже давно прочитал, очень удобно.
А сравнить их количество с USRSCNT, чтобы уже днем\вечером знать, что утром запросит переиндексацию, мысль не приходила.
Щас прикручу  Класс


если подытожить то получается на знание  Круглые глаза 1С о реиндексации могут повлиять

1. Наличие файлов *.lck в каталогеИБ(), и во всех каталогах пользователя
2. запись в таблице 1SUSERS в поле USRSCNT >0
3. наличие записей в syslog\links.tmp

То есть если проверить на ОТСУТСТВИЕ процессов 1cv7.exe в памяти и "поубивать" вышеозначенные линки можно запускать reindex средствами Fox

Осталось проверить корректно ли реиндексирует Fox по сравнению с родным 1С-овским движком - а это можно сделать выполнив UPDATE на смену родителя в каком нибудь справочнике, чем сегодня вечерком и займусь.
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: REINDEX через FoxPro...
Ответ #7 - 23. Августа 2007 :: 13:37
Печать  
lustin, а ты заморачиваешься со всем этим, чтобы снизить время переиндексации с 5:20:41 до 4:19:47 ?
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: REINDEX через FoxPro...
Ответ #8 - 23. Августа 2007 :: 16:29
Печать  
lustin писал(а) 23. Августа 2007 :: 12:23:
если подытожить то получается на знание  Круглые глаза 1С о реиндексации могут повлиять

1. Наличие файлов *.lck в каталогеИБ(), и во всех каталогах пользователя
2. запись в таблице 1SUSERS в поле USRSCNT >0
3. наличие записей в syslog\links.tmp

То есть если проверить на ОТСУТСТВИЕ процессов 1cv7.exe в памяти и "поубивать" вышеозначенные линки можно запускать reindex средствами Fox

Осталось проверить корректно ли реиндексирует Fox по сравнению с родным 1С-овским движком - а это можно сделать выполнив UPDATE на смену родителя в каком нибудь справочнике, чем сегодня вечерком и займусь.

Не согласен.
Наличие 1cv7.lck для 1С ни о чем не говорит (только что проверил).
Наличие записей в syslog\links.tmp (или просто его существование) - тоже (ибо выход пользователя лишь снимает блокировку с определенного байта, находящегося за пределами файла)  (только что проверил).
Лишь ненулевой счетчик или отсутствие индексного файла - причина. Хотя при отсутствии CDX вопрос не задается.
Проверять наличие процесса 1cv7.exe не требуется (да и как узнать, относится ли он к нашей базе?), достаточно проверить отсутствие 1cv7.lck в каталоге базы, а в случае наличия - попытаться его удалить (5 лет работает батник, архивирующий базу ночью, утром могу проверить, не сообщил ли он о неудаче).

А вот переиндексация средствами Фокса - это хорошо бы. И не ради 20% экономии времени.
Мало ли чего конфигуратору в пакетном режиме икнется ночью. Потом, с утра по раньше, лети на редко посещаемую работу, ищи его, снимай... Выслушивай жалобы, что "нам же работать нужно!.. а нельзя так сделать, чтобы такого не повторялось?".

Так что предлагаю такую редакцию :

1. База свободна, если КаталогИБ()+"1cv7.lck" отсутствует или стирабелен.
2. Переиндексация нужна, если база свободна, а в USRSCNT не ноль.
  
Наверх
ICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: REINDEX через FoxPro...
Ответ #9 - 23. Августа 2007 :: 17:24
Печать  
JohnyDeath писал(а) 23. Августа 2007 :: 13:37:
lustin, а ты заморачиваешься со всем этим, чтобы снизить время переиндексации с 5:20:41 до 4:19:47 ?


ну время это побочный эффект....

изначально меня волновало возможность переиндексации отдельной таблицы 1С во время работы в разделенном режиме

Потом на досуге я подумал а нельзя ли вообще средствами FoxPro заменить переиндексацию 1С-совскую
(на это меня натолкнула тема про Вьюхи для DBF)

Так что я не заморачиваюсь - я интересуюсь... А время - это хорошо  Улыбка.

PS Сам сегодня проверил lck, syslog/links - от них не зависит в прицнипе
а также UPDATE на изменение родителя в справочнике а после REINDEX - работает.
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: REINDEX через FoxPro...
Ответ #10 - 24. Августа 2007 :: 06:16
Печать  
Во, вспомнил ведь Улыбка
В свое время, аж в 2004 г. сделал COM-объект для Опенконфа
Цитата:
     Определение статуса информационной базы 1С.
     Используются следующие варианты:
     1)      "В базе никого нет"
     2)      "База работает или в монопольном режиме или один пользователь работает в разделенном режиме"
     3)      "Выполнен некорректный выход из 1С, нужна переиндексация"
     4)      "1С работает в разделенном режиме"
     
     Примечание.
     1) скриплет работает только для DBF-баз ( пока !!)
     2) пока не удается разделить монопольный режим или работу одного пользователя в разделенном режиме 'все работает
     
   Copyright (c) Артур Аюханов aka artbear, 2004

+ где-то на форуме Саша Орефков сделал полезную добавку к нему

1S.StatusIB.wsc - есть в поставке скриптов Опенконф, папка СистемныеФайлы

Вкратце алгоритм такой - проверяется количество пользователей в 1susers "select usrscnt from 1susers"
если 0, то в базе нет никого и переиндексация не нужна
если не 0, то
 делается попытка монопольного открытия файла 1susers.
dbf
 если удалось открыть, значит нужна переиндексация
 если не удалось открыть, значит, кто-то сидит в базе.

Т.е. схема определения необходимости индексации очень и очень проста Улыбка

А использовать этот КОМ-Объект можно в любой программе - Опенконф, системные скрипты, 1С и т.д.
Там все просто Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: REINDEX через FoxPro...
Ответ #11 - 24. Августа 2007 :: 07:01
Печать  
artbear писал(а) 24. Августа 2007 :: 06:16:
  делается попытка монопольного открытия файла 1susers.

  если удалось открыть, значит нужна переиндексация
  если не удалось открыть, значит, кто-то сидит в базе.


Монопольно открыть таблицу 1susers  -
чем это отличается(лучше) от проверки на 1cv7.lck ?

P.S.
Получается что 1С определяет необходимость переиндексации только потому - корректно все вышли или нет.
При этом фактически индексы могут быть в порядке.
И наоборот - индексы могут быть нарушены - но если все вышли корректно 1С этого не заметит.
Озадачен
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать