主题:SOS2!!!!!还是SQL
sharkbruce
[专家分:0] 发布于 2005-09-19 13:49:00
首先再谢谢frankie365的帮忙,上个问题已经解决了[em11]还有一些问题请求各位答谢继续帮助小弟。
因为数据库总是要维护的,那么如果要对数据库进行备份、恢复等操作时的代码怎么写啊?我买的书上没有这些语句。
因为当系统管理员想备份或恢复数据库的时候总不能再叫我去现场给他做吧?
回复列表 (共9个回复)
沙发
frankie365 [专家分:980] 发布于 2005-09-19 15:28:00
数据库备份可以有两种方法,一是用BCP,二是用SQL语句,如果要系统管理员自已操作,那么用BCP的方法将简单,但只能全部备份和恢复,而用SQL语句或系统维护向导,就可以实现时间点的恢复。
一是用Bcp方法:
备份采用:bcp "数据库名.dbo.表名" out 表名.bcp -c -q -S 服务器名 -U 用户名 -P 密码
将所有要备份的表都以上述方法写入.bat批执行文件中,其中服务器名、用户名和密码都可以用%1,%2,%3的参数形式填入,在调用再在编程时传入参数。
恢复时:先删除待恢复的表,再用bcp "数据库名.dbo.表名" in 表名.bcp -c -q -S 服务器名 -U 用户名 -P 密码即可实现恢复。
二、如果用SQL
BACKUP DATABASE 数据库名
TO disk = '备份路径'
WITH INIT,
NAME = '备份名'
GO//这是完全备份,以后可以用差异备份
BACKUP DATABASE 数据库名
TO 备份名'
WITH DIFFERENTIAL
恢复:以下是还原完整数据库备份后还原差异备份
RESTORE DATABASE 数据库名
FROM 备份名
WITH NORECOVERY
RESTORE DATABASE MyNwind
FROM MyNwind_1
WITH FILE = 2
以下为一例 :Northwind为一个数据库
BACKUP DATABASE Northwind
TO DISK = 'c:\Northwind.bak'
RESTORE FILELISTONLY
FROM DISK = 'c:\Northwind.bak'
板凳
宝宝啊呜 [专家分:990] 发布于 2005-09-19 16:27:00
我再问个问题,这东西写在什么位置[em65]
3 楼
frankie365 [专家分:980] 发布于 2005-09-19 16:39:00
关键是看你用什么来编写,如果是C,则在select时写,如果是直接用查询分析器,则直接写到分析里,可以写成存储过程,再调用。BCP方法可用于没有查询分析器或自动处理和编程时操作,这样可以与编程方法无关,因为BCP是批处理调用,你用过autoexec.bat文件吗?一样。
4 楼
sharkbruce [专家分:0] 发布于 2005-09-19 16:45:00
现在系统应该是用的ASP.NET做的
这样有没有什么问题啊?
5 楼
frankie365 [专家分:980] 发布于 2005-09-19 16:56:00
在ASP.net中可以直接用第二种方法。
6 楼
sharkbruce [专家分:0] 发布于 2005-09-19 17:18:00
就是说第一次备份时:
BACKUP DATABASE 数据库名
TO disk = '备份路径'
WITH INIT,
NAME = '备份名'
GO
然后以后的备份就可以用:
BACKUP DATABASE 数据库名
TO 备份名'
WITH DIFFERENTIAL
恢复时用:
RESTORE FILELISTONLY
FROM DISK = '备份路径'
7 楼
frankie365 [专家分:980] 发布于 2005-09-19 17:29:00
对了。你可以找一个数据库试一试。
8 楼
sharkbruce [专家分:0] 发布于 2005-09-20 09:57:00
谢谢
有一个问题。为什么那个第一次备份的最后要有个GO?其他的都没有啊
9 楼
frankie365 [专家分:980] 发布于 2005-09-20 10:35:00
GO的作用是与后面的语句分开,必须先执行GO以上的语句后才继续执行后面的语句。如果没有GO,有可能语句会按系统最优化而调整执行了顺序导致出错。我这里的GO有与否并不重要,因为我在后面还有其它语句,复制的时候一起复制了。
我来回复