首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

sql server数据库备份,该如何解决

2012-03-12 
sql server数据库备份您们好!由于前一段时间没想好怎么做,导致客户对在程序中对于数据的删除操作不放心。所

sql server数据库备份
您们好!
  由于前一段时间没想好怎么做,导致客户对在程序中对于数据的删除操作不放心。所以,我想给她做一个数据库备份,误删后可以把数据还原。
  请问大家,我因该怎么做,才保证程序能够正确。
  谢谢大家了,因为我不想我的老板和客户失望,毕竟这是我第一个项目!
 

[解决办法]
我回来了,9点多那会吃饭去了。我在上面的回答有些错误,重新写了完整的代码回复你:

C/C++ code
#pragma link "adortl.lib"#pragma link "dbrtl.lib"#include <adodb.hpp>void __fastcall TForm1::Button1Click(TObject *Sender){    TADOConnection *con = new TADOConnection(this);    String strSvr = "127.0.0.1"; // 服务器    String strDbName = "dbTest"; // 数据库名    String strUserName = "sa"; // 登录用户名    String strUserPwd = "pwd"; // 密码    String strBakFile = "E:\\Temp\\123.bak"; // 备份文件名    try    {        con->ConnectionString = String().sprintf(                "Provider=SQLOLEDB.1;"                "Persist Security Info=True;"                "Data Source=%s;"                "User ID=%s;"                "Password=%s;"                "Initial Catalog=%s;",                strSvr.c_str(),                strUserName.c_str(),                strUserPwd.c_str(),                strDbName.c_str());        // 备份用的SQL        String strBackupSQL = String().sprintf(                "BACKUP DATABASE [%s] TO  DISK = N'%s' "                "WITH  NOINIT ,  NOUNLOAD ,  NAME = N'%s 备份',  "                "NOSKIP ,  STATS = 10,  NOFORMAT",                strDbName.c_str(), strBakFile.c_str(), strDbName.c_str()                );        // 还原用的SQL        String strRestoreSQL = String().sprintf(                "use tempdb\n"                "RESTORE DATABASE [%s] FROM  DISK = N'%s' "                "WITH  FILE = 1,  NOUNLOAD ,  STATS = 10,  RECOVERY\n"                "use %s",                strDbName.c_str(), strBakFile.c_str(), strDbName.c_str()                );        // 备份        // con->Execute(WideString(strBackupSQL));        // 还原        con->Execute(WideString(strRestoreSQL));    }    __finally    {        con->Connected = false;        delete con;        ShowMessage("完毕");    }}
[解决办法]
一、对于复杂环境的数据库来说,当前的通用做法是不做真实删除理由有:
1、一般情况下,我们的数据库要求记录用户的每个操作,无论是追加数据还是删除数据都要做到有据可查,有底可查。
2、一但出现操作错误,如果真实删除了,那就无可挽回。

二、所以,关键数据如果用户删除,我们一般都不在数据库里真实删除,关键数据一般都建一个标志字段,标志为真的记录客户端就不取它。

三、如果你怕长期下来数据库过于庞大,可以在SQL的计划任务中删去N天前的记录,当然前提是这些记录中有时间标志(加个时间字段)。一般多数情况下我们就根本不删。

四、对于数据库的备份,可以非常简单地利用SQL自有的功能进行,而且一般也不做在客户端,直接使用SQL的计划任务来进行(SQL2000中有维护向导的)。

五、对于数据库的还原,要求在还原过程中没有用户联接。这没有办法,如果客户正在写数据,还原数据那就两边冲突了!

六、要正儿八经地做出一个数据库管理程序来,请记住上面的一些原则。

七、此外,如果与财务相关,请记住,一定使用红字冲销原则。

热点排行