主页
Top.Mail.Ru Yandeks.Metrika
论坛:“基地”;
当前存档:2002.07.25;
下载:[xml.tar.bz2];

向下

IB6.0中的FK - Firebird。 无法批量删除 - 添加 找到类似的分支


kaif   (2002-06-28 23:17) [0]

有一个表Table1(ID,ID2,NAME)。
有一个表Table2(ID,NAME)。
存在声明性参照完整性
alter table1添加约束fk_table1_to_table2
外键(ID2)引用Table2(ID)。
1。我们将10000记录插入Table1。
2。退出应用程序。
3。再次加入并从Table10000中删除1条目。
4。将10000新条目插入Table1。
5。退出应用程序。
6。再次连接。 我们对表Table1进行任何SELECT查询。
7。尝试退出应用程序。 服务器挂起。 处理器不忙。 无法执行服务器操作(其他连接)。 人工终止服务器(删除任务)会导致数据库(孤立页面)的破坏。
---------------------
没有外键就不会发生这种情况。.
我花了数百次实验。 更改了服务器(IB6,Firbird)。 更改了事务参数(快照,一致性,读取已提交)。 一切都无济于事。 上述7步骤挂起服务器。 客户端功能不会终止
isc_detach_database.
奇怪的是,如果您等待20-30分钟,应用程序仍然会结束。 但是,这一次它没有被任何东西占用,也没有对磁盘的引用。 我正在关注任务监视器NT4。 Windows“98”中的相同情况。您可以轻松运行其他应用程序并工作。
什么是服务器忙?
谁知道?
通过FK的参照完整性已经足以破坏我的血液。 但这完全混乱......



kaif   (2002-06-29 15:17) [1]

没有人碰到这个吗?
它不可能......



Wizard_Ex   (2002-06-30 09:53) [2]

它在你的情况下最后没有拿起垃圾
F-0



kaif   (2002-06-30 13:40) [3]

不,不是垃圾。 我打字请求
在commit main之后的单独事务中SELECT COUNT(*)FROM TABLE1。 然后垃圾收集10tys。 行不能占用20-30分钟。 在最坏的情况下 - 2秒。 最后,服务器并不容易 刹车。 它 klinit。 不能从其他连接访问它根本不起作用(任何上诉挂起)。 并且处理器不忙。
此外,在尝试第二次断开连接之前,基座工作得很好。 没有刹车或类似的东西被注意到......
然后,如果它是垃圾收集,那么外键用它做什么?
我再说一遍,没有外键,即使在100th行插入中也无法再现这种情况。 使用外键,10M中的基本文件的大小,删除和插入甚至1千行后会出现这种情况。



jedi   (2002-06-30 18:25) [4]

Mojet u tebea problemi s jelezom? Potomu 4to takya situatsia v printsipe nevozmojna。 Poprobuiu na drugom compiutore,ispol“zui lu4she SQL i ne delay o4eni bolishie tranzacti hotea bi posle kajdie 100 DML operatsii delay commit。



kaif   (2002-06-30 19:25) [5]

> 2 jedi©(30.06.02 18:25)
为什么你认为这种情况是不可能的?
我将给出一些“不可能”的错误InterBase6.0:
1。 当您尝试在字段上创建外键时,该字段又是另一个表上具有外键的字段,IB6.0崩溃。 在Firebird中,此错误已得到修复。
2。 如果至少有一个与数据库的连接,那么使用愚蠢的“表正在使用”消息就不可能创建任何外键,尽管没有人可以使用任何表(只是连接)。 我们会认为这是一种意识形态的限制,好吧......
3。 但是如果还有联系的话 其他 有的基地 同名(!!!) 我在其中设置外键链接的表 base,有相同的消息“表正在使用中”,虽然它是另一个正在使用的数据库中的表,而不是在此。 Firebird中也存在此错误。
4。 最后,大规模删除的不可能性 - 我正在写的附加内容。
从现在开始,我完全拒绝使用FK机制IB。 全部注册在触发器中。 我完全失去了至少3周工作所有这些有趣的功能......更不用说我不得不切换到Firebird,这不太适合我......



jedi   (2002-06-30 20:03) [6]

1。 Neponyatno kak i za4em odno pole mojet silatsya na primary
关键iz dvuh ili bolee tablits。
2。 Ne sovsem verno kak vi ih sozdaiote vobshe ta kak sozdanie
vneshnevo kliu4a cac i liubogo drugo obiecta podruzumevaet
odin connect c baze ;-)(shitka)a vabshe ato destvitel“no
问题
3。 Ne provereal

Ya dumaiu esli vi poprobuite delat“ta kak ya napisal vishe to problem ne budet,to est”:

1。 startuete tranzactsiu
2。 delaete nekotoroe koli4estvo DML operatsii(nebol“shoe)
3。 承诺
4。 操作“to je samoe ;-)

V liuboi baze dannih ne recomenduiutsea delat“ogromnoe mnojestvo DML operatsii v odnoi tranzactsii naprimer v Oarcle ato zvyazanno s zaponeniem rollback segmentov 4to o4en”

PS S Interbase ya po4ti ne rabotal,prosto hotel predlojit“ideiu k​​ak izbejat”vashusituatsiu,sorry esli ya vas obidel ;-)



kaif   (2002-06-30 23:53) [7]

> 2 jedi©(30.06.02 20:03)
你是什​​么! 你没有伤害我。
你想让我给出一段代码吗?你告诉我,在提交之前我会做多少次操作?

过程TForm1.Button1Click(Sender:TObject);
开始
Screen.Cursor:= crHourGlass;
用查询做
尝试
如果有效则关闭;
与交易做
如果活跃然后提交;
如果不是db.Connected则db.Connected:= True;

Transaction.StartTransaction;
SQL.Text:=“DELETE FROM TABLE1”;
ExecSQL;
器transaction.commit;

Transaction.StartTransaction;
SQL.Text:=“SELECT COUNT(*)FROM TABLE1”;
打开;
器transaction.commit;

Transaction.StartTransaction;
SQL.Text:=
“INSERT INTO TABLE1(ID,ID2,NAME)”#13 +
“SELECT ID,cast(1 as integer),NAME FROM PROC1(10000)”;
ExecSQL;
器transaction.commit;

最后
Screen.Cursor:= crDefault;
结束;
结束;

这就够了。 你可以自己试试。 我在这段代码中没有看到任何犯罪行为。 如果没有外键,它的效果很好。 如您所见,我使用commit确认每个命令。 我相信这一点 非常琐碎的代码.
我和5一直在IB工作多年。 我非常喜欢这台服务器。 直到我不得不做大规模删除,我没有遇到这个问题。 可惜外国钥匙这么多问题......



jedi   (2002-07-01 00:11) [8]

Transaction.StartTransaction;
SQL.Text:=
“INSERT INTO TABLE1(ID,ID2,NAME)”#13 +
“SELECT ID,cast(1 as integer),NAME FROM PROC1(10000)”;
ExecSQL;
器transaction.commit;

u vas tut proishodit insert na 10000 zapisei,poprobuite posle inserta cajdoi stroki sdelat“commit(nipsat”sql po drugomu);

Hotea na samom dele naverno takoi problemi katoruiu vi naverhu opisali ne doljno voznicat“。
Edinstvennoe 4to eshe mogu poprobovat“posovetovat”tak napisat“pro bug grupe razrabot4ikov Firebird i esli ato destvitel”no bug to vozmojno oni ato delo ispraveat :)。



Alexandr   (2002-07-01 06:48) [9]

2kaif:
1)我可以通过这个故障获得测试底漆吗? 我会查看,如果故障真的在服务器中,我会发送给某人......
2)完全参考无法创建触发器上的参考完整性。 因为触发器在事务的上下文中执行,与ForeignKey不同。



kaif   (2002-07-01 12:36) [10]

> 2 Alexandr©(01.07.02 06:48)
你说的很重要。 触发器是在事务的上下文中执行的吗? 我在论坛上遇到了一个不同的观点,老实说,我从表面上看待它。 我将看看IB文档,但据我记得,这里没有详细介绍它...
你的建议是派一个我非常感兴趣的人,因为我自己无法真正理解如何联系Firebird项目中的人......如果你不介意的话,我现在就把测试样品放在盒子上。
顺便说一句,我试过Yaffils。 这是同样的错误,但表现形式不同。 断开连接时应用程序挂起一点(秒20),然后崩溃并显示消息Windows“程序执行了非法操作......”。 我不知道自己也不喜欢Yaffils - 我有一个尖锐的(3中的时间)工作较慢。 我不知道......我只是有一个非常困难的项目,没有时间进行实验。 我已经解决了Firebird问题。 一般来说,他对我很满意......



Alexandr   (2002-07-01 12:44) [11]

2kaif:
1)等待肥皂......
2)触发器在事务的上下文中执行。 它是一个自然的皮肤,太阳在东方升起,并在西方...
而所有其他意见都是错误的。
3很难与Firebird开发人员沟通,尤其是Yaffil开发人员。 你只需要足够的资格,这样他们就不会认为你是一个愚蠢的人。





Alexandr   (2002-07-01 13:04) [12]

信中的某些东西仍然是静音的......



kaif   (2002-07-01 13:10) [13]

喜欢发送。 如果需要改进示例(使对话框连接到数据库) - 比如说。 这是我自己理解的代码。 如果删除FK(放下约束...),则可以根据需要多次按Insert-Update按钮。 如果存在FK,则在几次这样的会话之后,在SELECT之后断开与数据库的连接将会出现问题。 奇怪的是,如果您在此SELECT之前进行有效性检查,服务器会说基数处于完美的顺序。



kaif   (2002-07-01 13:25) [14]

我正在挖掘文学并动脑筋。 我想是这样的:如果在触发器中可以进行SQL查询(并且可能!),那么,触发器在事务的上下文中执行。 逻辑上它不可能是其他方式。 虽然我一直是一名经验主义者。 但是,您可以检查......
现在该怎么办?...
我不知道。 最后希望我的铁有问题。 虽然不太可能......铁在哪里?
在事务的上下文中进行参照完整性检查与在客户端进行完全相同。 或者甚至更糟......从客户那里,我至少可以开始新的交易。 在触发之前,数据可能会过时......



kaif   (2002-07-01 13:27) [15]

> 2Alexandr
那么,你有没有得到肥皂?



Alexandr   (2002-07-01 13:47) [16]

1)肥皂达到了。
2)我写了一篇关于肥皂的答案。 现在是时候和肥皂谈谈了。
3)程序正在运行。
4)现在我正试图挂起它...虽然尝试不成功。 :)
5)我不是要重载程序,我只是用代码做了一个按钮
db.Connected:= False;
db.Connected:= true;

顺便说一句,我检查了Yaffil Classic Server 819组件。
现在我会试试Firebird ......




kaif   (2002-07-01 14:07) [17]

奇怪的。 我还添加了db.Connected:= False按钮。 在第二次按下Insert-Update之后,我断开了所有连接。 Firebird-1.0.0.796-Win32.exe服务器(在我看来,它的成本是超级服务器)。
这封信还没有收到。 请写信给我ashot@vallex.ru。 其余的盒子现在还没有。



Alexandr   (2002-07-01 14:09) [18]

1)肥皂达到了。
2)我写了一篇关于肥皂的答案。 现在是时候和肥皂谈谈了。
3)程序正在运行。
4)现在我正试图挂起它...虽然尝试不成功。 :)
5)我不是要重载程序,我只是用代码做了一个按钮
db.Connected:= False;
db.Connected:= true;

顺便说一句,我检查了Yaffil Classic Server 819组件。
现在我会试试Firebird ......




kaif   (2002-07-01 14:12) [19]

我试过Yaffil 809(在我看来,也是Superserver)



kaif   (2002-07-01 14:20) [20]

我的印象是,如果至少有一个具有相同基础的连接,则不会发生错误。
断开所有服务器连接,然后重试。



Alexandr   (2002-07-01 14:38) [21]

确定。
真的是最后一次从基座断开的问题。
确实发生了这样的错误 - 也就是说, 由于垃圾收集,后者总是关闭很长时间。
这个错误是已知的,但我不记得了,我修复它或找到了解决它的方法。

另一件事是,很长一段时间,最后一个断开...



剩下的就是明天。



kaif   (2002-07-01 15:06) [22]

2Alexandr©
谢谢你的帮助。 明天见。



Alexandr   (2002-07-02 06:32) [23]

在我看来,交易参数是
读写表稳定性
如果你把一些更简单的东西(我试着读Commited)那么一切都很好......就像。



kaif   (2002-07-02 13:50) [24]

> 2 Alexandr©(02.07.02 06:32)
我用Read Committed开始了实验。 就在那时,这表明了这个错误。 这是我玩交易。 但没有成功。 问题是这不是垃圾收集,因为在这种情况下,与服务器的新连接是不可能的,并且处理器不忙于任何事情。 似乎服务器在“连接计数器”上遇到了某种死胡同,只是等待像WaitForSingleObject这样的函数......或类似的东西。



Alexandr   (2002-07-02 13:58) [25]

什么,你在ReadCommited上有它吗?




kaif   (2002-07-02 14:26) [26]

是。 我刚刚再次检查,使用ReadCommitted重新编译。
1。 从* .gbk恢复了一个空数据库
2。 断开IBConsole。
3。 单击“插入 - 更新10000”。
4。 单击选择
5。 单击“断开连接”
6。 单击“插入 - 更新10000”。
7。 单击选择
8。 单击“断开连接”
9。 挂3分钟///////////////////
10。 单击“插入 - 更新10000”。
11。 单击选择
12。 单击“断开连接”
13。 已经挂5分钟了////////////////////



kaif   (2002-07-02 14:37) [27]

我正在向市场写一个应用程序(替代1C)。 我非常害怕基地的安全。 用户很可能看到,甚至挂在2分钟上。 应用程序,只需使用Ctrl + Alt + Del删除它。 之后,服务器将无法正常工作。 我们必须以同样的方式杀死他。 然后开始。 如果不禁用忽略校验和,则使用200孤立页面还原基不起作用。 经过这样的恢复后,索引变得不正确,很多事情都没有了。 有必要恢复索引。 在大多数情况下,基地只需要被抛弃。
在重新计算注销货物的成本和其他类似任务时,删除和插入数千行的计算是很常见的。
总之,这是汗。
我需要找到一些可靠的出路。
顺便说一下,我已经挂了7分钟//////////
我已经从数据库和创建它的那些地方的程序中删除了所有参照完整性。
如果我找到解决方案,我准备恢复所有这些。
否则,您必须在客户端的单独事务中手动支持它。
----------
你真的不挂在ReadCommitted上吗?
我可以再次更换服务器吗?



kaif   (2002-07-02 14:51) [28]

第三次插入更新后(还记得吗?)
我已经挂了17分钟。



Alexandr   (2002-07-03 06:42) [29]

在肥皂!



Alexandr   (2002-07-03 07:09) [30]

Yaffil SS 819

一切正常,任何地方都没有任何问题。

Firebird 682

挂起继续......

使用Yaffil,男士和头发将变得柔软和丝滑



kaif   (2002-07-03 12:40) [31]

好的。 我今天会尝试下载Yaffil SS 819。 但是怎么说呢? 我最后一次把Yaffil放在Interbase上。 刚刚复制了服务器文件和gds32.dll投入System32(我有NT4)。 但收到了速度显着下降,加上一些错误。 怎么说得对? 有细微之处吗?



kaif   (2002-07-03 12:45) [32]

亚历山大,对不起
RC2和RC3有什么区别?
在下载中:
WIN32构建(超级服务器)
RC3(821)1.5 MB
RC2(800)1.5 MB



kaif   (2002-07-03 12:48) [33]

它也写了
不要忘记更新intl \ gdsintl.dll

这个文件是如何使用的以及由谁使用的?



kaif   (2002-07-03 20:12) [34]

把Yaffilss821。
一切都很完美。
问题被删除了。



Alexandr   (2002-07-04 06:37) [35]

好吧,一旦问题得到解决,我就不会回答......



Страницы: 1 整个分支

论坛:“基地”;
当前存档:2002.07.25;
下载:[xml.tar.bz2];

楼上









内存:0.71 MB
时间:0.065 c
3-81174
NetWanderer
2002-07-04 11:41
2002.07.25
交易可见性问题。


14-81413
谢尔戈
2002-06-26 17:07
2002.07.25
的AVI


1-81250
品牌
2002-07-14 22:40
2002.07.25
从exe-shnik函数DLL调用?


3-81137
ArhAngeL2
2002-07-02 11:39
2002.07.25
运行时索引


3-81186
RDA
2002-07-04 13:12
2002.07.25
DBTreeList и FBPlus проблемы с удалением





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法文
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日本性玩偶 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 泰米尔人 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский