什么是**库的分离,附加,备份,还原

时间:2015.06.21 发布人:cibei101

什么是**库的分离,附加,备份,还原

已解决问题

谷歌cibei101用户在2015.06.21提交了关于“英达什么是**库的分离,附加,备份,还原”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-08-28T12:54:20。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,千言万语,表达不了我的感激之情,我已铭记在心 !

希望以下的回答,能够帮助你。

第1个回答

用户名:yangxueqi2  

1.在用户的配置时问答,我们需要列出当前局域网内所有的**库服务器,并且要列出指定服务器的所有**库,实现代码如下:

取得**库服务器列表:
publicArrayListGetServerList()
{
ArrayListalServers=newA剂rrayList();
SQLDMO.ApplicationsqlApp=newSQLDMO.A治章封pplicationClass();
try
{
SQLDMO.NameListserverList=sqlApp.List**ailableSQLServers();
for(inti=1;i<=serverList置乱州面包少语.Count;i++)
{
alServers.Add(serverList.Item(i));
}
}
catch(Exceptione)
{
throw(newExce镇美连既室方级丰就ption("取**库服务器列表出错:"+e.Message));
}
finall秋y
{
sqlApp.Quit();
}
returnalServers;
}

取得指定**库服务器的数据库列表
publicA音免都顾第九余排rrayListGetDbList(stringstrServerName,stringstrUserName,stringstrPwd)
{
ServerName=strServerName;
UserName=strU春医功介束负规serName;
Password=strPwd;

ArrayListalDbs=newArrayList();
SQLDMO.ApplicationsqlApp=newSQLDMO.ApplicationClass();
SQLDMO.SQLServ慢促准基陆效曾止ersvr=newSQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName,UserN小期油黄令ame,Password);
foreach(SQLDMO.Databasedbinsvr.Databases)
{
if(***.Name!=**ll)
alDbs.Add(*策庆路客何州与需印告含**.Name);
}
}
catch(Exceptione)
{
throw(newExcept续承袁言尔金称成双香ion("连接**库出错:"+e.Message));
}
finally
{
svr量哪非染同.DisConnect();
sqlApp.Quit();
}
returnalDbs;
}

2.**库的备份和实时进度显示代码:

publicboolBackUPDB(stringstrDbName,stringstrFileName,ProgressBar源农系举每倍守政模pgbMain)
{
PBar=pgbMain;
SQLDMO.SQLServersvr=newSQLDMO.SQLServerCl限将面ass();
try
{
svr.Connect(ServerName,UserName,Password);
SQLDMO.Backupb**=newSQLDMO.BackupClass();
b**.Act守转粉突ion=0;
b**.Initialize=true;
SQLDMO.BackupSink_PercentCompleteEventh**andlerpceh=newSQLDMO.BackupSink_PercentCompleteEventh**andler(Step);
b**.PercentComplete+=pceh;
b**.Files=strFileName;
b**.Database=str雨DbName;
bak.SQLBackup(svr);
returntrue;
}
catch(Exceptionerr)
{
throw(newExcep权tion("备份**库失败"+err.Message));
}
finally
{
svr.DisConnect();
}
}

privatevoidStep(stringmessage,intpercent)
{
PBar.Value=percent;
}

其中,这两个语句实现了进度的实时显示:
SQLDMO.BackupSink_PercentCompleteEventh**andlerpceh=newSQLDMO.BackupSink_PercentCompleteEventh**andler(Step);
b**.PercentComplete+=pceh;
Step就是上面privatevoidStep(stringmessage,intpercent)的方法名称,它用来显示进度条的当前进度。

3.**库的恢复和杀死进程的代码:

publicboolRestoreDB(stringstrDbName,stringstrFileName,ProgressBarpgbMain)
{
PBar=pgbMain;
SQLDMO.SQLServersvr=newSQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName,UserName,Password);
SQLDMO.QueryResultsqr=svr.E**mProcesses(-1);
intiColPIDNum=-1;
intiColDbName=-1;
for(inti=1;i<=qr.Columns;i++)
{
stringstrName=qr.get_ColumnName(i);
if(strName.ToUpper().Trim()=="SPID")
{
iColPIDNum=i;
}
elseif(strName.ToUpper().Trim()=="DBNAME")
{
iColDbName=i;
}
if(iColPIDNum!=-1&&iColDbName!=-1)
bre**;
}

for(inti=1;i<=qr.Rows;i++)
{
intlPID=qr.GetColumnLong(i,iColPIDNum);
stringstrDBName=qr.GetColumnString(i,iColDbName);
if(strDBName.ToUpper()==strDbName.ToUpper())
svr.KillProcess(lPID);
}

SQLDMO.Restoreres=newSQLDMO.RestoreClass();
res.Action=0;
SQLDMO.RestoreSink_PercentCompleteEventh**andlerpceh=newSQLDMO.RestoreSink_PercentCompleteEventh**andler(Step);
res.PercentComplete+=pceh;
res.Files=strFileName;

res.Database=strDbName;
res.ReplaceDatabase=true;
res.SQLRestore(svr);
returntrue;
}
catch(Exceptionerr)
{
throw(newException("恢复**库失败,请关闭所有和该**库连接的程序!"+err.Message));
}
finally
{
svr.DisConnect();
}
}

其中这个语句取得了所有的进程列表:
SQLDMO.QueryResultsqr=svr.E**mProcesses(-1);

下面的语句找到和要恢复**库相关的进程并杀死:
intiColPIDNum=-1;
intiColDbName=-1;
for(inti=1;i<=qr.Columns;i++)
{
stringstrName=qr.get_ColumnName(i);
if(strName.ToUpper().Trim()=="SPID")
{
iColPIDNum=i;
}
elseif(strName.ToUpper().Trim()=="DBNAME")
{
iColDbName=i;
}
if(iColPIDNum!=-1&&iColDbName!=-1)
bre**;
}

for(inti=1;i<=qr.Rows;i++)
{
intlPID=qr.GetColumnLong(i,iColPIDNum);
stringstrDBName=qr.GetColumnString(i,iColDbName);
if(strDBName.ToUpper()==strDbName.ToUpper())
svr.KillProcess(lPID);
}