数据库检测工具

sdbdmsdump 是 SequoiaDB 巨杉数据库的数据文件检查工具,用于检测数据库文件结构的正确性,并且给出检测结果报告。

Note:

sdbdmsdump 在 1.8 版本前名为 sdbinspt,1.8 版本后更名为 sdbdmsdump。

运行需求

  • sdbdmsdump 不需要与数据库连接。
  • 运行 sdbdmsdump 命令的用户必须对数据库的数据与索引文件拥有读权限。

语法规则

  1. sdbdmsdump <--action | -a arg>[--dbpath | -d arg][--verbose | -v arg][ --dumpdata |-t arg][--dumpindex | -i arg][--dumplob | -b arg][--record | -p arg]
  2. sdbdmsdump <--action | -a arg>[--dbpath | -d arg][--output | -o arg][--verbose | -v arg][ --csname | -c arg][--dumpdata | -t arg]
  3. sdbdmsdump <--action | -a arg> [--dbpath | -d arg][--indexpath | -x arg][--output | -o arg] [--verbose | -v arg][ --csname | -c arg] [--dumpindex | -i arg]
  4. sdbdmsdump <--action | -a arg>[--dbpath | -d arg][ --dumpdata |-t arg]
  5. sdbdmsdump --help | -h
  6. sdbdmsdump --version | -v

参数说明

参数名缩写描述
—help-h返回基本帮助和用法文本
—dbpath-d指定数据库文件所在目录,默认为当前目录
—indexpath-x指定索引文件所在目录,默认为 dbpath
—lobpath-g指定 Lob 文件所在目录,默认为 dbpath
—lobmpath-m指定 Lob Meta 文件所在目录,默认为 dbpath
—output-o指定输出文件,默认为屏幕输出
—verbose-v是否进行 ASCII 文本输出(取值为 true 或者 false),默认值为 true,进行 ASCII 文本输出
—csname-c指定集合空间名,如果不指定则为全部集合空间
—clname-l指定集合名,如果不指定则为全部集合
—action-a指定操作,必须指定值,但不能和 repair 同时使用,取值列表如下:
“inspect”:检测并报告任何数据损坏
“dump”:将数据页格式化并输出
“all”:检测数据页损坏,并格式化输出数据页
—dumpdata-t指定操作数据文件(取值为 true 或 false),默认值为 false
—dumpindex-i指定操作数据文件(取值为 true 或 false),默认值为 false
—dumplob-b指定操作 Lob 文件(取值为 true 或者 false),默认值为 false
—pagestart-s指定起始数据页,默认为 -1
—numpage-n指定需要检测或格式化的数据页数量,默认值为 1;当指定 -s 参数为非负值时,该参数生效
—record-p指定显示格式化输出数据或索引内容(取值为 true 或 false),默认值为 false
—balance开启 Lob 桶均衡性分析(取值为 true 或 false),默认值为 false;当 action 参数指定为 inspect 时,该参数生效
—meta指定操作元数据(取值为 true 或 fasle ),默认值为 false
—force强制输出无效的 mb 、delete list 与 index list 等(取值为 true 或 false),默认值为 false

示例

  • sdbdmsdump 在当前目录下检测所有集合空间和集合的文件结构,格式化输出数据和索引文件的检测结果至 output.txt 文件

    1. $ sdbdmsdump -d . -o output.txt -v true -a all -t true -i true -b true -p true
  • 指定数据文件目录 /opt/sequoiadb/database/data/11830,指定操作为“inspect”检测并报告数据损坏信息,格式化输出集合空间 sample 的数据文件检测结果至 outputdata.txt 文件

    1. $ sdbdmsdump -d /opt/sequoiadb/database/data/11830 -o outputdata.txt -v true -c sample -a inspect -t true

    生成结果文件 outputdata.txt,记录集合空间 sample 数据文件中 Header 段、SME 空间段、MME 元数据管理段、数据段等结构检测结果信息,以及该集合空间下所有集合数据信息(如记录总数、使用数据页、溢出记录数、压缩记录数等),数据无损坏则检测结果记录为 “without Error” ,显示内容可能如下:

    1. Inspect collection space ./sample.1.data
    2. Inspect Storage Unit Header: sample
    3. Inspect Storage Unit Header Done without Error
    4. Inspect Space Management Extent:
    5. Inspect Space Management Extent Done without Error
    6. Inspect Metadata Management Extent:
    7. Inspect Metadata Management Extent Done
    8. Inspect Data for collection [0 : employee]
    9. ****The collection data info****
    10. Total Record : 300000
    11. Total Data Pages : 1180
    12. Total Data Free Space : 41296
    13. Total OVF Record : 0
    14. Total Compressed Record: 84317
    15. Inspect Space Management Extent:
    16. Inspect Space Management Extent Done without Error
  • 指定索引文件目录 /opt/sequoiadb/database/data/11830,指定操作为“inspect”检测并报告数据损坏信息,输出集合空间 sample 的索引数据检测结果至 outputindex.txt 文件

    1. $ sdbdmsdump -d /opt/sequoiadb/database/data/11830 -x /opt/sequoiadb/database/data/11830 -o outputindex.txt -v true -c sample -a inspect -i true

    生成结果文件 outputindex.txt,记录集合空间 sample 索引文件中 Header 段、SME 空间管理段、数据段检测结果,以及该集合空间下所有集合的索引信息(如索引页、索引空闲空间、唯一索引个数等),无损坏则检查结果记录为 “without Error” ,显示内容可能如下:

    1. Inspect collection space /opt/sequoiadb/database/data/11830/sample.1.idx
    2. Inspect Storage Unit Header: sample
    3. Inspect Storage Unit Header Done without Error
    4. Inspect Space Management Extent:
    5. Inspect Space Management Extent Done without Error
    6. Inspect Metadata Management Extent:
    7. Inspect Metadata Management Extent Done
    8. Inspect Index for collection [0 : employee]
    9. Inspect Index Control Block Extent
    10. Inspect Index Control Block Extent Done without Error
    11. ****The collection index info****
    12. Total Index Pages : 4
    13. Total Index Free Space : 125630
    14. Unique Index Number : 1
  • 指定数据文件目录 /opt/sequoiadb/database/data/11830,指定集合空间 sample 设定操作数据文件,指定操作为“dump”将数据页格式化并输出至 outputdump.txt 文件

    1. $ sdbdmsdump -d /opt/sequoiadb/database/data/11830 -o outputdump.txt -v true -c sample -a dump -t true

    生成结果文件 outputdump.txt,记录集合空间 sample 数据文件中 Header 段、SME 空间管理段、MME 元数据管理段和数据段存储结构信息,首先在输出的头部写入命令参数

    1. Run Options :
    2. Database Path : /opt/sequoiadb/database/data/11830
    3. Index path : /opt/sequoiadb/database/data/11830
    4. Lobm path : /opt/sequoiadb/database/data/11830
    5. Lob path : /opt/sequoiadb/database/data/11830
    6. Output File : outputdump.txt
    7. Verbose : True
    8. CS Name : sample
    9. CL Name : {all}
    10. Action : dump
    11. Repaire :
    12. Dump Options :
    13. Dump Data : True
    14. Dump Index : False
    15. Dump Lob : False
    16. Start Page : -1
    17. Num Pages : 1
    18. Show record: False
    19. Only Meta : False
    20. Balance : False
    21. force : False

    Header 段记录集合空间名与存储单元头的格式化内容,根据用户选择 verbose,输出可视化的格式化结果(相似内容以“……”省略)

    1. Dump collection space /opt/sequoiadb/database/data/11830/sample.1.data
    2. Storage Unit Header Dump:
    3. 0x0000000000000000 : 5344 4244 4154 4100 0300 0000 0000 0100 SDBDATA.........
    4. 0x0000000000000010 : 4109 0000 7465 7374 0000 0000 0000 0000 A...sample......
    5. 0x0000000000000020 : 0000 0000 0000 0000 0000 0000 0000 0000 ................
    6. *……
    7. *
    8. Eye Catcher : SDBDATA
    9. Version : 3
    10. Page Size : 65536
    11. Total Size : 2369
    12. SU Name : sample
    13. CS Unique ID: 376
    14. Sequence : 1
    15. Num of Col : 2
    16. HWM of Col : 2
    17. Page Num : 2048
    18. Secret value: 0x5c8a050f5c19b9e6 (6668147761803278822)
    19. Lob Page Sz : 262144
    20. Lob Flag : 0
    21. Commit Flag : 1
    22. Commit LSN : 0x00000000c5744ed8 (3312733912)
    23. Commit Time : 2019-03-14-16.04.29.987000 (1552550669987)

    格式化输出 SME 段可视化结果,显示这个存储单元中已经被占用和未被占用的数据页(0 表示该数据页空闲,1 表示数据页被使用)

    1. Space Management Extent Dump:
    2. 0000000000 - 0000001250 [ 0x01 (Occupied) ]
    3. 0000001251 - 0134217727 [ 0x00 (Free) ]
    4. Total: 134217728, Allocated: 2048, Used: 1251
    5. Has errors: FALSE

    最后输出 MME 段格式化数据,在 MME 中首先对该集合空间中每个集合打印其 1024 字节的裸元数据,同时输出格式化数据

    1. Metadata Management Extent Dump:
    2. 0x0000000000000000 : 6261 7200 0000 0000 0000 0000 0000 0000 employee........
    3. 0x0000000000000010 : 0000 0000 0000 0000 0000 0000 0000 0000 ................
    4. *
    5. 0x0000000000000080 : 0100 0000 0900 0000 1102 0000 0200 0000 ................
    6. 0x0000000000000090 : FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ................
    7. 0x00000000000000A0 : FFFF FFFF FFFF FFFF 1002 0000 24FF 0000 ............$...
    8. 0x00000000000000B0 : 0900 0000 E8FE 0000 FFFF FFFF FFFF FFFF ................
    9. 0x00000000000000C0 : FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ................
    10. 0x00000000000000D0 : FFFF FFFF FFFF FFFF 1102 0000 50D3 0000 ............P...
    11. 0x00000000000000E0 : FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ................
    12. *
    13. 0x0000000000000130 : 0000 0000 0200 0000 FFFF FFFF FFFF FFFF ................
    14. 0x0000000000000140 : FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ................
    15. *
    16. 0x0000000000000230 : 0000 0000 0200 0000 0000 0000 FFFF FFFF ................
    17. 0x0000000000000240 : FFFF FFFF 0000 0000 A086 0100 0000 0000 ................
    18. 0x0000000000000250 : 0902 0000 6100 0000 CCEB 0100 0000 0000 ....a...........
    19. 0x0000000000000260 : 7592 0C00 0000 0000 0000 0000 FFFF FFFF u...............
    20. 0x0000000000000270 : FFFF FFFF FFFF FFFF 00FF 6401 0000 0000 ..........d.....
    21. 0x0000000000000280 : 0000 0000 3ACF B801 0000 0000 3ACF B801 ....:.......:...
    22. 0x0000000000000290 : 0000 0000 0000 0000 0000 0000 0000 0000 ................
    23. 0x00000000000002A0 : 0000 0000 0100 0000 104D C9BE 0000 0000 .........M......
    24. 0x00000000000002B0 : 661B 0980 6901 0000 0100 0000 0083 C2BC f...i...........
    25. 0x00000000000002C0 : 0000 0000 671B 0980 6901 0000 0000 0000 ....g...i.......
    26. 0x00000000000002D0 : FFFF FFFF FFFF FFFF 0000 0000 0000 0000 ................
    27. 0x00000000000002E0 : FFFF FFFF 0100 0000 1C09 0000 0000 0000 ................
    28. 0x00000000000002F0 : 0000 0000 0000 0000 0000 0000 0000 0000 ................
    29. *
    30. Collection name : employee
    31. CL Unique ID : 10015863734273
    32. Flag : 0x0001 (Used)
    33. Attributes : 0x0000 ()
    34. Collection ID : 0
    35. First extent ID : 0x00000009 (9)
    36. Last extent ID : 0x00000211 (529)
    37. Logical ID : 0x00000000 (0)
    38. Index HWM : 2
    39. Number of indexes : 2
    40. First Load ExtID : 0xffffffff (-1)
    41. Last Load ExtID : 0xffffffff (-1)
    42. Expand extent ID : 0x00000000 (0)
    43. Total records : 100000
    44. Total lobs : 0
    45. Total data pages : 521
    46. Total data free sp: 125900
    47. Total index pages : 97
    48. Total idx free sp : 823925
    49. Total lob pages : 0
    50. Total org data len: 28888890
    51. total data len : 28888890
    52. Dict extent ID : 0xffffffff (-1)
    53. New Dict extent ID: 0xffffffff (-1)
    54. Dict stat page ID : 0xffffffff (-1)
    55. Dictionary version: 0
    56. Compression Type : 0xff (none)
    57. Last comp ratio : 100
    58. Data Commit Flag : 1
    59. Data Commit LSN : 0x00000000bec94d10 (3200863504)
    60. Data Commit Time : 2019-03-15-14.27.54.342000 (1552631274342)
    61. Idx Commit Flag : 1
    62. Idx Commit LSN : 0x00000000bcc28300 (3166864128)
    63. Idx Commit Time : 2019-03-15-14.27.54.343000 (1552631274343)
    64. Lob Commit Flag : 0
    65. Lob Commit LSN : 0xffffffffffffffff (-1)
    66. Lob Commit Time : 1970-01-01-08.00.00.000000 (0)
    67. Extend option extent ID: 0xffffffff (-1)
    68. Deleted list :
    69. 256 : 00000210 0000ff24
    70. 512 : 00000009 0000fee8
    71. 16K : 00000211 0000d350
    72. Index extent:
    73. 0 : 0x00000000
    74. 1 : 0x00000002

    对于该集合空间中的每个集合,格式化其元数据块和数据块与索引块(由于数据量较大,部分内容以“……”省略)

    1. Dump Meta Extent for Collection [0]
    2. ExtentID: 0x00000000 (0)
    3. 0x0000000000000000 : 4D45 0900 0000 0101 0000 0100 0100 0000 ME..............
    4. 0x0000000000000010 : 0900 0000 1102 0000 FFFF FFFF FFFF FFFF ................
    5. 0x0000000000000020 : FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ................
    6. *
    7. 0x0000000000080010 : 0000 0000 0000 0000 0000 0000 0000 0000 ................
    8. *
    9. Meta Extent Header :
    10. Eye Catcher : ME
    11. Extent Size : 9
    12. CollectionID : 0
    13. Flag : 0x01 (InUse)
    14. Version : 1
    15. Segment num : 65536
    16. Used seg num : 1
    17. Segment extent info :
    18. 0 : [0x00000009, 0x00000211]
    19. Used segment num: 1, has error: FALSE
    20. Dump Data for Collection [0]
    21. ExtentID: 0x00000009 (9)
    22. 0x0000000000000000 : 4445 0100 0000 0101 0000 0000 FFFF FFFF DE..............
    23. 0x0000000000000010 : 0A00 0000 C100 0000 2400 0000 94FD 0000 ........$.......
    24. 0x0000000000000020 : 1801 0000 004F 0100 2400 0000 FFFF FFFF .....O..$.......
    25. 0x0000000000000030 : 7401 0000 1D01 0000 075F 6964 005C 8B45 t........_id.\.E
    26. 0x0000000000000040 : 8063 6827 1E68 4E33 AA10 6100 0000 0000 .ch'.hN3..a.....
    27. 0x0000000000000050 : 1062 0000 0000 0002 6300 F200 0000 7364 .b......c.....sd
    28. 0x0000000000000060 : 6761 7364 6773 6161 6173 6467 6767 6767 gasdgsaaasdggggg
    29. 0x0000000000000070 : 6767 6767 6767 6767 6767 6767 6767 6767 gggggggggggggggg
    30. *
    31. 0x0000000000000140 : 6767 6767 6767 6767 6767 6767 6767 3000 gggggggggggggg0.
    32. 0x0000000000000150 : 0000 0000 0000 0000 0000 0000 0000 0000 ................
    33. *
    34. ……
    35. Data Extent Header:
    36. Eye Catcher : DE
    37. Extent Size : 1
    38. CollectionID : 0
    39. Flag : 0x01 (InUse)
    40. Version : 1
    41. Logic ID : 13
    42. PrevExtent : 0x00000015 (21)
    43. NextExtent : 0x00000017 (23)
    44. Record Count : 192
    45. First Record : 0x00000024 (36)
    46. Last Record : 0x0000fdd0 (64976)
    47. Free Space : 220
    48. ExtentID: 0x00000017 (23)
    49. 0x0000000000000000 : 4445 0100 0000 0101 0E00 0000 1600 0000 DE..............
    50. 0x0000000000000010 : 1800 0000 C000 0000 2400 0000 D0FD 0000 ........$.......
    51. 0x0000000000000020 : DC00 0000 0053 0100 2400 0000 FFFF FFFF .....S..$.......
    52. 0x0000000000000030 : 7801 0000 2001 0000 075F 6964 005C 8B45 x... ...._id.\.E
    53. 0x0000000000000040 : 8263 6827 1E68 4E3E 2B10 6100 810A 0000 .ch'.hN>+.a.....
    54. 0x0000000000000050 : 1062 0081 0A00 0002 6300 F500 0000 7364 .b......c.....sd
    55. 0x0000000000000060 : 6761 7364 6773 6161 6173 6467 6767 6767 gasdgsaaasdggggg
    56. 0x0000000000000070 : 6767 6767 6767 6767 6767 6767 6767 6767 gggggggggggggggg
    57. ……
  • 指定索引文件目录 /opt/sequoiadb/database/data/11830,指定集合空间 sample 设定操作索引文件,指定操作为“dump”将索引数据页格式化并输出至 indexdump.txt 文件

    1. $ sdbdmsdump -d /opt/sequoiadb/database/data/11830 -x /opt/sequoiadb/database/data/11830 -o indexdump.txt -v true -c sample -a dump -i true

    生成结果文件 indexdump.txt,记录集合空间 sample 索引文件中 Header 段、SME 空间管理段、数据段存储结构信息,输出格式化信息和前一个示例中数据文件格式化信息类似,该集合空间每个集合的索引都有一个固定的索引控制块,通过该控制块可以知道索引的定义,输出内容如下:

    1. Dump Index Def for Collection [0]
    2. Index [ 0 ] : 0x00000000
    3. 0x0000000000000000 : 4943 0000 0000 0101 0000 0000 0500 0000 IC..............
    4. 0x0000000000000010 : FFFF FFFF 0100 0000 0000 0000 5200 0000 ............R...
    5. 0x0000000000000020 : 075F 6964 005C 8B45 7973 CE93 6736 B8E3 ._id.\.Eys..g6..
    6. 0x0000000000000030 : DB03 6B65 7900 0E00 0000 105F 6964 0001 ..key......_id..
    7. 0x0000000000000040 : 0000 0000 026E 616D 6500 0400 0000 2469 .....name.....$i
    8. 0x0000000000000050 : 6400 0875 6E69 7175 6500 0110 7600 0000 d..unique...v...
    9. 0x0000000000000060 : 0000 0865 6E66 6F72 6365 6400 0100 0000 ...enforced.....
    10. 0x0000000000000070 : 0000 0000 0000 0000 0000 0000 0000 0000 ................
    11. *
    12. Eye Catcher : IC
    13. Index Flags : 0 (Normal)
    14. CollectionID : 0
    15. Flag : 0x01 (InUse)
    16. Version : 1
    17. Logical ID : 0
    18. Root Ext : 0x00000005 (5)
    19. Scan extent LID : 0xffffffff (-1)
    20. Type : 1 (Positive)
    21. Index Def : { "_id": { "$oid": "5c8b457973ce936736b8e3db" }, "key": { "_id": 1 }, "name": "$id", "unique": true, "v": 0, "enforced": true }
    22. Index [ 1 ] : 0x00000002
    23. 0x0000000000000000 : 4943 0000 0000 0101 0100 0000 0700 0000 IC..............
    24. 0x0000000000000010 : FFFF FFFF 0100 0000 0000 0000 3F00 0000 ............?...
    25. 0x0000000000000020 : 075F 6964 005C 8B45 7873 CE93 7236 B8E3 ._id.\.Exs..r6..
    26. 0x0000000000000030 : E303 6B65 7900 0C00 0000 1061 0001 0000 ..key......a....
    27. 0x0000000000000040 : 0000 026E 616D 6500 0700 0000 2473 6861 ...name.....$sha
    28. 0x0000000000000050 : 7264 0010 7600 0000 0000 0000 0000 0000 rd..v...........
    29. 0x0000000000000060 : 0000 0000 0000 0000 0000 0000 0000 0000 ................
    30. *

    索引页则类似如下(由于数据量较大,相似内容以“……”省略):

    1. Index Dump for Collection [00], Index [00]
    2. Dump Index Page 5:
    3. 0x0000000000000000 : 4945 3100 0000 0100 FFFF FFFF 82FD 5EFA IE1...........^.
    4. 0x0000000000000010 : 6000 0000 0100 0000 1300 0000 E494 0000 `...............
    5. 0x0000000000000020 : F2FF 0000 0400 0000 1E00 0000 4C2D 0000 ............L-..
    6. 0x0000000000000030 : E5FF 0000 0800 0000 2800 0000 B4C4 0000 ........(.......
    7. 0x0000000000000040 : D8FF 0000 0A00 0000 3300 0000 1C5D 0000 ........3....]..
    8. 0x0000000000000050 : CBFF 0000 0C00 0000 3D00 0000 84F4 0000 ........=.......
    9. 0x0000000000000060 : BEFF 0000 0E00 0000 4800 0000 EC8C 0000 ........H.......
    10. 0x0000000000000070 : B1FF 0000 1000 0000 5300 0000 5425 0000 ........S...T%..
    11. 0x0000000000000080 : A4FF 0000 1200 0000 5D00 0000 BCBC 0000 ........].......
    12. 0x0000000000000090 : 97FF 0000 1300 0000 6800 0000 2455 0000 ........h...$U..
    13. ……
    14. Index Extent Header:
    15. Eye Catcher : IE
    16. Total Keys : 49
    17. CollectionID : 0
    18. Flag : 0x01 (InUse)
    19. Version : 0
    20. Parent Ext : 0xffffffff (-1) (root)
    21. Free Offset : 0x0000fd82 (64898)
    22. Total Free : 0x0000fa5e (64094)
    23. Right Child : 0x00000060 (96)
    24. Dump Index Page 1:
    25. 0x0000000000000000 : 4945 F107 0000 0100 0500 0000 C298 9E19 IE..............
    26. 0x0000000000000010 : FFFF FFFF FFFF FFFF 0900 0000 2400 0000 ............$...
    27. 0x0000000000000020 : F2FF 0000 FFFF FFFF 0900 0000 7401 0000 ............t...
    28. 0x0000000000000030 : E5FF 0000 FFFF FFFF 0900 0000 C402 0000 ................
    29. ……