Chinaunix

标题: 让大家感受一下不停止的bcp [打印本页]

作者: hobbylu    时间: 2010-08-13 10:37
标题: 让大家感受一下不停止的bcp
本帖最后由 hobbylu 于 2010-08-25 10:47 编辑

http://bbs.chinaunix.net/attachm ... talI0a0M2QTgyU1E%3D

环境ASE 12.5.4 WINDOWS
库名test
大小2M
表名pet_goods
dump文件test.dump
步骤:
1 建一个2M的库test,实现方法随便大家
2 load database test from 'test.dump'
3 online database test
4 bcp test..pet_goods out pet_goods.bcp -c -Usa -Pxxxx
你会发现你的bcp一直都不会结束,直到你中断
dbcc checktable(pet_goods)
--------------------------------------
Table Corrupt: Page linkage is not consistent; check the following pages:
(current page#=631;  page# pointing to this page=678; previous page# indicated
in this page=630)
DBCC execution completed. If DBCC printed error messages, contact a user with
System Administrator (SA) role.
--------------------------------------
作者: andkylee    时间: 2010-08-13 14:46
本帖最后由 andkylee 于 2010-08-13 14:50 编辑

1> dbcc pglinkage(5,633,0,2,0,1)
2> go
Object ID for pages in this chain = 32000114.
Page : 633
Page : 634
Page : 635
Page : 636
Page : 637
Page : 638
Page : 639
Page : 624
Page : 625
Page : 626
Page : 627
Page : 628
Page : 629
Page : 630
Page : 631
Page : 672
Page : 673
Page : 674
Page : 675
Page : 676
Page : 677
Page : 678
Page : 631
pprevpg pointer for page 631 does not point to previous page in chain
as scanned.  pprevpg pointer = 630, previous page as scanned = 678.
23 pages scanned.  Object ID = 32000114.  Last page in scan = 631.

DBCC execution completed. If DBCC printed error messages, contact a user with
System Administrator (SA) role.
1>


------------------------------------------------------------------------------


1> dbcc pglinkage(5,679,0,2,0,1)
2> go
Object ID for pages in this chain = 32000114.
Page : 679
Page : 696
Page : 697
Page : 698
Page : 699
Page : 700
Page : 701
Page : 702
Page : 703
Page : 712
Page : 713
Page : 714
Page : 715
Page : 716
Page : 717
Page : 718
Page : 719
Page : 736
Page : 737
Page : 738
Page : 739
Page : 740
Page : 741
Page : 742
Page : 743
Page : 760
Page : 761
Page : 762
Page : 763
Page : 764
Page : 765
Page : 766
Page : 767
Page : 776
Page : 777
Page : 778
Page : 779
Page : 780
Page : 781
Page : 782
Page : 783
Page : 800
Page : 801
Page : 802
Page : 803
Page : 804
Page : 805
Page : 806
Page : 807
Page : 824
Page : 825
Page : 826
Page : 827
Page : 828
Page : 829
Page : 830
Page : 831
Page : 840
Page : 841
Page : 842
Page : 843
Page : 844
Page : 845
Page : 846
Page : 847
Page : 864
Page : 865
Page : 866
Page : 867
Page : 868
Page : 869
Page : 870
Page : 871
Page : 888
Page : 889
Page : 890
Page : 891
Page : 892
End of chain reached.
78 pages scanned.  Object ID = 32000114.  Last page in scan = 892.

DBCC execution completed. If DBCC printed error messages, contact a user with
System Administrator (SA) role.
1>

------------------------------------------------------

qpet
         金皇冠 000209  美国爱诗碧 防过敏椰果香波
                            55.00           0 20100707
qpet
         金皇冠 001343  美国爱诗碧 多用途香波雨林香型
                            55.00           0 20100707
qpet
         金皇冠 600347 雀巢KWBL 宠物香水 除异味 宠物香水200ml
                            12.00          18 20100707
qpet
         金皇冠 006121 美国8in1 杀蚤灭虱香波 473ml
                            50.00           3 20100707
qpet
         金皇冠 600942  日本Toughdog 拖帶连脖圈套装2.5cm TD09B005
                            39.00           1 20100707
qpet
         金皇冠 D00007 日本TinyLove鸡肉绕饼干 800克
                            37.00           3 20100707
qpet
         金皇冠 819175 美国RING 5 Ear Clean高级宠物洗耳水118ml
                            70.00           0 20100707

(2000 rows affected)
1>
2> select count(*) from pet_goods
3> go

-----------
        2000

(1 row affected)
1>
==================================================
手动修改678的页链,使得下一页指向679即可。
作者: andkylee    时间: 2010-08-13 15:07
虽然是一个小小的改动,但是此错误是比较致命的。 表pet_goods的数据一条都读取不出来。
bcp会陷入死循环,select 的时候也是死循环,cpu几乎100%的运行。
作者: hobbylu    时间: 2010-08-13 15:26
真聪明,呵呵
作者: andkylee    时间: 2010-08-13 15:50
回复 4# hobbylu


    呵呵,你更牛! 都能制造错误。
作者: shakeone    时间: 2010-08-13 16:50
本帖最后由 shakeone 于 2010-08-13 16:54 编辑

呵呵,pglinkage这个dbcc命令还是当年我还拓展到sybmon里面过
作者: andkylee    时间: 2010-08-13 19:39
回复 6# shakeone


    拓展到sybmon的意思是,监控服务器能够自动检测页链的情况?

现在sybmon有这个功能吗?
作者: shakeone    时间: 2010-08-13 19:54
回复  shakeone


    拓展到sybmon的意思是,监控服务器能够自动检测页链的情况?

现在sybmon有这个 ...
andkylee 发表于 2010-08-13 19:39



    15.0.2某个esd以后的版本中吧,如果我没记错的话
作者: andkylee    时间: 2010-08-13 20:10
回复 8# shakeone


    好, 我这边有15.0.3的测试环境。有空试试。
作者: hobbylu    时间: 2010-08-13 21:15
首先你必须要了解sybmon是什么东西。我不知道shakeone讲的这个sybmon和sqlsrvr/dataserver -X启动的sybmon是不是一致
作者: shakeone    时间: 2010-08-13 21:19
前面没看清andkylee说的,不是sysmonitor,是sybmon,就是dataserver -X -Pquine,用来观察engine内存状态的
作者: Eisen    时间: 2010-08-17 14:54
本帖最后由 Eisen 于 2010-08-17 16:52 编辑

这个道理倒是简单——可是我想实战起来恐怕真的困难——顶多找到页链断处,后续的正确页面应该是哪一个呢?上面andkylee老兄倒是一试就试出来了,如果是dol表还频繁使用了很久的,这个哪里找的到啊。

hobbylu有什么心得吗?

意外发现你那个工具在老外那里口碑不错啊—— http://froebe.net/blog/2007/02/1 ... -writepagereadpage/
作者: andkylee    时间: 2010-08-17 17:07
这个道理倒是简单——可是我想实战起来恐怕真的困难——顶多找到页链断处,后续的正确页面应该是哪一个呢?上 ...
Eisen 发表于 2010-08-17 14:54



    的确,实战起来很困难。hobbylu的这个例子是因为仅有一个地方页链断裂。
如果apl表的页链有多处断裂,那么很难能够成功的拼接起来。但是,我想或许可以利用业务逻辑上的主键ID的自增性作为参考进行拼接,感觉应该很困难。
但是,换个角度进行思考,为什么非得按照原来的页链顺序进行拼接呢?只要把页链拼接起来,并且能够保证oam页的分配是正确的,那么在select的时候强制不使用索引。个人感觉应该能读取出来数据。


另外对于dol表,除了第一次外ase是不维护dol表的页链的。所以,不存在dol表上的页链断裂的概念。

但是,针对dol表上的页面分配oam页的损坏, 个人感觉修复起来很困难!
作者: hobbylu    时间: 2010-08-20 14:02
对于DOL表,说白了其实也容易。
不过不了解ASE数据结构的人很难明白。

控制DOL表页的,主要由OAM页来进行管理,OAM页存放的该表的页所在的分配页的地址dbcc listoam
其次再根据分配页上记录的信息,来得到相关的EXTEND,dbcc allocdump
然后再得到相关数据。

我讲的很肤浅,我的powersybedit已经实现这方面的功能。最近打算写一个可以展示一个表所在页面位图的工具。如扫雷一样的界面。尚在考虑中。。。
作者: andkylee    时间: 2010-08-20 18:37
本帖最后由 andkylee 于 2010-08-20 18:38 编辑

listoam                                                   allocdump
    objectid----------------------> allocation_page ---------------------------------> allocated_pages

说得比较清楚了。



你说的对象分配位图,主要工作还在前段展示上面。
作者: Eisen    时间: 2010-08-23 10:05
对于DOL表,说白了其实也容易。
不过不了解ASE数据结构的人很难明白。

控制DOL表页的,主要由OAM页来进 ...
hobbylu 发表于 2010-08-20 14:02



    这个关于OAM页的修复的能说得再详细一些吗?谢谢啦
作者: andkylee    时间: 2010-08-23 14:18
看懂allocdump的输出结果,基本就明白了
作者: fromheaven    时间: 2010-10-01 04:49
回复 8# shakeone

好亲切的ID啊~
zs你也开始关注CU的SYBASE版啦~ 我是weiyin。
作者: shakeone    时间: 2010-10-01 10:34
回复  shakeone

好亲切的ID啊~
zs你也开始关注CU的SYBASE版啦~ 我是weiyin。
fromheaven 发表于 2010-10-01 04:49



    是啊,你在百度还好吗?听说满辛苦的
作者: vectorT    时间: 2012-11-17 10:54
回复 4# hobbylu


    hobbylu你好,打扰打扰,呵呵。想向你请教个问题,请问我用sybase数据库时,使用bcp in 后就一直停滞了,这种情况是时而发生,时而不发生的,bcp的数据量并不大,20兆左右。请问这是什么原因导致的呢?
作者: sybman    时间: 2012-11-17 20:14
回复 10# hobbylu


    没错,他说的就是 -X -Pquine的sybmon~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2