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

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

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

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

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

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


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

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

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

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

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


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
15.04.2008, 12:58
    #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
15.04.2008, 13:14
    #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
15.04.2008, 13:40
    #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
18.04.2008, 09:30
    #35263577
beginner_fox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Живучесть базы
Dima T
К сожалению я железо не выбираю где мой софт трудится, поэтому страхуюсь в вопросах восстановления по максимуму, чтобы само восстановилось. С контейтнером дело так обстоит:
после успешного индексирования делается копия .DBC, .DCT, .DCX
если в какой-то момент возникают проблемы с контейнером, то копия восстанавливается.

Не могли бы превести часть примера кода или привести ссылки
Тоже хочу сделать что-то подобное ...
...
Рейтинг: 0 / 0
18.04.2008, 15:38
    #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
18.04.2008, 16:00
    #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
18.04.2008, 16:10
    #35265254
beginner_fox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Живучесть базы
Dima TПример кода.
[/src]

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


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