powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Живучесть базы
14 сообщений из 14, страница 1 из 1
Живучесть базы
    #35254198
beginer_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

VFP9
Необходимо создать рабочую базу,диэлемма:
создать БД с контролем на ссылочную целостность - RI или без.
Насколько живуча база с RI и бывали ли в вашей практике случае падения контейнера БД из-за использования RI?
...
Рейтинг: 0 / 0
Живучесть базы
    #35254636
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beginer_foxНасколько живуча база с RI и бывали ли в вашей практике случае падения контейнера БД из-за использования RI?
RI не использую. Слишком много лишнего этот кодогенератор пишет, если надо руками триггеры прописываю.
Падения из-за RI быть не может, т.к. практически все падения из-за вылетов во время кэширования записи случаются, т.е. часть инфы уже записалась, а часть еще нет. Прога вылетела вот и база упала. RI на это никак не влияет.

Другое дело когда из-за вылетов два одинаковых первичных ключа образуется. С PRIMARY индексом таблицу уже не открыть, а с обычным все работает, главное только проверку на это дело сделать и информирование пользователя о критической ошибке, чтоб позвонил и спросил что это значит, если мелочь - пусть поработает.
...
Рейтинг: 0 / 0
Живучесть базы
    #35254861
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Другое дело когда из-за вылетов два одинаковых первичных ключа
образуется. С PRIMARY индексом таблицу уже не открыть, а с обычным все
работает, главное только проверку на это дело сделать и информирование
пользователя о критической ошибке, чтоб позвонил и спросил что это значит,
если мелочь - пусть поработает.

Вот уж интересно. И primary ты нигде не используешь???

База НИ разу не падала. Куча тригерров и правил, как таблицы так и отдельных
полей. PRIMARY индексы в каждой таблице.
Несколько раз было такое, что свет по конторе отключали. пользователей более
50. Раз последние внесенные изменения потерялись. А критицески по моему за
последние 5-6 лет ничего не было.

Ну и по поводу "не открывается" - правильнее тогда уж на низком уровне чего
надо поправить или "левый" индексный файл подложить, с теми же ключами, но
от пустой таблици и переиндексировать, чем надеятся, что ты все везде учел и
сам сможешь реализовать тот контроль, который повешан на PRIMARY


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Живучесть базы
    #35255106
beginner_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Честно говоря в смущении стоит ли использовать вообще контейнер БД-если посмотреть в проекте, то там действительно много кода генериться системой.
Контейнер позволит реализовать целостную структуру БД и обеспечит контроль целостности, но насколько Фокс действительно гарантирует живучесть своего контейнера? Когда необходимо будет быстро решить проблему при падении рабочей базы, контейнер так просто не подымешь, а табличку думаю да.
...
Рейтинг: 0 / 0
Живучесть базы
    #35255147
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Гарантии дает только страховой полис. Но и он не гарантирует ненаступление страхового события, он гарантирует получение денежной компенсации при наступлении такого события.
2. Есть такая штука, называется GenDBC. В стандартной поставке фокса. Очень полезно ознакомиться.
...
Рейтинг: 0 / 0
Живучесть базы
    #35255159
FFFFFFFF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beginer_fox !
Практика критерий истины.
...
Рейтинг: 0 / 0
Живучесть базы
    #35255497
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Честно говоря в смущении стоит ли использовать вообще контейнер
> БД-если посмотреть в проекте, то там действительно много кода генериться
> системой.
> Контейнер позволит реализовать целостную структуру БД и обеспечит
> контроль целостности, но насколько Фокс действительно гарантирует
> живучесть своего контейнера? Когда необходимо будет быстро решить проблему
> при падении рабочей базы, контейнер так просто не подымешь, а табличку
> думаю да.

Контейнер - это таже таблица. Со всеми вытекающими!

Если тебе не составляет труда поднять таблицу - то и контейнер поднять труда
не составит.

Так же легко контейнер поддается бэкапированию.

А дальше уже идет религия и удачный/неудачный опыт и домыслы.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Живучесть базы
    #35255907
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galyamov RinatВот уж интересно. И primary ты нигде не используешь???
Использую, в MS-SQL :) с контролем целостности и т.п.

А в фоксе генерю Id, индекс обычный + контроль на задвоение после индексирования:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
use izg order nIzgId
lnId =  0 
scan
	if lnId >= izg.nIzgId
		lcBadTable = lcBadTable + chr( 13 ) + 'Таблица IZG  Код: ' + astr(lnId)
		exit
	endif
	lnId = izg.nIzgId
endscan

Получил пару раз задвоение ключа на VFP5 еще, таблица перестает открываться, танцы с бубном исполнял тогда для лечения, больше не пользуюсь.

Контроль целостности тоже руками прописан.

beginner_foxно насколько Фокс действительно гарантирует живучесть своего контейнера?
Ровно настолько же как и любой другой DBF-ки с мемополем.

К сожалению я железо не выбираю где мой софт трудится, поэтому страхуюсь в вопросах восстановления по максимуму, чтобы само восстановилось. С контейтнером дело так обстоит:
после успешного индексирования делается копия .DBC, .DCT, .DCX
если в какой-то момент возникают проблемы с контейнером, то копия восстанавливается.

По большому счету контейнер мне нужен для организации счетчиков для заполнения Id и Local/Remote View хранить, кое-где значение по умолчанию для некоторых полей задаю.

В 9-ке View можно заменить на курсорадаптер, автоинкремент тоже появился, так что на 9-ке мне контейнер не нужен, правда все проекты на 9-ке у меня с базой на MS-SQL.
...
Рейтинг: 0 / 0
Живучесть базы
    #35255971
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> В 9-ке View можно заменить на курсорадаптер, автоинкремент тоже
> появился, так что на 9-ке мне контейнер не нужен, правда все проекты на
> 9-ке у меня с базой на MS-SQL.

Dima T, интересно было бы пообщаться по поводу связки VFP и SQL. Можешь
стукнуть в асю 306-320-505 ?



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Живучесть базы
    #35256049
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Galyamov Rinat
> В 9-ке View можно заменить на курсорадаптер, автоинкремент тоже
> появился, так что на 9-ке мне контейнер не нужен, правда все проекты на
> 9-ке у меня с базой на MS-SQL.

Dima T, интересно было бы пообщаться по поводу связки VFP и SQL. Можешь
стукнуть в асю 306-320-505 ?

Постучал. На связке Fox-SQL есть несколько проектов для внутреннего пользования в незаконченном, но рабочем состоянии.

Пока основное на 6-ке с DBF крутится. Был опыт работы с MS-SQL лет 5-6 назад, потом просто не надо было, сейчас есть задумки для довольно крупного проекта, пока готовлю библиотеку под VFP9 и кое-какие приемы, хитрости испытываю для облегчения жизни при последующей разработке. В 9-ке новое появилось, в MS-SQL 2005 тоже, надо осваивать потихоньку.

На своих внутренних задачах вобщем тренируюсь, сам пользователь, сам разработчик - хорошая обратная связь получается.
Хочется поплотнее всем этим заняться, но времени на это мало остается, поэтому получается урывками.
...
Рейтинг: 0 / 0
Живучесть базы
    #35263577
beginner_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
К сожалению я железо не выбираю где мой софт трудится, поэтому страхуюсь в вопросах восстановления по максимуму, чтобы само восстановилось. С контейтнером дело так обстоит:
после успешного индексирования делается копия .DBC, .DCT, .DCX
если в какой-то момент возникают проблемы с контейнером, то копия восстанавливается.

Не могли бы превести часть примера кода или привести ссылки
Тоже хочу сделать что-то подобное ...
...
Рейтинг: 0 / 0
Живучесть базы
    #35265102
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример кода.

Метод Error()
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
LPARAMETERS nError, cMethod, nLine
this.lWasError = .t.
this.SayText('Ошибка ' + alltrim(str(nError)))
if nError =  1557 
	MessageBox('Не удалось проиндексировать.' + chr( 13 ) + 'Вероятно с программой работает кто-то еще.',  16 , 'ВНИМАНИЕ')
	return to master
endif
return

Метод Action()
Код: 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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
lcPathRecovery = justpath(SYS( 2014 , 'MyDB.dbc'))
lcPath = addbs(lcPathRecovery)
for lnSc =  1  to  10 
	this.lWasError = .f.
	this.SayText('Проход № ' + alltrim(str(lnSc)))
	if lnSc =  2  && Второй проход, значит проблемы. Удаляем индексы.
		close data all
		if file('y-mail.com')
			* Утилита для исправления неправильного кол-ва записей в заголовке DBF
			!y-mail /dbfrec &lcPathRecovery
		endif
		delete file (lcPath + 'MyDB.dcx')
		delete file (lcPath + '*.cdx')
		use MyDB.dbc excl
	endif
	close data all
	this.SayText('Контейнер базы данных')
	open database MyDB excl
	if lnSc =  3  and this.lWasError && Контейнер БД не открывается
		if file(lcPath + 'MyDB.dbcNorm')
			this.SayText('Восстанавливаем контейнер базы данных')
			&& Сохраняем копию испорченного контейнера БД
			copy file (lcPath + 'MyDB.dbc') to (lcPath + 'MyDB.dbcbad')
			copy file (lcPath + 'MyDB.dct') to (lcPath + 'MyDB.dctbad')
			&& Восстанавливаем контейнер БД
			copy file (lcPath + 'MyDB.dbcNorm') to (lcPath + 'MyDB.dbc')
			delete file (lcPath + 'MyDB.dbcNorm')
			copy file (lcPath + 'MyDB.dctNorm') to (lcPath + 'MyDB.dct')
			delete file (lcPath + 'MyDB.dctNorm')
		endif
	endif
	validate database
	pack database

	this.SayText('Таблица IZG')
	use izg excl
	if used('izg')
		delete tag all
		pack
		index on nIzgId tag nIzgId
		index on cIzg tag cIzg
	endif
	
	this.SayText('Таблица TOVAR')
	use Tovar excl
	if used('tovar')
		delete tag all
		pack
		index on nTovarId tag nTovarId
	endif
	
	...
	
	if this.lWasError = .f. && Ошибок не было. Выходим.
		exit
	endif
endfor
close data all

if this.lWasError && Ошибки не исправлены
	this.SayText('', .t.)
	this.SayText('!!! ОБНАРУЖЕНЫ НЕИСПРАВИМЫЕ ОШИБКИ !!!', .t.)
	this.SayText('', .t.)
	MessageBox('Испорчена структура базы.'+ chr( 13 );
		 + 'Самостоятельно исправить это невозможно.'+ chr( 13 );
		 + 'До устранения этой неисправности дальнейшая работа невозможна.',  48 , 'ВНИМАНИЕ')
else
	&& Ошибок не было. Делаем копию контейнера БД
	copy file (lcPath + 'MyDB.dbc') to (lcPath + 'MyDB.dbcNorm')
	copy file (lcPath + 'MyDB.dct') to (lcPath + 'MyDB.dctNorm')
endif
...
Рейтинг: 0 / 0
Живучесть базы
    #35265201
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давно писал этот код, пока постил решил немного поправить:
Код: plaintext
1.
	if lnSc =  3  and this.lWasError && Контейнер БД не открывается
		if file(lcPath + 'MyDB.dbcNorm')
Заменил на
Код: plaintext
1.
2.
if lnSc =  5  and file(lcPath + 'MyDB.dbcNorm')
		delete file (lcPath + 'MyDB.dcx')
Иногда бывали случаи что контейнер открывался, но структура таблицы в нем не соответствовала реальной структуре таблицы, в результате таблица не открывалась.

И чтобы копия контейнера соответствовала базе - при изменении структуры базы копию надо убивать.
...
Рейтинг: 0 / 0
Живучесть базы
    #35265254
beginner_fox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПример кода.
[/src]

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


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