Osql(转)

备份整个SQL Server数据库容易,在SQL Server Management Studio中,选中数据库,右键,然后选择”备份”,接下来按照提示做就可以了。

回复整个数据库也容易,因为SQL Server Management Studio也提供相应的邮件菜单。

然而有一天,你突然发现,你要恢复的数据库有10G或者100G之大的时候,恢复整个数据库就要耗去不少的时间和磁盘空间,特别是在做脚本测试的时候,总不能每次测试结束后就重新恢复数据库吧?

如果你使用的是SQL Server Management Studio 2008,那你很幸运,因为这个备份单张表或者多张表的功能在SQL Server Management Studio2008的时候也已经集成在右键菜单中了,你甚至还可以直接使用SQL Server Management Studio2008生成INSERT脚本。

但是,如果你还没有升级到SQL Server Management Studio2008, 或者在客户的数据库服务器上(你当然不能在客户的服务器上做升级操作),这时候你需要备份其中的一张或者几张表,怎么办?

在SQL Server2005以后的版本中,有一个叫做BCP的工具可以帮你完美的完成这件事,关于BCP的详细介绍,请看这里

我来简单的对BCP做个示范:

如果你在数据库AdvDB中有一个叫做dbo.Post的表(dbo是表的schema),那么如何使用BCP对dbo.Post进行备份呢?在命令行下执行下面的命令:

bcp AdvDB.dbo.Post out c:\backup\post.txt -c -T -S localhost

要成功执行这个命令,你首先需要保证你的备份目的目录是存在的,在这个例子中即c:\backup是存在的,你必须手工创建。
在命令行下敲入这个命令后,然后就等着吧,备份结束后会提示你备份成功了,备份了多少行数据等等。
需要注意的是:

  • -c 是针对非unicode字符使用的编码方式(即varchar,vchar),如果你的数据表的字段是unicode的,建议使用-N
  • -S是用来指定SQL Server的服务器名字的(含instance名字如果不是默认instance的话)
  • -T说明是用集成验证来登录到SQL Server的,如果你需要使用username/password登录的话,请改用-U username -P password
  • out参数说明是要用bcp做备份操作
好了,备份结束了,我改动了Post表的数据,然后现在想恢复成原装了,怎么办?在命令行下执行下面的命令:
bcp AdvDB.dbo.Post in c:\backup\post.txt -c -T -S localhost -E

同上c:\backup\post.txt是刚才备份数来的文件,其它参数都相同
在命令行下敲入这个命令后,然后就等着吧,恢复结束后会提示你恢复完成了,恢复了多少行数据等等。
需要注意的是:

  • -E是用来针对自增列的恢复的,如果不指定这个参数,自增列的值就会被忽略并按照数据库的设定继续自增,指定了这个参数就可以对自增列也恢复为原来的值了。
  • in参数说明是要用bcp做恢复操作
有需要的自己去亲自尝试一下就知道了,BCP的效率还是挺高的。
原文地址:https://www.cnblogs.com/liubo68/p/2834133.html