数据库修复命令.sql 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. 修改字段名:alter table tab_info rename column createname to thisname;
  2. 修改字段属性:alter table tab_info alter column thisname varchar(200) not null;
  3. 修改默认值 :alter table tabinfo add constraint df default('嘿嘿') for thisname;
  4. //删除字段 alter table fdi_news drop c_author nvarchar(50)
  5. -------------------------------------------------------------------------------------------
  6. -- 从一个数据库的表复制内容到另一个数据库中
  7. insert into [lyfzdb].[dbo].[dindansp] select * from [lyfzdb].[dbo].[dindansp$]
  8. --设置数据库为单用户:
  9. ALTER DATABASE [dbname] SET SINGLE_USER
  10. --设置数据库为多用户:
  11. ALTER DATABASE [db] SET MULTI_USER
  12. backup database db to disk='D:db.bak'
  13. -- 假如数据库名:lyfzdb 检测数据库是否有错误,用DBCC checkdb('lyfzdb')
  14. DBCC CHECKDB('db')
  15. dbcc dbreindex('dindansp',' ')
  16. -- 假如数据表名:dindansp 检测数据表是否有错误,用DBCC checktable('dindansp')
  17. DBCC CHECKTABLE('dindan')
  18. -- 如果CHECKTABLE带参数,表示对表进行修复;
  19. -- 修复时,需要将数据库设置为单用户模式,修复完设置回多用户模式;
  20. -- 三个修复参数:
  21. -- repair_rebuild:最好的
  22. -- REPAIR_REBUILD:执行由 REPAIR_FAST 执行的所有修复,包括需要较长时间的修复(如重建索引)。执行这些修复时不会有丢失数据的危险。
  23. -- repair_fast
  24. -- REPAIR_FAST :仅为保持向后兼容性而保留。
  25. -- repair_allow_data_loss:这是最无奈的做法,用此参数恢复会丢失数据
  26. -- REPAIR_ALLOW_ DATA_LOSS :尝试修复报告的所有错误。这些修复可能会导致一些数据丢失
  27. ALTER DATABASE [lyfzdb] SET SINGLE_USER
  28. DBCC CHECKTABLE('dindansp',REPAIR_REBUILD)
  29. ALTER DATABASE [lyfzdb] SET MULTI_USER
  30. -- 把数据库设置为紧急状态。
  31. alter database [lyfzdb] set EMERGENCY --可以将数据库设置为紧急状态,此时数据库PVLink的图标改变成粉红色并出现“紧急”字样。
  32. alter database [lyfzdb] set ONLINE --把数据库从紧急状态变成在线状态。
  33. ------------------------------------------------------------------
  34. DBCC CHECKDB('lyfzdb')
  35. DBCC CHECKCATALOG('lyfzdb')
  36. DBCC CHECKTABLE ("MyTable");
  37. use lyfzdb
  38. DBCC CHECKCATALOG('dindansp2')
  39. MyTable的 DBCC 结果。
  40. 消息 8978,级别 16,状态 1,
  41. 第 1 行表错误: 对象 ID 2105058535,
  42. 索引 ID 1,分区 ID 72057594057129984,
  43. 分配单元 ID 72057594061717504 (类型为 In-row data)。
  44. 页 (1:4123189) 缺少上一页 (1:4124391) 对它的引用。
  45. 可能是因为链链接有问题。消息 2533,级别 16,状态 1,
  46. 第 1 行表错误: 看不到分配给对象 ID 2105058535,索引 ID 1,分区 ID 72057594057129984,
  47. 分配单元 ID 72057594061717504 (类型为 In-row data)的页 (1:4124391)。
  48. 该页可能无效,或者页头中可能包含错误的分配单元 ID。
  49. 消息 8976,级别 16,状态 1,
  50. 第 1 行表错误: 对象 ID 2105058535,
  51. 索引 ID 1,分区 ID 72057594057129984,分配单元 ID 72057594061717504 (类型为 In-row data)。
  52. 在扫描过程中未发现页 (1:4124391),但该页的父级 (1:5670805) 和上一页 (1:3416990) 都引用了它。
  53. 请检查以前的错误消息。对象 'MyTable' 的 90654 页中有 4290601 行。
  54. CHECKTABLE 在表 'MyTable' (对象 ID 2105058535)中发现 0 个分配错误和 3 个一致性错误。
  55. 对于由 DBCC CHECKTABLE (Test.dbo.MyTable)发现的错误,repair_allow_data_loss 是最低的修复级别。
  56. DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
  57. 网上找的修复方法为: (但是这种方法会造成数据丢失)
  58. use master
  59. declare @databasename varchar(255)
  60. set @databasename='lyfzdb'
  61. exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户状态
  62. dbcc checkdb(@databasename,REPAIR_ALLOW_DATA_LOSS)
  63. dbcc checkdb(@databasename,REPAIR_REBUILD)
  64. exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态
  65. use master
  66. declare @dbname varchar(255)
  67. set @dbname='lyfzdb'
  68. exec sp_dboption @dbname,'single user','true'
  69. dbcc checktable('需要修复的数据表的名称',REPAIR_ALLOW_DATA_LOSS)
  70. dbcc checktable('需要修复的数据表的名称',REPAIR_REBUILD)
  71. ------把’ 需要修复的数据表的名称’更改为执行DBCC CHECKDB时报错的数据表的名称
  72. exec sp_dboption @dbname,'single user','false'