[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] [分享]数据库置疑-批处理修复

公司做用siss软件,很多客户的数据库经常置疑,而处理流程就是这么一条,隧做成熟悉的bat..
另外还做了一个BCP修复数据的批处理,考虑到连接数据库有用到密码[机密]就赞不透露了。
从这个批处理可以看出bat的应用可以无所不在..

不涉及版权,欢迎修改以满足个人所需。
  1. @echo off & setlocal ENABLEEXTENSIONS
  2. ::此版传递参数版本
  3. ::数据库置疑批处理sql2000
  4. ::数据无误也可以用此批处理,可达到缩减日志的作用
  5. ::Made By [CDKLD]-006
  6. ::0:45 2010-10-29
  7. ::使用前提,SQL2000已经安装-Path在默认路径里了-切安装目录为D:\Program Files\Mircro~1\mssql\data\
  8. title siss软件-数据库置疑-快速修复 Made By [CDKLD]-006
  9. color 0a
  10. :start
  11. cls
  12. set /p your_database=请输入需要处理的[置疑的数据库名]:
  13. if /i "%your_database%" equ "" goto :out
  14. if not exist "D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_data.mdf" goto :not_exist_database
  15. call :down_Server
  16. dir /ad %SystemDrive%\my_backup >nul 2>nul||md %SystemDrive%\my_backup 2>nul
  17. echo 备份用目录为[%SystemDrive%\my_backup]
  18. echo.
  19. echo 备份数据库中...时间长短由所备份的【%your_database%】数据库大小决定。
  20. if exist "D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_data.mdf" copy /y "D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_data.mdf" "%SystemDrive%\my_backup\%your_database%_data%date:~0,10%.mdf"
  21. if exist "D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_log.ldf" copy /y "D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_log.ldf" "%SystemDrive%\my_backup\%your_database%_log%date:~0,10%.ldf"
  22. call :up_Server
  23. echo -------备份【%your_database%】成功,任意键-放心进入数据库修复操作!-------
  24. pause>nul
  25. cls
  26. echo 置疑数据库【%your_database%】的修复工作已经开始...
  27. isql -H. -E -Q "drop database %your_database%"
  28. call :down_Server
  29. del /a /q /f "D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_data.mdf" 2>nul
  30. if exist "D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_log.ldf" del /a /q /f "D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_log.ldf"
  31. call :up_Server
  32. echo 即将创建新-原同名数据库【%your_database%】...&ping 127.1 -n 3 >nul 2>nul
  33. isql -H. -E -Q "create database %your_database% on (name='%your_database%_data',filename='D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_data.mdf',size=10,filegrowth=5)log on(name='%your_database%_log',filename='D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_log.ldf',size=1,filegrowth=1)"
  34. call :down_Server
  35. if exist "D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_log.ldf" del /a/q/f "D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_log.ldf"
  36. copy /y "%SystemDrive%\my_backup\%your_database%_data%date:~0,10%.mdf" "D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_data.mdf"&&echo 已经覆盖新建的同名数据库文件!
  37. call :up_Server
  38. dir /ad .\%your_database% >nul 2>nul||md %your_database% 2>nul
  39. if not exist .\%your_database%\%your_database%_001.sql call :data_control001
  40. isql -H. -E -i .\%your_database%\%your_database%_001.sql
  41. call :down_Server
  42. call :up_Server
  43. if not exist .\%your_database%\%your_database%_002.sql call :data_control002
  44. isql -H. -E -i .\%your_database%\%your_database%_002.sql
  45. echo.
  46. call :down_Server
  47. call :up_Server
  48. if not exist .\%your_database%\%your_database%_003.sql call :data_control003
  49. isql -H. -E -i .\%your_database%\%your_database%_003.sql
  50. echo.
  51. echo -------任意键查询【%your_database%】的修复状况----------&&pause>nul&&echo 修复状况即将揭晓...&&ping 127.1 -n 3 >nul 2>nul&&isql -H. -E -Q "dbcc checkdb(%your_database%)"
  52. ping 127.1 -n 3 >nul
  53. :is_Right
  54. echo.
  55. echo #@#执行结果为"CHECKDB  发现了0个分配错误,0个一致性错误"---^>修善的目的达到!
  56. set /p all_right=数据库置疑是否已经达到,选否为进行后续的数据库修复[Y/N]:
  57. if /i "%all_right%" equ "y" goto :end
  58. if /i "%all_right%" equ "n" goto :need_repair
  59. echo.
  60. echo 你的输入有错,请重新输入!
  61. echo.
  62. set all_right=
  63. ping 127.1 -n 2 >nul 2>nul
  64. goto :is_Right
  65. :need_repair
  66. if not exist .\%your_database%\repair_%your_database%_rebuild.sql call :data_rebuild
  67. isql -H. -E -i .\%your_database%\repair_%your_database%_rebuild.sql
  68. echo.
  69. echo.
  70. echo #@#执行结果为"CHECKDB  发现了0个分配错误,0个一致性错误"---^>修善的目的达到!
  71. set /p all_right_two=数据库置疑是否已经达到效果[Y/N]:
  72. if /i "%all_right_two%" equ "y" goto :not_single
  73. if not exist .\%your_database%\repair_%your_database%_loss.sql call:data_repair
  74. isql -H. -E -i .\%your_database%\repair_%your_database%_loss.sql
  75. echo.
  76. :not_single
  77. if not exist .\%your_database%\%your_database%_not_single_user.sql call :data_no_single_user
  78. isql -H. -E -i .\%your_database%\%your_database%_not_single_user.sql
  79. echo.
  80. echo 高级修复已完成^^-^^&&ping 127.1 -n 5 >nul
  81. :end
  82. cls
  83. echo Wow,置疑数据库【%your_database%】修复完成!
  84. echo 若还有问题,请直接咨询 CDKLD-006 Tel:02885242244&&pause>nul
  85. exit
  86. :up_Server
  87. (sc start MSSQLSERVER >nul 2>nul||net start MSSQLSERVER >nul 2>nul)&ping 127.0.0.1 -n 4 >nul 2>nul
  88. echo ******数据库服务[MSSQLSERVER]已成功的启动!******
  89. goto :eof
  90. :down_Server
  91. (sc stop MSSQLSERVER >nul 2>nul||net stop MSSQLSERVER >nul 2>nul)&ping 127.0.0.1 -n 3 >nul 2>nul
  92. echo ******数据库服务[MSSQLSERVER]已成功的停止!******
  93. goto :eof
  94. :not_exist_database
  95. cls
  96. echo 数据库【%your_database%】不存在,请确认!
  97. set your_database=
  98. pause>nul&goto :start
  99. :out
  100. echo 请输入程序运行必备参数【置疑数据库名】-愿你好运...
  101. set your_database=
  102. pause>nul&goto :start
  103. :data_control001
  104. echo Use Master>%your_database%\%your_database%_001.sql
  105. echo Go>>.\%your_database%\%your_database%_001.sql
  106. echo sp_configure 'allow updates', ^1>>%your_database%\%your_database%_001.sql
  107. echo reconfigure with override>>%your_database%\%your_database%_001.sql
  108. echo Go>>%your_database%\%your_database%_001.sql
  109. echo begin tran>>%your_database%\%your_database%_001.sql
  110. echo update sysdatabases set status = 32768 where name = '%your_database%'>>%your_database%\%your_database%_001.sql
  111. echo commit tran>>%your_database%\%your_database%_001.sql
  112. goto :eof
  113. :data_control002
  114. echo USE MASTER>.\%your_database%\%your_database%_002.sql
  115. echo GO>>.\%your_database%\%your_database%_002.sql
  116. echo DBCC TRACEON(3604)>>.\%your_database%\%your_database%_002.sql
  117. echo DBCC REBUILD_LOG('%your_database%','D:\Program Files\Microsoft SQL Server\MSSQL\Data\%your_database%_log.ldf')>>.\%your_database%\%your_database%_002.sql
  118. echo Go>>.\%your_database%\%your_database%_002.sql
  119. goto :eof
  120. :data_control003
  121. echo use master>.\%your_database%\%your_database%_003.sql
  122. echo update sysdatabases set status = 8 where name = '%your_database%'>>.\%your_database%\%your_database%_003.sql
  123. echo Go>>.\%your_database%\%your_database%_003.sql
  124. echo sp_configure 'allow updates', ^0>>.\%your_database%\%your_database%_003.sql
  125. echo reconfigure with override>>.\%your_database%\%your_database%_003.sql
  126. echo Go>>.\%your_database%\%your_database%_003.sql
  127. goto :eof
  128. :data_rebuild
  129. echo USE master>%your_database%\repair_%your_database%_rebuild.sql
  130. echo Go>>%your_database%\repair_%your_database%_rebuild.sql
  131. echo EXEC sp_dboption '%your_database%', 'single user', 'TRUE'>>%your_database%\repair_%your_database%_rebuild.sql
  132. echo go>>%your_database%\repair_%your_database%_rebuild.sql
  133. echo DBCC CHECKDB ('%your_database%','repair_rebuild')>>%your_database%\repair_%your_database%_rebuild.sql
  134. echo Go>>%your_database%\repair_%your_database%_rebuild.sql
  135. echo DBCC CHECKDB ('%your_database%')>>%your_database%\repair_%your_database%_rebuild.sql
  136. echo Go>>%your_database%\repair_%your_database%_rebuild.sql
  137. goto :eof
  138. :data_repair
  139. echo USE master>%your_database%\repair_%your_database%_loss.sql
  140. echo GO>>%your_database%\repair_%your_database%_loss.sql
  141. echo DBCC CHECKDB ('%your_database%','repair_allow_data_loss')>>%your_database%\repair_%your_database%_loss.sql
  142. echo Go>>%your_database%\repair_%your_database%_loss.sql
  143. echo DBCC CHECKDB ('%your_database%')>>%your_database%\repair_%your_database%_loss.sql
  144. echo Go>>%your_database%\repair_%your_database%_loss.sql
  145. echo EXEC sp_dboption '%your_database%', 'single user','FALSE'>>%your_database%\repair_%your_database%_loss.sql
  146. echo go>>%your_database%\repair_%your_database%_loss.sql
  147. goto :eof
  148. :data_no_single_user
  149. echo USE master>%your_database%\%your_database%_not_single_user.sql
  150. echo Go>>%your_database%\%your_database%_not_single_user.sql
  151. echo EXEC sp_dboption '%your_database%', 'single user','FALSE'>>%your_database%\%your_database%_not_single_user.sql
  152. echo go>>%your_database%\%your_database%_not_single_user.sql
  153. goto :eof
复制代码

[ 本帖最后由 bat_fan 于 2010-11-6 18:20 编辑 ]
1

评分人数

返回列表