C#.NET数据库备份怎么弄啊?我觉得是SQL的问题

panliuwen 2009-04-11 08:37:19
string nepath = Server.MapPath("../DataBackup");

string ST_strsql = "BACKUP DATABASE ["+dbName+"] TO DISK ='" + Server.MapPath("../").ToString() + "DataBackup\\" + newname + ".bak'";
...全文
882 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
果然如此 2009-04-12
  • 打赏
  • 举报
回复
--完整备份
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Full_20070908.bak'

--差异备份
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Diff_20070908.bak'
With Differential

--日志备份,默认截断日志
Backup Log NorthwindCS
To disk='G:\Backup\NorthwindCS_Log_20070908.bak'

--日志备份,不截断日志
Backup Log NorthwindCS
To disk='G:\Backup\NorthwindCS_Log_20070908.bak'
With No_Truncate

--截断日志不保留
Backup Log NorthwindCS
With No_Log

--或者
Backup Log NorthwindCS
With Truncate_Only
--截断之后日志文件不会变小
--有必要可以进行收缩

--文件备份
Exec Sp_Helpdb NorthwindCS --查看数据文件
Backup Database NorthwindCS
File='NorthwindCS' --数据文件的逻辑名
To disk='G:\Backup\NorthwindCS_File_20070908.bak'

--文件组备份
Exec Sp_Helpdb NorthwindCS --查看数据文件
Backup Database NorthwindCS
FileGroup='Primary' --数据文件的逻辑名
To disk='G:\Backup\NorthwindCS_FileGroup_20070908.bak'
With init

--分割备份到多个目标
--恢复的时候不允许丢失任何一个目标
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Full_1.bak'
,disk='G:\Backup\NorthwindCS_Full_2.bak'

--镜像备份
--每个目标都是相同的
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Mirror_1.bak'
Mirror
To disk='G:\Backup\NorthwindCS_Mirror_2.bak'
With Format --第一次做镜像备份的时候格式化目标

--镜像备份到本地和远程
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Mirror_1.bak'
Mirror
To disk='\\192.168.1.200\Backup\NorthwindCS_Mirror_2.bak'
With Format

--每天生成一个备份文件
Declare @Path Nvarchar(2000)
Set @Path ='G:\Backup\NorthwindCS_Full_'
+Convert(Nvarchar,Getdate(),112)+'.bak'

Backup Database NorthwindCS
To disk=@Path


--从NoRecovery或者
--Standby模式恢复数据库为可用
Restore Database NorthwindCS_Bak
With Recovery

--查看目标备份中的备份集
Restore HeaderOnly
From Disk ='G:\Backup\NorthwindCS_Full_20070908.bak'

--查看目标备份的第一个备份集的信息
Restore FileListOnly
From Disk ='G:\Backup\NorthwindCS_Full_20070908_2.bak'
With File=1

--查看目标备份的卷标
Restore LabelOnly
From Disk ='G:\Backup\NorthwindCS_Full_20070908_2.bak'

--备份设置密码保护备份
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Full_20070908.bak'
With Password = '123',init

Restore Database NorthwindCS
From disk='G:\Backup\NorthwindCS_Full_20070908.bak'
With Password = '123'

---------------------------------------------------------------------
果然如此 2009-04-12
  • 打赏
  • 举报
回复
在.Net中进行SQLServer数据库备份与还原操作实用类
类说明#region 类说明
//-----------------------------------------------------------------------------
//
// 项目名称:***
// 文件名称:DBBakManager.cs
// 文件说明:对数据库备份文件进行管理。提供备份、还原、备份文件管理操作。
//
// 开始日期:2007年04月04日
// 开发人员:***
//
//-----------------------------------------------------------------------------
#endregion

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using SQLDMO; //添加引用C:Program FilesMicrosoft SQL Server80ToolsBinnSQLDMO.dll

namespace GSIM.StuManager
{
///
/// 对SQL Server数据库备份文件进行管理。提供备份、还原、备份文件管理操作。
///
public class DBBakManager
{

字段#region 字段

private string _serverName;
private string _userName;
private string _password;
private string _dbName;

#endregion

构造#region 构造

///
/// 构造函数
///
/// 数据库服务器名
/// 数据库用户名
/// 用户密码
/// 数据库名
public DBBakManager(string serverName, string userName, string password,string dbName)
{
_serverName = serverName;
_userName = userName;
_password = password;
_dbName = dbName;
}

#endregion

方法#region 方法

///
/// 备份数据库
///
/// 保存的备份文件路径(包括文件名,文件名格式为:"DBName(yyyyMMddHHmm).bak")
/// 操作成功返回true,否则返回false
public bool BackUpDB(string saveFileName)
{
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
try
{
svr.Connect(_serverName, _userName, _password);
SQLDMO.Backup bak = new SQLDMO.BackupClass();
bak.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
bak.Initialize = true;
bak.Database = _dbName;
bak.Files = saveFileName;
bak.SQLBackup(svr);
return true;
}
catch (Exception err)
{
return false;
}
finally
{
svr.Close();
}
}

///
/// 还原数据库备份
///
/// 还原的备份文件路径(包括文件名,文件名格式为:"DBName(yyyyMMddHHmm).bak")
/// 操作成功返回true,否则返回false
public bool RestoreDB(string fileName)
{
SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
try
{
svr.Connect(_serverName, _userName, _password);
//取得所有的进程列表
SQLDMO.QueryResults qr = svr.EnumProcesses(-1);
int iColPIDNum = -1;
int iColDbName = -1;
//找到和要恢复数据库相关的进程
for (int i = 1; i <= qr.Columns; i++)
{
string strName = qr.get_ColumnName(i);
if (strName.ToUpper().Trim() == "SPID")
{
iColPIDNum = i;
}
else if (strName.ToUpper().Trim() == "DBNAME")
{
iColDbName = i;
}
if (iColPIDNum != -1 && iColDbName != -1)
break;
}
//将相关进程关闭
for (int i = 1; i <= qr.Rows; i++)
{
int lPID = qr.GetColumnLong(i, iColPIDNum);
string strDBName = qr.GetColumnString(i, iColDbName);
if (strDBName.ToUpper() == _dbName)
svr.KillProcess(lPID);
}

SQLDMO.Restore res = new SQLDMO.RestoreClass();

res.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
res.Files = fileName;

res.Database = _dbName;
res.FileNumber = 1;

res.ReplaceDatabase = true;
res.SQLRestore(svr);

return true;
}
catch (Exception err)
{
return false;
}
finally
{
svr.Close();
}
}

///
/// 获得所有数据库备份文件信息,如:200704041120.
///
/// 保存备份文件的文件夹路径(不包括文件名)
/// 包含文件信息的字符串组
public string[] GetAllDBBak(string filePath)
{
string[] DBBakInfo = Directory.GetFiles(filePath, "BMIS*");
int start = DBBakInfo[0].IndexOf("(");
int end = DBBakInfo[0].IndexOf(")");
//除去多余部分,返回名字中的时间信息,如:200704041120.
for (int i = 0; i < DBBakInfo.Length; i++)
{
DBBakInfo[i] = DBBakInfo[i].Substring(start + 1, end - start - 1);
}
return DBBakInfo;
}

///
/// 删除一个数据库备份文件
///
/// 删除的备份文件路径(包括文件名,文件名格式为:"DBName(yyyyMMddHHmm).bak")
/// 操作成功返回true,否则返回false
public bool DeleteDBBak(string fileName)
{
if (File.Exists(fileName) == true)
{
File.Delete(fileName);
return true;
}
else
{
return false;
}

}

#endregion
}
}
zw_548498 2009-04-12
  • 打赏
  • 举报
回复
Server.MapPath(".")+"/DataBackup"
试试
mengxj85 2009-04-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mengxj85 的回复:]
是SQL问题,但得触发该事件呀,可以写一个方法执行备份的SQL语句
[/Quote]
晕,曲解楼主的意思了,
string ST_strsql = "BACKUP DATABASE ["+dbName+"] TO DISK ='" + Server.MapPath("../").ToString() + "DataBackup\\" + newname + ".bak'";
换成一个静态的路径试试
mengxj85 2009-04-11
  • 打赏
  • 举报
回复
是SQL问题,但得触发该事件呀,可以写一个方法执行备份的SQL语句
春天的气息 2009-04-11
  • 打赏
  • 举报
回复
Server.MapPath("../DataBackup")是WebForm中用的,WinForm下应用application.startpath,
panliuwen 2009-04-11
  • 打赏
  • 举报
回复
我用的是C#编的,这个在数据库查询分析器有用吧,我觉得就是那个 Server.MapPath("../DataBackup")的问题,就是路径不懂怎么弄
panliuwen 2009-04-11
  • 打赏
  • 举报
回复
我用的是C#编的,这个在数据库查询分析器有用吧,我觉得就是那个 Server.MapPath("../DataBackup")的问题,就是路径不懂怎么弄
巴掌锅 2009-04-11
  • 打赏
  • 举报
回复
这里有个SQL 语句备份 看多你有用吗:
USE master/数据库名
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧