powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / REINDEX или INDEX
8 сообщений из 8, страница 1 из 1
REINDEX или INDEX
    #35496385
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для реиндексации ночью использую програмный файл который получил из файла, созданным утилитой GENDBC:

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
CLOS DATA ALL
CLOS TABL ALL
SET SAFETY OFF

***** Create each index for IDS *****

USE IDS EXCLUSIVE
IF NOT USPEX
	RETURN
ENDIF
FOR m.nInner_Loop =  1  TO TAGCOUNT()
 IF	PRIMARY(m.nInner_Loop)
  ALTER TABLE IDS DROP PRIMARY KEY
 ENDIF
ENDFOR
SET COLLATE TO 'MACHINE'
INDEX ON TABLE TAG TABLE

***** Create each index for SP_MOL *****

USE SP_MOL EXCLUSIVE
FOR m.nInner_Loop =  1  TO TAGCOUNT()
 IF	PRIMARY(m.nInner_Loop)
  ALTER TABLE SP_MOL DROP PRIMARY KEY
 ENDIF
ENDFOR
SET COLLATE TO 'MACHINE'
INDEX ON KOD_P TAG KOD_P
INDEX ON KOD_OTD TAG KOD_OTD
INDEX ON TAB TAG TAB
ALTER TABLE 'SP_MOL' ADD PRIMARY KEY ID_AGN TAG ID_AGN
INDEX ON NAM TAG NAM
........................
........................
*************** Begin Relations Setup **************
ALTER TABLE 'AMORT' ADD FOREIGN KEY TAG ID_MBP REFERENCES TMBP TAG ID_MBP
ALTER TABLE 'TMBP' ADD FOREIGN KEY TAG ID_TOV REFERENCES SP_TOV TAG ID_TOV
ALTER TABLE 'TMBP' ADD FOREIGN KEY TAG ID_AGN REFERENCES SP_MOL TAG ID_AGN
ALTER TABLE 'DMBP' ADD FOREIGN KEY TAG ID_MBP REFERENCES TMBP TAG ID_MBP
ALTER TABLE 'DMBP' ADD FOREIGN KEY TAG OTP REFERENCES SP_MOL TAG ID_AGN
ALTER TABLE 'DMBP' ADD FOREIGN KEY TAG POL REFERENCES SP_MOL TAG ID_AGN

Теперь начал сомневаться хорошо ли так реиндексировать,можно ведь для каждой
таблицы применить REINDEX и при этом если меняеш(добавляеш) выражение индекса ,то не надо менять соотв.программный файл реиндексации.
В одной из книг по VFP:
авторТаким образом,первичные и внешние ключи должны просто реиндексироваться.Но можно
удалять и воссоздать другие тэги-это позволит улучшить пространственную организацию индексного файла.
А это как понимать:по будним дням REINDEX по выходным INDEX
...
Рейтинг: 0 / 0
REINDEX или INDEX
    #35497127
АлексейО
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторпозволит улучшить пространственную организацию индексного файла
Про этот тезис ни чего не скажу, но при index cdx получаются поменьше и гарантировано исключают последующие ошибки индесов (по моей практике) и если есть возможность переоздать индексы то пользуюсь ей а не просто переиндексацией
...
Рейтинг: 0 / 0
REINDEX или INDEX
    #35497284
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АлексейО и если есть возможность переоздать индексы то пользуюсь ей а не просто переиндексацией
Учитывая выше сказазанное для реиндексации буду использовать INDEX. В приведённом выше програмном файле(GENDBC породило) можно заменить чем то короче код типа:
Код: plaintext
1.
2.
3.
4.
5.
FOR m.nInner_Loop =  1  TO TAGCOUNT()
 IF	PRIMARY(m.nInner_Loop)
  ALTER TABLE SP_MOL DROP PRIMARY KEY
 ENDIF
ENDFOR

например:
Код: plaintext
ALTER TABLE SP_MOL DROP PRIMARY KEY
Если известно что PRIMARY KEY существует
...
Рейтинг: 0 / 0
REINDEX или INDEX
    #35497564
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При создании индекса командой INDEX в CDX файле не освобождается место от предыдущего варианта индекса и поэтому CDX увеличивается после каждого INDEX
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create Table test free (cText c( 10 ))
insert into test values ('111')
insert into test values ('222')
insert into test values ('333')
index on cText tag cText
use
? len(FileToStr('test.cdx'))
use Test Exclusive
index on cText tag cText
use
? len(FileToStr('test.cdx'))

REINDEX такой проблемы не имеет, но может не сработать если индекс сильно поврежден и в нем попорчено индексное выражение.

Лучше всего так:
Код: plaintext
1.
2.
3.
use MyDBF excl
DELETE TAG ALL && Удаление MyDBF.CDX
INDEX ON ...
INDEX ON ...
...
Рейтинг: 0 / 0
REINDEX или INDEX
    #35497736
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TЛучше всего так:
Код: plaintext
1.
2.
3.
use MyDBF excl
DELETE TAG ALL && Удаление MyDBF.CDX
INDEX ON ...
INDEX ON ...

Но, после такой индексации надо будет восстановить все отношения,так как в книге по VFP сказано:
авторНе удаляйте все тэги в таблице посредством команды Delete Tag All . Первичный ключ является индексом;если вы его удалите,будут уничтожены и все отношения,которые на него ссылаются. В этом случае вы можете потерять часть ограничений ссылочной целостности.
...
Рейтинг: 0 / 0
REINDEX или INDEX
    #35498147
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делается все проще.

1. Создается резервное хранилище, в котором находятся пустые файлы DBF, FPT, CDX.

Можно для этой цели просто запускать программу, полученную после GenDBC.prg "как есть". Просто создать пустую базу данных.

Можно также использовать просто резервную копию рабочих данных, если есть уверенность, что в этой копии файлы CDX не поврежденные.

2. Удаляешь ВСЕ файлы CDX в рабочей базе и заменяешь их файлами CDX из этого резервного хранилища.

3. Запускаешть REINDEX по всем таблицам, чтобы привести в соответствие содержимое скопированных CDX-файлов и реального содержимого таблиц.
...
Рейтинг: 0 / 0
REINDEX или INDEX
    #35498148
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
REINDEX или INDEX
    #35498334
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодаря Владмимиру М прог.файл копирования и индексирования см. тут
приобрел такой вид (очень мало переделок):

Код: plaintext
CLOSE TABL ALL\nCD F:\\SBT\\BAL && исходная папка на сервере\nUSE BAL.DBC EXCL\nIF NOT USPEX\n\tRETURN\nENDIF\nCLOSE TABL ALL\n******* так шла индексация раньше теперь см. в конце этого файла\n*!*\tDO D:\\KOPII\\BALBAK\\BALIND && ИНДЕКСАЦИЯ C ПОМОЩЬЮ INDEX\n*!*\tIF NOT USPEX\n*!*\t\tRETURN\n*!*\tENDIF\n\n*** Создание программы-creatora БД\t\nSET SAFETY OFF\nDVFP=SYS( 2004 )\nDGEN=DVFP+"TOOLS\\GENDBC"\nSET PATH TO &DGEN\n\nDO GENDBC WITH "BALB"\n\nCOPY FILE BALB.PRG TO D:\\KOPII\\BALBAK\\BALB.PRG\nCOPY FILE BALB.KRT TO D:\\KOPII\\BALBAK\\BALB.KRT\nCOPY FILE F:\\PEXE\\BAL.EXE TO D:\\KOPII\\BALBAK\\BAL.EXE\nDELETE FILE BALB.PRG\nDELETE FILE BALB.KRT\n***********************************************\nCD D:\\KOPII\\BALBAK && папка для копии\n*** параметры для представлений\nPUBLIC DATN,DATK,ZURN,ORDB,sct_ido,zur_id,SCT_ID,NSTRG,REGZ,dok_n,ZTR_ID\nZTR_ID= 50 \ndok_n=padr( 1 , 10 )\nREGZ=.T.\nNSTRG=STR( 1 , 2 )+STR( 1 , 3 )\nSCT_ID= 1 \nzur_id= 1 \nsct_ido= 1 \nORDB="PADL(ZURM0.ID_ZUR,18)"\nZURN="1"\nDATK=DATE()\nDATN=DATK-DAY(DATK)+ 1 \n*** создание пустой БД\nDO D:\\KOPII\\BALBAK\\BALB.PRG\nIF NOT USPEX\n\tRETURN\nENDIF\n\nCLOS TABL ALL\n\nWAIT WIND "НАПОЛНЕНИЕ БАЗЫ ДАННЫХ " NOWAIT\n\nOPEN DATA D:\\KOPII\\BALBAK\\BAL\nLNTABLES=ADBOBJECTS(LATABLES,\'TABLE\')\nFOR LNX= 1  TO LNTABLES\n\tLCTABLENAME=LATABLES(LNX)\n\tCOPY File (\'F:\\SBT\\BAL\\\'+LCTABLENAME+\'.DBF\') TO (\'D:\\KOPII\\BALBAK\\\'+LCTABLENAME+\'.DBF\')\n\tIF FILE(LCTABLENAME+\'.FPT\')\n\t\tCOPY File (\'F:\\SBT\\BAL\\\'+LCTABLENAME+\'.FPT\') TO (\'D:\\KOPII\\BALBAK\\\'+LCTABLENAME+\'.FPT\')\n\tENDIF\n* пустые CDX из копии перемещаем  в оригинал\n\tIF FILE(LCTABLENAME+\'.CDX)\n\t\tCOPY File (\'D:\\KOPII\\BALBAK\\\'+LCTABLENAME+\'.CDX\') TO (\'F:\\SBT\\BAL\\\'+LCTABLENAME+\'.CDX\')\n\tENDIF\nENDFOR\n* Делаем переиндексацию основной базы данных\nCLOSE TABL ALL\nCLOSE DATABASES all\nCD F:\\SBT\\BAL && исходная папка на сервере\nFOR LNX= 1  TO LNTABLES\n\tLCTABLENAME=LATABLES(LNX)\n\tUSE (LCTABLENAME)\n\tREINDEX\nENDFOR\nWAIT WIND " Ф И Н И Ш " NOWAIT \n

Спасибо всем.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / REINDEX или INDEX
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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