dbinfo
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!/usr/local/bin/perl
  2. # Name: dbinfo -- identify berkeley DB version used to create 
  3. #   a database file
  4. #
  5. # Author: Paul Marquess  <Paul.Marquess@btinternet.com>
  6. # Version:  1.03 
  7. # Date 17th September 2000
  8. #
  9. #     Copyright (c) 1998-2001 Paul Marquess. All rights reserved.
  10. #     This program is free software; you can redistribute it and/or
  11. #     modify it under the same terms as Perl itself.
  12. # Todo: Print more stats on a db file, e.g. no of records
  13. #       add log/txn/lock files
  14. use strict ;
  15. my %Data =
  16. (
  17. 0x053162 => {
  18.   Type     => "Btree",
  19.   Versions => 
  20. {
  21.   1 => "Unknown (older than 1.71)",
  22.   2 => "Unknown (older than 1.71)",
  23.   3 => "1.71 -> 1.85, 1.86",
  24.   4 => "Unknown",
  25.   5 => "2.0.0 -> 2.3.0",
  26.   6 => "2.3.1 -> 2.7.7",
  27.   7 => "3.0.x",
  28.   8 => "3.1.x or greater",
  29. }
  30. },
  31. 0x061561 =>  {
  32.   Type     => "Hash",
  33.   Versions =>
  34. {
  35.   1 => "Unknown (older than 1.71)",
  36.            2     => "1.71 -> 1.85",
  37.            3     => "1.86",
  38.            4     => "2.0.0 -> 2.1.0",
  39.            5     => "2.2.6 -> 2.7.7",
  40.            6     => "3.0.x",
  41.            7     => "3.1.x or greater",
  42. }
  43. },
  44. 0x042253 =>  {
  45.   Type     => "Queue",
  46.   Versions =>
  47. {
  48.   1 => "3.0.x",
  49.   2 => "3.1.x",
  50.   3 => "3.2.x or greater",
  51. }
  52. },
  53. ) ;
  54. die "Usage: dbinfo filen" unless @ARGV == 1 ;
  55. print "testing file $ARGV[0]...nn" ;
  56. open (F, "<$ARGV[0]") or die "Cannot open file $ARGV[0]: $!n" ;
  57. my $buff ;
  58. read F, $buff, 20 ;
  59. my (@info) = unpack("NNNNN", $buff) ;
  60. my (@info1) = unpack("VVVVV", $buff) ;
  61. my ($magic, $version, $endian) ;
  62. if ($Data{$info[0]}) # first try DB 1.x format
  63. {
  64.     $magic = $info[0] ;
  65.     $version = $info[1] ;
  66.     $endian  = "Unknown" ;
  67. }
  68. elsif ($Data{$info[3]}) # next DB 2.x big endian
  69. {
  70.     $magic = $info[3] ;
  71.     $version = $info[4] ;
  72.     $endian  = "Big Endian" ;
  73. }
  74. elsif ($Data{$info1[3]}) # next DB 2.x little endian
  75. {
  76.     $magic = $info1[3] ;
  77.     $version = $info1[4] ;
  78.     $endian  = "Little Endian" ;
  79. }
  80. else
  81.   { die "not a Berkeley DB database file.n" }
  82. my $type = $Data{$magic} ;
  83. $magic = sprintf "%06X", $magic ;
  84. my $ver_string = "Unknown" ;
  85. $ver_string = $type->{Versions}{$version}
  86. if defined $type->{Versions}{$version} ;
  87. print <<EOM ;
  88. File Type: Berkeley DB $type->{Type} file.
  89. File Version ID: $version
  90. Built with Berkeley DB: $ver_string
  91. Byte Order: $endian
  92. Magic: $magic
  93. EOM
  94. close F ;
  95. exit ;