服装ERP论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 149|回复: 0
打印 上一主题 下一主题

[知识库] sql数据库修复

[复制链接]
跳转到指定楼层
楼主
发表于 2018-12-10 09:48:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,享用更多功能,结交更多好友,让你轻松玩转服装管理软件。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 heilin 于 2018-12-10 09:50 编辑
. M* L: _. r, [+ d/ i* g& e8 V, i; L# B9 ~' ?2 ]) G$ m
验证数据库一致性:8 k% `% B3 W$ b$ t* _
# D/ [% Z/ ]$ H
dbcc checkdb('test')
9 n3 u! \1 M3 f- a* E# C2 a5 v7 ]" G+ }* F+ h8 D

. f) a3 E# p5 n( J; E" Z3 V% w7 t
- B/ R3 G" G+ N* ?& l! a) C尝试修复数据库的一致性错误:! \( t5 ?% ~5 R: F
use master
7 c) z5 M+ |; P3 u+ |; q, k( C
. `& `& |9 a- N4 H& O: Mdeclare @databasename varchar(255)' ]3 S# `* v' }# _+ l9 ~8 ?+ n
- F6 q' b' b; n8 g) z2 E3 x
set @databasename= '需要修复的数据库实体的名称'1 Q! k( d7 m2 W3 l2 p1 `

6 M7 ]" ?4 a) Y0 }6 hexec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态
8 ]/ x& ?$ O# U
( w3 S3 q+ m1 i) tdbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
* Y9 o- ~1 J  E' ]# d; m- _
" ?! x4 V5 n: T! ]- t; M7 Qdbcc checkdb(@databasename,REPAIR_REBUILD)
) r  K0 B* o0 ]- j1 g: }; }6 S4 G" {  V# s( `" T! u7 k
exec sp_dboption @databasename, N'single', N'false'
2 r9 o9 I) `" m0 U0 R, b' o; T
可能会有如下提示:2 V. f# X( M9 V8 J1 y
服务器: 消息 1505,级别 16,状态 1,行 1* V4 ?4 d& h3 I
CREATE UNIQUE INDEX 终止,因为发现了索引 ID 1 的重复键。最重要的主键为 '1000000236'。- X  ^/ F2 }+ l4 w& X: l: V
6 D+ k, ]( f+ K" Q( F
; H2 @" z7 i4 y% o5 ]
9 V9 r: d. \/ N0 m* p
. e  p. U# s( r' C* n5 l& ?5 X9 N
--select表(部分)内容时提示:1 G& e9 d" j2 ], \" O0 s7 D! h
服务器: 消息 8908,级别 22,状态 6,行 1
2 m6 n2 S! x$ }% E  ?表错误: 数据库 ID 15,对象 ID 324912229,索引 ID 0。链的链接不匹配。(1:34063)->next = (1:33983),但 (1:33983)->prev = (1:32614)。
9 J) M( r' {5 l2 ]9 l  H6 \7 O0 }) o
连接中断
7 c, S; H8 B! K5 F9 y
) w4 q( I, }! t4 `, K* E3 ?出现这样提示,说明文件有无法修复的地方# y2 v" t7 z* g) l- k- L

) [7 b4 F1 |  |4 Y* i) J  o可尝试用BCP将表导出到txt文档的方法. n2 B7 t. _5 D; U  @# d

, {8 R8 Y, `。 s" _  I, \--BCP的用法如下:
' V" X5 s0 A/ p3 Q, l* ^exec master..xp_cmdshell 'BCP 数据库名..表名 out d:\a.txt -c -U"sa" -P"密码"'
- M2 k3 `' u% T& _& a--导出数据. V8 ~3 X) o) f8 }* F# {. ^3 t

9 B. S; i2 G' C& R--利用备份还原功能,创建一个新的数据库
) P( ~9 p; i+ E! ~8 W0 A' F( d. [--用Drop table将无法select的表删了,重新建表2 x/ q& J- ^: E- I$ N
--要知道是哪张表出问题就要看对该数据库的熟悉程度了,可以每个表都select一次9 E6 W) o! {1 C" p, h' z0 D) a4 j, K

0 Z  {* s4 r( z; l9 M9 gexec master..xp_cmdshell 'BCP 数据库名..表名 out d:\a.txt -c -U"sa" -P"密码"'. g, }3 |4 q7 f  @4 Z
--导入数据7 U2 ]% d5 ]- @* ?% s6 W
) G: ~( q6 \1 M( v( ]- x* l
--其中exec master..xp_cmdshell是master数据库中的一个存储过程. c( j7 P: z0 g5 y9 L* ^
: f: c7 m  e& H6 t& e( a0 t" O
--BCP为保留字4 [6 k; B9 w0 l& S

8 n2 m" |# l* L' ^( S) r, X1 J2 [--l数据库名..表名这个是指定要输出的数据库的表
0 f* h- S5 X& \1 X5 r
1 _' @0 C- G% p: F3 M5 H--in是方式,有out(输出)、in(导入)、queryout、format四种
, y) v! L' V8 t6 R6 Y# h+ T! A9 I! S3 ?
--d:\a.txt是目标文件. h8 e# u# t# j8 g$ W
7 h! |9 r. o" r  U9 H6 E( `
-- -c这个未知,记住一定要小些,后面的参数也一定分大小写的- l7 I5 n, O6 b5 ?
0 J8 T( q4 n6 {
-- -U"sa"数据库登录名
+ \( o( t1 [! v
7 Y4 [$ L2 M$ O-- -P"密码"数据库登录名的密码
3 G  B" a0 ^+ E5 z, G2 {# w  H$ V$ m$ ^% x7 V

: [3 o" D- q% }, {8 _
& S- V, m( q" [6 z
7 B8 z: l; J3 U2 D
3 p. d* R6 o* G  Q6 G: M5 X
+ v$ A. ?5 S# w$ e
0 v6 N- Y6 O. e/ n
3 g" F, r/ i% ?( V
: P  p! n4 u" z& z1 U7 o/ E" K* R ' f% z3 C- `/ V) F# u1 b
/ a7 W0 |+ g4 a- A% p
# N$ X' r8 D8 P8 f) q1 G  _  E
- r) \% W6 Z# z

7 {) l5 {9 e4 x5 U6 l5 y% ^1 J9 V* f2 E7 f, s1 r
有些硬盘有坏道导致文件无法复制的6 }% {7 J4 H9 P$ H# a
4 G( D* B( |3 H/ D
badcopy文件分段复制后重新组合。
. a& L; u, g4 Z. W5 i3 k$ V% }- a0 p/ H3 O5 X
Recovery Toolbox for SQL Server将数据库里的表记录以插入语句保存到文本中。" ]" \% ^0 Y3 \! F
分享到:  微信微信
收藏收藏 分享淘帖 赞 踩
服装ERP论坛,非软件官方技术交流论坛 0769ec.com www.erplt.net www.csolt.com
回复
更多

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

网站声明|手机版|小黑屋|Archiver|服装ERP论坛分分pk10 ( ) 

GMT+8, 2019-5-19 20:17 , Processed in 0.081975 second(s), 22 queries , Gzip On.

Powered by X3.4

© 2001-2017

快速回复 返回顶部 返回列表