Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / REINDEX или INDEX / 8 сообщений из 8, страница 1 из 1
20.08.2008, 11:07
    #35496385
LUCIAN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REINDEX или INDEX
Для реиндексации ночью использую програмный файл который получил из файла, созданным утилитой 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
20.08.2008, 14:45
    #35497127
АлексейО
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REINDEX или INDEX
авторпозволит улучшить пространственную организацию индексного файла
Про этот тезис ни чего не скажу, но при index cdx получаются поменьше и гарантировано исключают последующие ошибки индесов (по моей практике) и если есть возможность переоздать индексы то пользуюсь ей а не просто переиндексацией
...
Рейтинг: 0 / 0
20.08.2008, 15:41
    #35497284
LUCIAN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REINDEX или INDEX
АлексейО и если есть возможность переоздать индексы то пользуюсь ей а не просто переиндексацией
Учитывая выше сказазанное для реиндексации буду использовать 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
20.08.2008, 17:00
    #35497564
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REINDEX или INDEX
При создании индекса командой 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
20.08.2008, 18:04
    #35497736
LUCIAN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REINDEX или INDEX
Dima TЛучше всего так:
Код: plaintext
1.
2.
3.
use MyDBF excl
DELETE TAG ALL && Удаление MyDBF.CDX
INDEX ON ...
INDEX ON ...

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

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

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

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

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

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

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


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