龙空技术网

备份恢复SQLserver数据库BAT脚本

郑大钱呀 781

前言:

如今小伙伴们对“bat文件连接数据库并查询”可能比较关心,小伙伴们都想要剖析一些“bat文件连接数据库并查询”的相关内容。那么小编在网摘上收集了一些对于“bat文件连接数据库并查询””的相关文章,希望兄弟们能喜欢,朋友们一起来学习一下吧!

环境概述

版本:SQL Server2014,但不限于此版本

原理:利用osql工具执行 Transact-SQL 语句和脚本文件,osql工具简单的说就是用户通过使用 命令行的方式与数据库交互Transact-SQL 语句。

应用:可将BAT脚本添加至Windows的定时计划中,定时备份数据库数据

声明:脚本参考自CSDN社区,这里是交流学习分享

操作数据库BAT脚本(备份、恢复数据库的BAT脚本相同)

BAT批处理代码语法如下:

osql命令相关参数解释如下:

-S: 服务器(英文Server)IP地址,即告诉计算机你要在那台服务器上执行SQL脚本。也就是说,在防火墙允许的情况下,你可以在A服务器上对B服务器的数据库进行操作。此外-S选项也可以不填,如果不填,则默认在当前的服务器上执行

-U:数据库的登陆用户名(英文User)

-P:数据库的登陆密码(英文Password)

-i: 输入文件(英文:input_file),即你要执行的SQL脚本的路径,注意是小写字母

-o:输出文件(英文:output_file),即你执行完命令后,会在你执行的路径下生成一个*.out的文件,文件中有操作数据库的返回结果和其他信息

-e:回显输入(英文:不晓得【捂脸】)加上此选项,在输出的文件中会显示输入文件的内容

BAT脚本示例如下:

说明:备份数据库的bat和恢复数据库的bat 格式是一样的,唯一不同的就是【-i 输入文件】选项,备份数据库操作,后面就填备份数据库的sql文件路径,恢复数据库操作,后面就填恢复数据库的sql文件路径即可。

备份数据库的SQL文件 代码如下

备份的核心代码:backup database @name to disk=@bakfile with name=@name,含义为:备份哪个库到哪个路径,并设置备份集的名称。关于备份集名称,名称最长可达 128 个字符。 如果未指定 NAME,它将为空。

恢复数据库的SQL文件代码如下

恢复数据库的SQL脚本一(适用于同一备份文件还原成同名的数据库):

恢复数据库的SQL脚本二(适用于同一备份文件还原成不同名的数据库):

恢复数据库的SQL脚本二核心代码解释如下:

核心代码:

RESTORE DATABASE DataSample1FROM disk=@dumpfileWITH RECOVERY,MOVE 'sql_Data' TO 'D:\sql\sql.mdf', MOVE 'sql_Log' TO 'D:\sql\sql_Log.ldf'

解释:

RESTORE DATABASE 数据库名称FROM disk=所要恢复数据库的备份文件路径WITH 指定还原操作要使用的选项(常用选项有:RECOVERY、REPLACE)MOVE '备份文件中数据库名称' To '为 数据库名称.mdf 文件指定的存放路径',MOVE '备份文件中数据库名称_log' To '为 数据库名称_log.ldf 文件指定的存放路径';

1.WITH 后是用来指定还原操作要使用的选项,常用的选项有RECOVERY,其表示还原操作回滚任何未提交的事务。 在恢复进程后即可随时使用数据库。 如果既没有指定 NORECOVERY 和 RECOVERY,也没有指定 STANDBY,则默认为 RECOVERY;除了RECOVERY选项外还有一个常用的选项REPLACE,其表示如果数据库中已经存在一个具有相同名称的数据库, SQL Server 也应该创建指定的数据库及其相关文件。 在这种情况下将删除现有的数据库,简单的说就是将数据库中本来已经存在的那个同名数据库覆盖掉,如果不指定 REPLACE 选项,则会执行安全检查。 这样可以防止意外覆盖其他数据库。

2.MOVE 后的备份文件中数据库名称,是需要通过相关语句来查询,语法如下:

RESTORE FILELISTONLY FROM DISK = 备份文件存放路径

此语句查询就可得到得到备份文件的逻辑文件名,查询结果一般会有两条记录,主要看LogicalName字段(截图如下),sql_Data是主逻辑文件名称,sql_Log为日志逻辑文件名称,如果MOVE后的名称不对,那么就会报【逻辑文件xxx不是数据库xxx的一部分,请使用RESTORE FILELISTONLY 来列出逻辑文件名】的错误提示。

补充:如果数据库正在使用,就出现类似【数据正在使用,报无法获得对数据库的独占访问权】的报错,这样脚本执行就会中断,解决方法如下:如果数据库正在使用,将数据库名设置为脱机,相关代码语法如下:

ALTER DATABASE [数据库名称] SET OFFLINE WITH ROLLBACK IMMEDIATE

等数据库恢复完成后,使用如下语法将数据库联机,语法如下

ALTER database [ 数据库名称] set online 

对此可以对脚本二进行一些调整,这里仅供参考:

小二不足之处,还请各位客官多多指点,一起学习交流

标签: #bat文件连接数据库并查询