中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【原创】批处理完成SQLSERVER数据库的附加、分离。
作者:
标题: 【原创】批处理完成SQLSERVER数据库的附加、分离。 上一主题 | 下一主题
augvii
初级用户





积分 38
发帖 17
注册 2008-4-10
状态 离线
『楼 主』:  【原创】批处理完成SQLSERVER数据库的附加、分离。

功能:把同目录下的.MDF、.LDF数据库备份文件,复制到SQLSERVER数据库文件目录中。进行附加和分离操作。
还有很多问题还没解决,如:服务器未开返回的错误如何判断,如何在数据库中停止和启动MSSQLServer..等。
谢谢HAT版主、vampire的帮助
===============================================
代码:
---------------------------------------------------------------------------------------------------------
@echo off
cls
color 0a
rem SQLSERVER2000 数据库附加、分离的小程序
rem 下面是变量的一些定义,dbloginname是数据库登入名,dbloginpwd是数据库登入密码,dbname是数据库名,dbmdf和

dbldf是数据库文件
set dbloginname=sa
set dbloginpwd=wl
set dbname=workflow
set dbmdf=workflow_Data.MDF
set dbldf=workflow_Log.LDF

>"%temp%\my.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\my.vbs" echo WScript.Echo

WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\SQLDataRoot")
for /f "delims=" %%a in ('cscript /nologo "%temp%\my.vbs"') do set SQL=%%a\Data

echo SQLSERVER数据库文件目录路径:%SQL%  
echo.
echo 正在复制mdf,请等待...
copy %dbmdf%  "%SQL%"
echo 正在复制ldf,请等待...
copy %dbldf%  "%SQL%"
echo 复制的文件名是:%dbmdf%和%dbldf%
:start
cls
echo.
echo============================================================================
echo.
echo                         请输入选择项后,按回车确认
echo 1.附加数据库
echo 2.分离数据库
echo 3.退出
echo.
echo                                                               author:AUGVII
echo============================================================================
set /p var=请选择:
if %var% == 1 goto attachdb
if %var% == 2 goto detachdb
if %var% == 3 goto exit

:detachdb
osql   -U"%dbloginname%"   -P"%dbloginpwd%"   -S"127.0.0.1"   -Q"sp_detach_db   '%dbname%'"
echo 处理中...
echo db detach successful!
pause
goto start

:attachdb
osql   -U"%dbloginname%"   -P"%dbloginpwd%"   -S"127.0.0.1"   -Q"sp_attach_db  

'%dbname%','%SQL%\%dbmdf%','%SQL%\%dbldf%'"
echo 处理中...
echo db attach successful!
pause
goto start

:exit
echo 欢迎使用...      
pause
==================================================

2008-9-24 14:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Batcher
初级用户





积分 33
发帖 16
注册 2008-8-21
状态 离线
『第 2 楼』:  

启动
net start MSSQLSERVER
停止
net stop MSSQLSERVER


2008-9-24 15:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
augvii
初级用户





积分 38
发帖 17
注册 2008-4-10
状态 离线
『第 3 楼』:  

如何对错误进行判断,再进行处理呢?
如:服务器未打开,进行附加就会报错[DBNETLIB]SQL Server 不存在或访问被拒绝
errorlevel 是多少?哪里有这方面的资料?
好像可以echo出来。

[ Last edited by augvii on 2008-9-24 at 03:35 PM ]

2008-9-24 15:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Batcher
初级用户





积分 33
发帖 16
注册 2008-8-21
状态 离线
『第 4 楼』:  


@echo off
for /f "tokens=4 delims= " %%a in ('sc query MSSQLSERVER^|findstr "STATE"') do (
  if "%%a" neq "RUNNING" (
    echo 数据库服务器未开
  ) else (
    echo 数据库服务器开啦
  )
)


2008-9-24 15:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
augvii
初级用户





积分 38
发帖 17
注册 2008-4-10
状态 离线
『第 5 楼』:  

echo %errorlevel%
启动为:0
未启动为:1
这样判断可以吗?
-------------------------------------------

2008-9-24 15:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
augvii
初级用户





积分 38
发帖 17
注册 2008-4-10
状态 离线
『第 6 楼』:  

sc 还像在win2000下不支持啊,有没有更通用点的啊。我的系统是win2000的

2008-9-24 15:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Batcher
初级用户





积分 33
发帖 16
注册 2008-8-21
状态 离线
『第 7 楼』:  


:attachdb
osql -U"%dbloginname%" -P"%dbloginpwd%" -S"127.0.0.1" -Q"sp_attach_db '%dbname%','%SQL%\%dbmdf%','%SQL%\%dbldf%'" 2>nul
if %errorlevel% neq 0 (
  echo 数据库服务器未开
  goto :exit
)


2008-9-24 16:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
augvii
初级用户





积分 38
发帖 17
注册 2008-4-10
状态 离线
『第 8 楼』:  

如果该数据库已经存在,再附加。数据库已经分离,再分离。
这两种错误该如何获取呢?

2008-9-24 16:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: